struts2中的拦截器在action执行的前后执行,Struts2的核心功能都是通过拦截器实现的,多个拦截器可以组成拦截器栈;
作用:对于action中的一些公共代码可以放到拦截器中实现.如权限控制,日志等;
多个拦截器之间的执行是采用责任链设计模式来实现的;
拦截器的实现步骤
1)编写拦截器(实现 Interceptor接口或者继承AbstractInterceptor类)
2)在struts.xml中 配置拦截器
3)在action中引用拦截器
拦截器配置详解
1)当引用自定义拦截器时,默认拦截器将不起作用
2)struts-defaut.xml中,配置了默认拦截器,如果不引用拦截器,那么默认的拦截器将起作用
<default-interceptor-ref name="defaultStack"/>
3)当引用自定义拦截器后,又想使用struts2提供的拦截器功能,那么需要手动引用
<action name="hello" class="cn.xsx.action.HelloAction">
<result>/index.jsp</result>
<!-- 引用拦截器 -->
<interceptor-ref name="time"></interceptor-ref>
<!-- 引用默认拦截器栈(引用拦截器栈与引用拦截器栈的方式一样) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
4)当引用的拦截器比较多时,可以将多个拦截器放入拦截器栈中
<interceptors>
<!-- 配置拦截器 -->
<interceptor name="time" class="cn.xsx.interceptor.TimeInterceptor"></interceptor>
<!-- 定义自定义拦截器栈 (一个拦截器栈里可以包含多个拦截器引用)-->
<interceptor-stack name="znStack">
<!-- 引用拦截器 -->
<interceptor-ref name="time"></interceptor-ref>
<!-- 引用默认拦截器栈(引用拦截器栈与引用拦截器栈的方式一样) -->
<interceptor-ref name= "defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
5)当自定义拦截器栈在这个包下所有的action都使用时,可以定义为默认的拦截器栈,或默认的拦截器
<interceptors>
<!-- 配置拦截器 -->
<interceptor name="time" class="cn.xsx.interceptor.TimeInterceptor"></interceptor>
<!-- 定义自定义拦截器栈 (一个拦截器栈里可以包含多个拦截器引用)-->
<interceptor-stack name="znStack">
<!-- 引用拦截器 -->
<interceptor-ref name="time"></interceptor-ref>
<!-- 引用默认拦截器栈(引用拦截器栈与引用拦截器栈的方式一样) -->
<interceptor-ref name= "defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器(或者拦截器栈) -->
<default-interceptor-ref name="znStack">