在一个偶然的机会我发现了原来我做的一个项目以前是的前台界面应用了sitemash,而且听说很不错,就按耐不住了,在网上搜了点儿帖写了一个例子。以备后用。
一、sitemash简介:
SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。
sitemesh的官方网站是:http://www.opensymphony.com/sitemesh/index.html
sitemesh的下载地址是:http://www.opensymphony.com/sitemesh/download.action
二、运行原理:
SiteMesh框架是OpenSymphony团队开发的一个非常优秀的页面装饰器框架,它通过对用户请求进行过滤,并对服务器向客户端响应也进行过滤,然后给原始页面加入一定的装饰(header,footer等),然后把结果返回给客户端。通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用include指令来包含装饰效果,目标页与装饰页完全分离,如果所有页面使用相同的装饰器,可以是整个Web应用具有统一的风格。
三、用实例说话:
我用的是sitemesh 2.4的版本。
1、为你的项目/WEB-INF/lib下添加一个sitemesh-2.4.1.jar
2、在/WEB-INF/新建一个decorators.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <decorators defaultdir="/decorators"> <!-- 此处用来定义不需要过滤的页面 --> <excludes> </excludes> <!-- 用来定义装饰器要过滤的页面 --> <decorator name="main" page="main.jsp"> <pattern>/*</pattern> </decorator> </decorators>
各个标签的作用:
3、在[web-app]/WEB-INF/web.xml添加以下内容:
<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>
4、在[web-app]下创建一个decorators文件夹,在该文件下再创建一个装饰页面main.jsp,包含以下内容:
<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%> <html> <head> <title><decorator:title default="装饰器页面..." /></title> <decorator:head /> </head> <body> sitemesh的例子<hr> <decorator:body /> <hr>http://yanzhenwei.iteye.com </body> </html>
这就是最主要的页面了,每一个被装饰的页面都是被这个装饰器装饰之后才返回你看到的那个页面的。所以可以把那些公共的js、css等修饰放到该处,其他界面就不用再引入了。
5、在[web-app]下创建被装饰页面index.jsp,包含以下内容:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Agent Test</title> </head> <body> <p>本页只有一句,就是本句.</p> </body> </html>
下面是需要的jar包