Ø Interceptor是struts2的核心,struts2百分之七十的功能是由interceptor完成的,例如表单数据的收集、Action参数的赋值、校验的底层实现等等。
Ø 自定义interceptor的实现
1. 写interceptor的实现类,需实现Interceptor接口或者继承AbstructInterceptor类,重写其intercepted方法,实现拦截
2. 在struts.xml文件中为自定义interceptor进行注册,如下
<interceptors> <interceptor name=”interceptor_name” class=”com.xx.InterceptorClass”> <param name=”paramName”>paramValue</param> </interceptor> </interceptor>
3. 在需要拦截的Action中添加interceptor注册,在Action添加如下代码:
<action name=”requestPath” class=”com.xx.ActionClass”> <param name=”paramName”></param> <result name=”resultname”>resulturl.jsp</result> <interceptor-ref name=” interceptor_name”> </interceptor-interceptor> </action>
4. 当做完以上工作后我们发现之前我们已经配置好的校验框架已经不起作用了,这是因为,如果action中没有自定义的拦截器,struts2会为该action添加默认的拦截器,即defaultStack;如果action中用户自己添加了自定义拦截器,将覆盖掉系统的defaultStack,这时候需要我们显式调用该拦截器栈。如下:
<action name=”requestPath” class=”com.xx.ActionClass”> <param name=”paramName”></param> <result name=”resultname”>resulturl.jsp</result> <interceptor-ref name=” interceptor_name”> </interceptor-interceptor> <interceptor-ref name=”defaultStack”></interceptor> </action>
Ø 如果在一个action中添加了多个拦截器,执行顺序是这样的:
interceptor1.init->interceptor2.init->interceptor2.intercepte->interceptor2.intercepte->interceptor2.destroy->interceptor1.destroy
Ø 也可以为一个package指定默认的interceptor
<default-interceptor-ref name=”interceptor_name”></default-interceptor-ref>