《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh

在Struts2中使用SiteMesh的时候,SiteMesh是以Struts2插件的形式出现的。

单独使用SiteMesh需要做好多事情:准备资源、引用过滤器、准备模板页面、准备被装饰页面、结合模板页面和被装饰页面。

在整合Struts2与SiteMesh的时候,准备模板页面和准备被装饰页面基本上没有变化,这里就不过多叙述了。接下来从其他几个方面,包括:准备资源、引用过滤器、结合模板页面和被装饰页面,来继续学习。

20.3.1准备资源

       这里的准备资源和单独使用SiteMesh稍有不同,接下来把需要的东西一一拷贝到我们学习Struts2的Web项目上去:

  • SiteMesh的jar包:把sitemesh-blank\WEB-INF\lib\sitemesh-2.4.1.jar拷贝到Web工程的构建路径下,WebContent\WEB-INF\lib包下面。
  • SiteMesh插件:把struts-2.1.8.1\lib\struts2-sitemesh-plugin-2.1.8.1.jar拷贝到Web工程的构建路径下,WebContent\WEB-INF\lib包下面。
  • SiteMesh的自定义标签:把sitemesh-blank\WEB-INF\lib包下的所有tld文件拷贝到Web工程的WEB-INF文件夹下。注意,前面单独使用SiteMesh的时候,是把tld文件拷贝到WEB-INF\lib文件夹下的。
  • 模板页面和被装饰页面的结合:把sitemesh-blank\WEB-INF\decorators.xml拷贝到Web工程的WEB-INF文件夹下。

20.3.2引用过滤器

ings��-i�� �,� amily:Wingdings'>Ø         sitemesh-blank\WEB-INF\ decorators.xml:定义模板页面和被装饰页面如何结合。

 

20.2.2拷贝资源

       引用SiteMesh的过滤器本身和前面示例做的差不多,就是把相关的过滤器的配置,拷贝到web.xml中,但要注意过滤器的关系:

  • FilterDispatcher一定要有,通常出现在最后。
  • 如果出现了SiteMesh这种过滤器,需要在SiteMesh之前加上ActionContextCleanUp过滤器。

所以,不但要引用SiteMesh过滤器,还要在它之前引用Struts2的ActionContextCleanUp过滤器,以<filter-mapping>元素出现的顺序为准,应该顺序配置ActionContextCleanUp、SiteMesh、FilterDispatcher这几个过滤器,示例代码如下:

 

java代码:
  1. <filter>  
  2.     <filter-name>Struts2-action-cleanup</filter-name>  
  3.     <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>Struts2-action-cleanup</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  
  9. <filter>  
  10.     <filter-name>sitemesh</filter-name>  
  11.     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
  12. </filter>  
  13. <filter-mapping>  
  14.     <filter-name>sitemesh</filter-name>  
  15.     <url-pattern>/*</url-pattern>  
  16. </filter-mapping>  
  17. <filter>  
  18.     <filter-name>Struts2</filter-name>  
  19.     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  20. </filter>  
  21. <filter-mapping>  
  22.     <filter-name>Struts2</filter-name>  
  23.     <url-pattern>/*</url-pattern>  
  24. </filter-mapping>  

20.3.3结合模板页面和被装饰页面

       模板页面和被装饰页面基本上没有变化,只是模板页面引用SiteMesh的tld文件的路径,原来是“WEB-INF\lib\sitemesh-decorator.tld”,现在应该去掉lib,修改成“WEB-INF\sitemesh-decorator.tld”。

现在要使用Struts2的Action,先来准备一个简单的Action,没有什么功能,只是跳转到后继的jsp。示例代码如下:

 

java代码:
  1. public class SiteMeshAction extends ActionSupport {  
  2.     public String execute() throws Exception {  
  3.         return SUCCESS;  
  4.     }  
  5. }  

接下来到struts.xml中配置这个Action,示例代码如下:

 

java代码:
  1.  <package name="helloworld" extends="struts-default">  
  2.      <action name="sitemeshAction" class="cn.javass.sitemesh.SiteMeshAction">  
  3. <result>/index.jsp</result>  
  4. lt;/action>  
  5.  </package>  

       decorators.xml文件也不用变化,因为原来配置的装饰模式就是“/*”,意思是当前web应用中所有的URL指向的页面都会受到装配。

       运行测试一下,URL为: http://localhost:9080/helloworld/sitemeshAction.action,会得到与单独使用SiteMesh一样的结果,这样说明Struts2整合SiteMesh成功。

 

 

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4180.html

欢迎访问http://sishuok.com获取更多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值