Struts 2将核心功能放倒多个拦截器中实现,拦截器可以自由选择和组合,增强了灵活性,有利于系统的解耦。
Struts 2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能。
拦截器方法在Action执行之前和之后执行。
拦截器栈:
>> 从结构上看,拦截器栈相当于多个拦截器的组合。
>>在功能上看,拦截器栈也是拦截器
拦截器与过滤器原理很相似。
为Action提供附加功能时,无需修改Action代码,使用拦截器来提供。
使用:
继承AbstractInterCeptor
重写intercept(ActionInvocaton invocation)
//预处理工作
String result = invocation.invoke();//执行后续拦截器或Action
//后续处理工作
return result;//返回结果字符串
拦截器简单配置
<package name="default" namespace="/" extends="struts-default">
<interceptors>//可以写多个拦截器,单个拦截器的话可以只写<interceptor>
<interceptor name="myTimer" class="类的全路径名"></interceptor>
<interceptors>
<action name="index" class="类的全路径名">
<result>/index.jsp</result>
<interceptor-ref name="myTimer"></interceptor-ref> //拦截器引用
<interceptor-ref name="defaultStack"></interceptor-ref>
//默认拦截器,自定义以后会失效,所以要手动加入
</action>
</package>
配置多个拦截器(拦截器栈)
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="myTimer" class="类的全路径名"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor -stack name="interceptorStackName">
<!-- 指定引用的拦截器 -->
<interceptor-ref name="myTimer | interceptorStackName"/>
</interceptor -stack >
</interceptors>
<!-- 默认拦截器 -->
<default-interceptor-ref name="myTimer | interceptorStackName"/>