struts2之整合sitemesh(使用sitemesh插件)

struts2之整合sitemesh(使用sitemesh插件)

----------

 

 

为了在struts2中使用sitemesh的页面装饰,必须安装sitemesh插件。安装sitemesh插件非常简单,将struts2下的struts2-sitemesh-plugin-xxx.jar文件复制到web应用的根路径下,即可完成sitemesh插件的安装,当然也要sitemesh-xxx.jar(前面我们用maven例子解释过)。

正如前面看到的,为了整合sitemesh框架,必须在web.xml文件中配置sitemesh的核心过滤器,让该核心过滤器来过滤所有的用户请求。但我们知道,struts2的所有值是保存在Stack Context或者ValueStack中的,默认情况是,某个过滤器一旦访问了该Stack Context或ValueStack后,里面对应的值将会被清除掉,如果先使用struts2的FilterDispatcher来过滤用户请求,则sitemesh的过滤器将无法取得Stack Context或者ValueStack中的数据。

为了解决这个问题,Struts2提供了ActionContextCleanUp类。在Struts2的架构中,标准的过滤器链一般以ActionContextCleanUp开始,后面跟着其他需要的过滤器,最后,由FilterDispatcher来处理请求,FilterDispatcher通常是将请求传递给ActionMapper。

ActionContextCleanUp的一个重要作用是整合siteMesh页面装饰器,它通知FilterDispatcher在正确的时间清除ActionContext中的请求数据。注意:如果需要在SiteMesh的修饰器页面中访问ActionContext,ActionContextCleanUp过滤器必须放在过滤器的起点。

ActionContextCleanUp过滤器用来与FilterDispatcher协同工作来整合SiteMesh,通常,我们会把ActionContextCleanUp过滤排在第一位,似乎将FilterDispatcher排在第二位是较好的解决方案。但问题是:ActionContextCleanUp过滤器只能保证在FilterDispatcher之前先不清除Stack Context和ValueStack中的值。如果将SiteMesh过滤器排在FilterDispatcher之后,这会导致SiteMesh过滤器无法访问到Stack Context和ValueStack中的值。

因此,为了让SiteMesh过滤器和FilterDispatcher都可访问到Stack Context和ValueStack中的值,且FilterDispatcher可以在合适时机清除Stack Context和ValueStack中的值,应该使用如下的过滤器顺序:

1.ActionContextCleanUp过滤器

2.SiteMesh核心过滤器

3.FilterDispatcher过滤器

为此,在web.xml配置文件中使用如下3个过滤器,且过滤器的排列顺序也不能改变。如例:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值