当前位置: 代码迷 >> Web前端 >> Sitemesh运用
  详细解决方案

Sitemesh运用

热度:56   发布时间:2012-10-23 12:12:22.0
Sitemesh应用

1.加入包

sitemesh-2.3.jar

?

2.在web.xml中配置过滤器

?

<!-- SiteMesh的过滤器配置信息 开始 -->
??? <filter>
??? ??? <filter-name>sitemesh</filter-name>
??? ??? <filter-class>
??? ??? ??? com.opensymphony.module.sitemesh.filter.PageFilter
??? ??? </filter-class>
??? </filter>
??? <filter-mapping>
??? ??? <filter-name>sitemesh</filter-name>
??? ??? <url-pattern>/*</url-pattern>
??? </filter-mapping>
??? <!-- SiteMesh的过滤器配置信息 结束 -->

?

3.在web-info下建立文件decorators.xml,文件例如

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/decorators">
?<!-- 在excludes元素下指定的页面将不会由SiteMesh来装饰 -->
?<excludes>
??<pattern>/login.jsp</pattern>
??<pattern>/js/*</pattern>
??<pattern>/images/*</pattern>
??<pattern>/decorators/*</pattern>

ajax等异步请求要写在这里
?</excludes>

?<!-- 创建一个名为main的装饰器,该装饰器页面为main.jsp,
??用于装饰pattern指定的URL的所有页面-->
?<decorator name="admin" page="admin/admin.jsp">
??<pattern>/admin/welcome.action</pattern>
??<pattern>/admin/pubinfo/*</pattern>
?</decorator>
?<decorator name="index" page="index/index.jsp">
??<pattern>/index/classify/index*</pattern>
?</decorator>
</decorators>

?

4.在web-info下建立文件sitemesh.xml,文件例如

<sitemesh>
??? <property name="decorators-file" value="/WEB-INF/decorators.xml" />
??? <excludes file="${decorators-file}" />
??? <!-- Page Parsers :负责读取stream的数据到一个Page对象中以被SiteMesh解析和操作。-->
??? <page-parsers>
??? ??? <parser default="true"
??? ??? ??? class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
??? ??? <parser content-type="text/html"
??? ??? ??? class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
??? ??? <parser content-type="text/html;charset=utf-8"
??? ??? ??? class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
??? ??? ???
??? </page-parsers>

??? <decorator-mappers>
??? ??? <!-- 可打印的装饰器,可以允许你当用http://localhost/test.html?printable=true方式访问时给出原始页面以供打印 -->
??? ??? <!-- 其中printable1 与 decorators.xml中的装饰器printable1一致进行映射,若不添加此段,默认为printable -->
??? ??? <mapper
??? ??? ??? class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
??? ??? ??? <param name="decorator" value="printable1" />
??? ??? ??? <param name="parameter.name" value="printable" />
??? ??? ??? <param name="parameter.value" value="true" />
??? ??? </mapper>
??? ??? <mapper
??? ??? ??? class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
??? ??? ??? <param name="config" value="${decorators-file}" />
??? ??? </mapper>
??? </decorator-mappers>
</sitemesh>

?

由sitemesh.xml内容首行知道,decorators.xml是由sitemesh.xml关也就是说上面新建的 decorators.xml的位置和文件名是可以更改的,在更改之后,需要在sitemesh.xml更改其对应的路径。现在可以这样认为 sitemesh.xml只是为加载decorators.xml,只了decorators.xml可以变,其它内容都是固定的。

那sitemesh.xml又是由谁来加载的?很容易想到,sitemesh.xml可能像struts,spring等配置文件一样是在 web.xml中加载的。但是其实不是这样的。Sitemesh.xml文件的位置和文件名是固定的,也就是说sitemesh.xml的加载过程被 sitemesh jar包封装起来了。那web.xml中就不需要配置sitemesh相关内容了?也不是,sitemesh的原理是拦截请求和响应,在java web中有一个接口是专门弄这东西的。对,就是Filter(过滤器)。我们要在web.xml中加上sitemesh过滤器。

?

5.建立对应的模板main.jsp

?

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator"
??? prefix="decorator"%>
??? <%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
??? <%@include file="../frame/taglib.jsp"%>

<%
??? String path = request.getContextPath();
??? String basePath = request.getScheme() + "://"
??? ??? ??? + request.getServerName() + ":" + request.getServerPort()
??? ??? ??? + path + "/";
???
??? %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>?
??? <head>
??? ???
?? <title><decorator:title default="IP复用系统" /></title>
??? ??? <link rel="stylesheet" type="text/css"
??? ??? ??? href="<%=basePath%>css/style.css">??? ??? ???
??? ??? <link rel="stylesheet" type="text/css"
??? ??? ??? href="<%=basePath%>css/calendar-win2k-cold-1.css">

??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/IEFirefox.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/zDialog.js"></script>
??????? <script type="text/javascript" src="${pageContext.request.contextPath }/js/zDrag.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.3.2.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar-setup.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.cookie.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar-zh.js"></script>
??? ??? <script type="text/javascript" src="${pageContext.request.contextPath }/js/floatDiv.js"></script>
??? ???
??? ??? <script type="text/javascript">
????
???? function switchSysBar(){
??? ??? if (document.getElementById("left").style.display=="")
??? ??? {
??? ??? ??? document.getElementById("img1").src="<%=basePath%>images/main_30_1.gif";
??? ??? ??? document.getElementById("left").style.display="none";
??? ??? ??? document.getElementById("right").style.width="100%" ;
??? ??? }
??? ??? else
??? ??? {
??? ??? ??? document.getElementById("img1").src="<%=basePath%>images/main_30.gif";
??? ??? ??? document.getElementById("left").style.display="" ;
??? ??? ??? document.getElementById("right").style.width="95%";
??? ??? }
??? }



?</script>
?
??? <decorator:head />
???
??? </head>
???

??? <body id="body" style="" >
??? <!-- 判断是否用户session状态 -->
??? ?? <c:if test="${empty logdata_session_login_user}">
??? ???? <script type="text/javascript">
??? ?????? window.location="<%=basePath%>login.jsp";
??? ???? </script>
??? ?? </c:if>
??? ??? <div id="body" style="">

??? ??? ??? <table width="100%" height="100%" border="0" cellpadding="0"
??? ??? ??? ??? cellspacing="0" class="cont_tab" >
??? ??? ??? ??? <tr>
??? ??? ??? ??? ??? <td colspan="3">
??? ??? ??? ??? ??? ??? <!--头部信息开始? -->
??? ??? ??? ??? ??? ??? <div id="header">
??? ??? ??? ??? ??? ??? ??? <jsp:include page="top.jsp" flush="true" />
??? ??? ??? ??? ??? ??? <!--头部信息结束? -->
??? ??? ??? ??? ??? ??? </div>
??? ??? ??? ??? ??? </td>
??? ??? ??? ??? </tr>
??? ??? ??? ??? <tr>
??? ??? ??? ???
??? ??? ??? ??? <td? id="left" width=""? valign="top">
??? ??? ??? ??? ??? <jsp:include page="left.jsp" flush="true" />
??? ??? ??? ??? </td>
??? ??? ??? ??? ???
??? ??? ??? ??? ??? <td height="100%" width="1px" background="<%=basePath%>images/main_27.gif" style="background-repeat: repeat-y;">
??? ??? ??? ??? ??? ??? ???
??? ??? ??? ??? ??? ??? ??? ??? <img title="打开/关闭菜单" src="<%=basePath%>images/main_30.gif"
??? ??? ??? ??? ??? ??? ??? ??? ??? name="img1" width="4" style="cursor:pointer;"? height="47" id=img1
??? ??? ??? ??? ??? ??? ??? ??? ??? onclick="switchSysBar();"/>
??? ??? ??? ??? ??? ??? ??? ??? ???
??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ???
??? ??? ??? ??? ??? <td? valign="top" width="95%" style="padding-right: 7px;" id="right">
??? ??? ??? ??? ??? ??? <table width="100%" height="100%" border="0" cellpadding="0"
??? ??? ??? ??? ??? ??? ??? cellspacing="0" >
??? ??? ??? ??? ??? ??? ???
??? ??? ??? ??? ??? ??? ??? <tr>
??? ??? ??? ??? ??? ??? ??? ??? <td>
??? ??? ??? ??? ??? ??? ??? ??? ??? <table width="100%" height="100%" border="0" cellpadding="0"
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? cellspacing="0" >
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? <tr >
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? <td width="100%" align="left" valign="top" style="">
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? <decorator:body />
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? </tr>
??? ??? ??? ??? ??? ??? ??? ??? ??? </table>
??? ??? ??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ??? ??? ??? </tr>
??? ??? ??? ??? ??? ??? </table>
??? ??? ??? ??? ??? </td>
??? ??? ??? ??? </tr>
??? ??? ??? ??? <tr>
??? ??? ??? ??? ??? <td colspan="3">
??? ??? ??? ??? ??? ??? <div id="footer"><jsp:include page="down.jsp" flush="true" /></div>
??? ??? ??? ??? ??? </td>
??? ??? ??? ??? </tr>
??? ??? ??? </table>

??? ??? </div>
??? </body>

</html>