一.需要包(两个),我用的是struts-2.1.8.1,注意版本

    struts2-sitemesh-plugin-2.1.8.1.jar

    sitemesh-2.4.2.jar

二.创建decorators.xml

Xml代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <decorators defaultdir="/decorators">  
  3.     <!--excludes结点则指定了哪些路径的请求不使用任何模板-->  
  4.     <!--/index.jsp和凡是以/login/开头的请求路径一律不使用模板-->  
  5.     <excludes>  
  6.         <pattern>/index.jsp*</pattern>  
  7.         <pattern>/login/*</pattern>  
  8.     </excludes>  
  9.     <!--decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板-->  
  10.     <decorator name="main" page="mode.jsp">  
  11.         <pattern>/*</pattern>  
  12.     </decorator>  
  13. </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

Html代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@taglib prefix="decorator"  
  3.     uri="http://www.opensymphony.com/sitemesh/decorator"%>  
  4. <%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"  
  6. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  7. <html>  
  8.     <head>  
  9.         <title><decorator:title default="嘻嘻哈哈" />  
  10.         </title>  
  11.         <decorator:head />  
  12.     </head>  
  13.     <body >  
  14.         <div style="background-color: red;width:100%;height: 100px;">  
  15.             头  
  16.         </div>  
  17.         <div>  
  18.             <!-- 这里的内容由引用模板的子页面来替换 -->  
  19.             <decorator:body />  
  20.         </div>  
  21.     </body>  
  22. </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 >不使用模板  
Html代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.     <head>  
  5.         <title>index.jsp</title>  
  6.     </head>  
  7.     <body>  
  8.         <form action="login.jsp">  
  9.             <input type="submit" />  
  10.         </form>  
  11.     </body>  
  12. </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,根据配置文件,他使用模板

Java代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.     <head>  
  5.         <title>行么</title>  
  6.         </head>  
  7.     <body>  
  8.         <form action="login.jsp">  
  9.             <input type="text" />  
  10.             <input type="submit" />  
  11.         </form>  
  12.     </body>  
  13. </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系统页面的一种方案。
 

相关文章: