Struts2拦截器(翻译自Struts2官方网站)

Struts2拦截器(翻译自Struts2官方网站)

许多的Struts2中的Action需要共享一些共用信息或者是模块,有些Action需要对输入进行验证,另外一些Action或许需要对文件上传之前做一些逻辑处理,又或者一些Action需要对重复提交进行保护,还有一些Actiion需要在页面显示前,初始化下拉框或一些页面组件。

Struts2框架使用了Interceptor(拦截器)策略使共享这些关心的模块更简单的使用起来。当需要使用到一些映射到Action的资源时,框架生成了Action对象,但在该Action被执行前,执法该Action中的方法被另外一个对象拦截了,在Action执行时,可能再次被拦截,我们亲切地称此对象为拦截器。 理解拦截器

拦截器能够在一个Action执行前后拦截它。目前的很多框架的核心实现均是基于拦截器。(本人说两句,OOP因为拦截器而显得更为精彩,AOP必将成为下一个核心关注点)。拦截器可以帮助实现很多公共的内容,其中有重复提交,类型转换,对象初始化,验证,文件上传,页面初始化等等。由于每个拦截器都可以像热插拔的模块,你可以在你的Action中正确地去使用需要的拦截器。

拦截器可以配置在一个基类的action中,自定义的

拦截器可以尽量少或者配合框架中的已有的拦截器。 所以套用句外国人的话说吧,在一个Action执行时,让我们为它再提升一些吧,给Action更大

的舞台更强大的力量吧。

如上图所示,Struts2的Action被一个或者多个拦截器围绕,所有的用户请求都会被拦截器 所拦截,最后交给Action处理,处理结果以逻辑视图的方式返回给用户,调用的流程由配置文件来实现。

在一些例子中,一个拦截器可以解决像重复提交以及验证失败这样的例子。当然也可以改变一个Action在执行前的状态。

拦截器可以定义为一个指定执行顺序的链中,在某些情况下,拦截器的顺序非常的重要。

=\该元素的意思是定义了一个继承于struts-default包的包,那么该包中的所有action均可使用struts-default.xml中定义的拦截器以及拦截器链。其中注意一点,struts-default.xml中定义了一系列的拦截器和拦截器链,同时也定义了一个默认的拦截器defaultStack,一电定义了默认的拦截器,那么该拦截器将会对包中的所有的Action起作用,当然如果你的Action中显式地定义了拦截器,那么默认拦截器将会失去作用,当然如果想不让他失去作用,

那么也必须显式地定义系统默认的拦截器。 <default-interceptor-ref ..../>元素为

<package../>元素的一个子元素配置,如果在某个包中定义了一个默认的拦截器,那么此拦截器将对该包中的所有的Action都是有效的,当然一定要记住,显式地定义拦截器的情况除外。

当然除了可以使用系统提供的默认的拦截器,我们也可以自定义自己的拦截器。Struts2框架提供了一个定义拦截器的接口Interceptor接口。同时Struts2框架也提供了一个可以用于过滤拦截Action方法的类

MethodFilterInterceptor。该类有两个属性excludeMethods和includeMethods。分别代表指定拦截器拒绝拦截的方法和需要拦截的方法。例: struts.xml

<package name=\<interceptors>

<interceptor name=\<interceptor name=\</interceptors> <action name=\class=\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4