一、SiteMesh简介
SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。
二、SiteMesh原理
SiteMesh框架是OpenSymphony团队开发的一个非常优秀的页面装饰器框架,它通过filter对用户请求进行过滤,并对服务器向客户端响应也进行过滤,然后给原始页面加入一定的装饰(header,footer等),然后把结果返回给客户端。通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用include指令来包含装饰效果,目标页与装饰页完全分离,如果所有页面使用相同的装饰器,可以是整个Web应用具有统一的风格。
三、SiteMesh简单例子
1 导入jar包
sitemesh-2.3.jar包
引入sitemesh.xml和decorators.xml
2 在web.xml中配置sitemesh类的的filter,过滤所有的页面(固定值)
<filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3,配置decorators.xml
<?xml version="1.0" encoding="utf-8"?> <!--指定模板所在目录--> <decorators defaultdir="/WEB-INF/decorator"> <!-- 此处用来定义不需要过滤的页面 --> <excludes> </excludes> <!-- 配置所有请求为路径中包含manager的并且jsp在pages/manager/下的所有jsp都会转到manager.jsp这个模板下 --> <decorator name="manager" page="manager.jsp"> <pattern>/manager/*</pattern> <!-- <pattern>/pages/manager/*</pattern>--> <!-- 请求路径中一定要包含pattern中的内容,如果不包含转发不到指定的位置 --> </decorator> <decorator name="client" page="client.jsp"> <pattern>/client/*</pattern> </decorator> </decorators>
4, 配置模板(需要引入taglib)
<%@ page language="java" contentType="text/html;charset=utf-8"%> <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <!--引入要访问页面的title信息--> <title><decorator:title default="默认title值"/></title> <!--引入要访问页面的head信息--> <decorator:head/> </head> <body > <div id="s" > <div> 左侧导航配置 </div> <div id="main"> <!--引入目标页面的body部分--> <decorator:body/> </div> </div> </body> </html>
5, 写目标页面
<%@ page language="java" contentType="text/html;charset=utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>后台管理系统</title> <script type="text/javascript" src="..."></script> </head> <body> 欢迎光临后台管理系统首页 </body> </html>
6,总结
文章评论