- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、拦截器
什么是拦截器
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
Struts 2框架的绝大部分功能是通过来完成的,当FilterDispatcher拦截到用户请求后,大量拦截器将会对用户请求进行处理,然后才调用用户自定义的Action类中的方法来处理请求。可见,拦截器是Struts 2的核心所在。
定义拦截器使用interceptor…/元素。其格式为:
interceptor name=拦截器名 class=拦截器实现类/interceptor
只要在interceptor..与/interceptor之间配置param…/子元素即可传入相应的参数。其格式如下:
interceptor name=myInterceptor class=org.tool.MyInterceptor
param name=参数名参数值/param
...
/interceptor
定义拦截器栈用interceptor-stack name=拦截器栈名/元素,由于拦截器栈是由各拦截器组合而成的,所以需要在该元素下面配置interceptor-ref …/子元素来对拦截器进行引用。其格式如下:
interceptor-stack name=拦截器栈名
interceptor-ref name=拦截器一/interceptor-ref
interceptor-ref name=拦截器二/interceptor-ref
interceptor-ref name=拦截器三/interceptor-ref
/interceptor-stack
拦截器配置
在这个Action类中,只有一个abcd方法,实际上,这个方法相当于execute方法,在下面会设置动作的method属性为abcd。下面我们来在struts.xml中定义拦截器类和动作,代码如下:
package name=包名
interceptors
interceptor name=拦截器一 class=拦截器实现类
/interceptor
interceptor name=拦截器二 class=拦截器实现类
/interceptor
interceptor-stack name=拦截器栈名
interceptor-ref name=拦截器一/interceptor-ref
interceptor-ref name=拦截器二/interceptor-ref
/interceptor-stack
/interceptors
default-interceptor-ref name=拦截器名或拦截器栈名
/default-interceptor-ref
/package
在配置上面的methodStack拦截器时要注意,最好在后面引用defaultStack,否则很多通过拦截器提供的功能将失去。
拦截器实现类
实现一个拦截器非常简单。实际上,一个拦截器就是一个普通的类,只是这个类必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。Interceptor接口有如下三个方法:
public interface Interceptor extends Serializable
{
void destroy();//该方法与init()方法对应,拦截器实例被销毁之前调用,用于销毁在init()方法中打开的资源。
void init();//该方法在拦截器被实例化之后、拦截器执行之前调用。
String intercept(ActionInvocation invocation) throws Exception;
//该方法用于实现拦截的动作。
}
其中init和destroy方法只在拦截器
文档评论(0)