SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取reponse,并进行装饰后再交付给客户。
其中涉及到两个名词: 装饰页面(decorator page)和 “被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一直的页面,
并返回给客户
运行环境需要:servlet2.3 , JDK1.4 以上。
正常模式下的web访问流程
加入SiteMesh装饰的web访问流程
一:搭建SiteMesh环境及简单使用
1.1:准备资源
siteMesh2.4.jar, sitemesh-page.tld , sitemesh-decorator.tld 这个三个必要文件
将jar包复制进/WEB-INF/lib目录下, 两个tld文件导入/WEB-INF下即可
在web.xml中加入siteMesh的filter和taglib
sitemesh
com.opensymphony.sitemesh.webapp.SiteMeshFilter
sitemesh
/*
sitemesh-page
/WEB-INF/lib/sitemesh-page.tld
sitemesh-decorator
/WEB-INF/lib/sitemesh-decorator.tld
1.2 建立decorators.xml
在/WEB-INF下创建decorators.xml文件,siteMesh通过该文件来获知"装饰页面"和"被装饰页面"的映射
decorators.xml
/*
/mai.html
/velocity.html
/freemarker.html
/agent.jsp
下边是对上边中所缺少的一些补充
/*
1.3 装饰页的创建
在web目录(或者webContent)下创建文件夹decorators,在文件夹中建立mai.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
/*这里导入了SiteMesh的标签库 */
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
OK,there is a decorator begin!
/*这里的意思是,被装饰页的title内容将会在这里插入 */
/*被修饰页的body内容将在这里插入
Yse,there is a decorator end !
1.4 被修饰页的创建
在web目录(或webContent)下创建mai.html
Insert title here
this is the Content Page !!!
1.5 使用tomcat进行示例运行,访问http://localhost:8080/{your project name}/mai.html , 运行结果如下:
1.6 sitemesh.xml的配置(可选, 示例中没有用到该文件)
该配置文件用于高级元素的配置,有具体需要的可以配置
使用总结:整个过程配置是相对简单的,先导入所需资源,然后再配置filter,之后是derator page和content page的创建以及他们之间的映射关系,配置命令是相对简单的,简单的需求上面这些已经足矣。
2.1 例子1
在{myapp}/WEB-INF/decorators.xml文件中添加以下decorator
/test1.jsp
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
My Site -
This message is in /decorators/mydecorator1.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
This is test1
This is test1
This is test1 This message is in /decorators/mydecorator1.jsp |
2.2 例子2(decorator:getProperty)
有时候,我们期望修改页面中某个有固定标记的片段,例如我们的jsp中有一个标记
在{myapp}/WEB-INF/decorators.xml文件中添加以下decorator
/test2.jsp
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
My Site -
This message is in /decorators/mydecorator2.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
This is test2
This is test2
Use tag
This is content1
This is content2
This is content4, it shouldn't be display
This is test2
Use
This is content1
This is content2
This message is in /decorators/mydecorator2.jsp
2.3 例子3 (page:applyDecorator tag)
在{myapp}/WEB-INF/decorators.xml文件中添加以下decorator:
/test3.jsp
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
My Site -
This is content1
This is content2
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
begin>
end>
在{myapp}目录下添加test3.jsp文件,内容如下:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
This is test3
This is test3
Use tag
打开浏览器,访问http://localhost:8080/myapp/test3.jsp,将会出现一下内容:
This is test3
Use
begin
This is content1
This is content2
end
这里,我在mydecorator3.jsp中应用了mydecorator31.jsp的的decorator,并且将原来在test2.jsp中的
2.4 例子4(page:parm tag)
在{myapp}/WEB-INF/decorators.xml文件中添加以下decorator:
/test4.jsp
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
My Site -
This is content1
This is content2
This content1 has been replaced
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
begin>
end>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
This is test4
This is test4
Use tag
This is test4
Use
begin
This content1 has been replaced
This is content2
end
这里,我在mydecorator4.jsp中应用了mydecorator41.jsp的的decorator,并且添加了
SiteMesh的一个重要特性是使用原始HTML的meta标签(例如)从基础页面传递信息到装饰器。作为一个例子,下面我们使用一个meta标签来定义HTML页面的作者。
< html >
< meta name = " author " content = " [email protected] " >
< head >
< title > Simple Document title >
head >
< body >
Hello World ! < br />
<%= 1 + 1 %>
body >
html >
<% @ taglib uri = " sitemesh-decorator " prefix = " decorator " %>
< decorator:usePage id = " myPage " />
< html >
< head >
< title >
My Site - < decorator:title default = " Welcome! " />
title >
< decorator:head />
head >
< body >
< h1 >< decorator:title default = " Welcome! " /> h1 >
< h3 >
< a href = " mailto: " >
< decorator:getProperty property = " meta.author " default = " [email protected] " />
a >
h3 >
< hr />
< decorator:body />
< p >
< small > ( < a href = " /?printable=true " > printable version a > ) small >
p >
body >
html >
参考资料:http://my.oschina.net/thinkinginc/blog/76180
参考资料:http://www.cnblogs.com/mailingfeng/archive/2011/12/21/2296041.html