原文链接:http://www.cnblogs.com/mailingfeng/archive/2011/12/21/2296105.html
1. SiteMesh的简介
2. SiteMesh的工作原理
SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取reponse,并进行装饰后再交付给客户。
其中涉及到两个名词: 装饰页面(decorator page)和 “被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一直的页面,
并返回给客户
sitemesh3.0运行环境需要:servlet2.5, JDK1.5 以上。
2.1 正常模式下的web访问流程
id="iframe_0.8119906884258721" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://today.java.net/images/2004/03/sitemesh_fig1.gif?_=2296105%22%20style=%22border:none;max-width:1509px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.8119906884258721',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 20px; height: 20px;">
2.2 加入SiteMesh装饰的web访问流程
id="iframe_0.6125412726799386" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://today.java.net/images/2004/03/sitemesh_fig2.gif?_=2296105%22%20style=%22border:none;max-width:1509px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.6125412726799386',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 20px; height: 20px;">
2.3 Sitemesh3.0的配置文件
跟2.X版本不同,siteMesh简化了配置,这里只需要在/WEB-INF目录下建立一个sitemesh3.xml文件
目录结构如下:
3.1 准备资源
下载sitemesh3.0 --> sitemesh-3.0.zip
将其中disk文件夹下的sitemesh-3.0-alpha-2.jar导入/WEB-INF/lib目录下
3.2 建立装饰页(decorator.jsp)
装饰页可以是静态文件,也可以是动态文件,这里用jsp来测试
在web根目录下建立decorators文件夹,用于存放装饰页,但这不是强制的,你可以任意定义
View Code
3.3 建立被装饰页(Content Page) -- hello.html
View Code
3.4 建立配置文件(sitemesh3.xml)
这里只做了一个简单的测试 ,建立一个decorator page 和 content page的映射关系
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
<mapping path="/*" decorator="/decorators/decorator.jsp"/>
</sitemesh>
3.5 web.xml的配置
这里不再需要像2.X版本去配置taglib,所以是相当地简化的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SiteMesh3TestProject</display-name>
<filter>
<filter-name>sitemesh</filter-name>
<filter- class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter- class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>
</web-app>
4.示例运行结果