拦截器
1. 什么是拦截器
1). 与JavaWeb中的Filter比较相似。
2). 拦截器只能拦截Action!!!
2. Struts中定义了很多拦截器,其中defaultStack中的拦截器会在每个Action之前执行。
3. 已经知道的拦截器
1). params
2). converterError
3). validation
4). workflow
=====================
3. 自定义拦截器
1). 写一个拦截器类
* 实现Interceptor接口(基本不用)
> void init() --> 当拦截器对象创建之后,马上调用,完成初始化工作。
> void destroy() --> 当拦截器对象被销毁之前,会被调用。
> String intercept(ActionInvocation) --> 每次拦截器时。返回值为结果名称,与execute()相同。
* 继承AbstractInterceptor类(比较常用)
* 继承MethodFilterInterceptor类(特殊情况下使用)
2). 配置它
> 定义拦截器
> 在action中引用拦截器
----------
自定义:
1. 写My1Intercetpor,继承AbstractInterceptor
重写intercetpor方法
其中放行:invocation.invoke()
2. 配置
1). 定义拦截器:
<interceptors>
<intercptor name="xxx" class="..."/>
</ ...>
2). 在<action>引用拦截器
<action>
<interceptor-ref name="xxx"/>
</action>
如果你在<acton>中指定了拦截器,那么默认拦截器就不会再执行!!!
第一种方法:
<action>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="my1" />
</action>
第二种方法:
<interceptor-stack name="myStack">
<interceptor-ref name="my1" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
...
<action>
<interceptor-ref name="myStack"/>
</action>
第三种方式:
指定当前<package>的默认拦截器栈为myStack
<default-interceptor-ref name="myStack" />