一.需要包(两个),我用的是struts-2.1.8.1,注意版本
struts2-sitemesh-plugin-2.1.8.1.jar
sitemesh-2.4.2.jar
二.创建decorators.xml
- <?xml version="1.0" encoding="utf-8"?>
- <decorators defaultdir="/decorators">
- <!--excludes结点则指定了哪些路径的请求不使用任何模板-->
- <!--/index.jsp和凡是以/login/开头的请求路径一律不使用模板-->
- <excludes>
- <pattern>/index.jsp*</pattern>
- <pattern>/login/*</pattern>
- </excludes>
- <!--decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板-->
- <decorator name="main" page="mode.jsp">
- <pattern>/*</pattern>
- </decorator>
- </decorators>
<?xml version="1.0" encoding="utf-8"?> <decorators defaultdir="/decorators"> <!--excludes结点则指定了哪些路径的请求不使用任何模板--> <!--/index.jsp和凡是以/login/开头的请求路径一律不使用模板--> <excludes> <pattern>/index.jsp*</pattern> <pattern>/login/*</pattern> </excludes> <!--decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板--> <decorator name="main" page="mode.jsp"> <pattern>/*</pattern> </decorator> </decorators>
三.在WebRoot下创建decorators 文件夹,其下创建layout.jsp
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@taglib prefix="decorator"
- uri="http://www.opensymphony.com/sitemesh/decorator"%>
- <%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title><decorator:title default="嘻嘻哈哈" />
- </title>
- <decorator:head />
- </head>
- <body >
- <div style="background-color: red;width:100%;height: 100px;">
- 头
- </div>
- <div>
- <!-- 这里的内容由引用模板的子页面来替换 -->
- <decorator:body />
- </div>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%> <%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title><decorator:title default="嘻嘻哈哈" /> </title> <decorator:head /> </head> <body >不使用模板
- <%@ page language="java" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>index.jsp</title>
- </head>
- <body>
- <form action="login.jsp">
- <input type="submit" />
- </form>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>index.jsp</title> </head> <body> <form action="login.jsp"> <input type="submit" /> </form> </body> </html>
创建login.jsp,根据配置文件,他使用模板
- <%@ page language="java" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>行么</title>
- </head>
- <body>
- <form action="login.jsp">
- <input type="text" />
- <input type="submit" />
- </form>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>行么</title> </head> <body> <form action="login.jsp"> <input type="text" /> <input type="submit" /> </form> </body> </html>
=============================================================================
SiteMesh项目简介
<pattern>/*</pattern>
</decorator>
</decorators>
decorators.xml有两个主要的结点:
decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板
excludes结点则指定了哪些路径的请求不使用任何模板
如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板;
另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录;
六、实战感受
刚刚做完一个用到sitemesh的项目,跟以前用tiles框架相比,最大的感受就是简单,系统设计阶段
就把模板文件和sitemesh框架搭好了!哪些页面使用框架哪些不使用,全部都通过UI Demo很快就定义出来了;
在接下来的开发中所有成员几乎感受不到sitemesh的存在,各自仅仅关心自己的模块功能实现;
七、总结
使用sitemesh给我们带来的是不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务
逻辑,而不是整个页面的风格和结构。它让我们摆脱了大量用include方式复用页面尴尬局面,也避免了tiles
框架在团队开发中的复杂度,它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案。