拦截器允许在action的执行前后插入代码执行 、可以action动态添入 验证 对象组装 权限控制 日志记录 而不需要修改action
要在action配置拦截器首先需要在interceptors 元素使用interceptor 元素定义拦截器没然后在action使用intercepter-ref指定
引用的拦截器。interceptor有两个必要的元素 name和class 前者是拦截器的名字后者是拦截器完整的类名。
例:我们要为ResourceActrion配置来呢哥哥拦截器logger 和security
<package name="default" extends="struts-default">
<interceptors>
<interceptor name ="logger" class="....."/>
<interceptor name="security" class="...."/>
</interceptors>
<action name="resoure" class="....">
<result name="input">login.jsp</result>
<interceptor-ref name="logger"/>
<interceptor-ref name="security"/>
</action>
</package>
如果一个action需要多个interceptor 我们可以将多个拦截器组成拦截栈,在action应用
<package name="default" extends="struts-default">
<interceptors>
<interceptor name ="logger" class="....."/>
<interceptor name="security" class="...."/>
</interceptors>
<interceptor-stack name="loggerStack">
<interceptor-ref name="logger"></interceptor-ref>
<interceptor-ref name="security"></interceptor-ref>
</interceptor-stack>
<action name="aa">
<result name="input">login.jsp</result>
<interceptor-ref name="loggerStack"></interceptor-ref>
</action>
</package>
如果很多的action 需要引用相同的拦截器,那么我们可以使用default-interceptor-ref元素来定义一个默认的
拦截器或者拦截器栈的引用这样就不需要为每个action指定引用信息
<package name="default" extends="struts-default">
<interceptors>
<interceptor name ="logger" class="....."/>
<interceptor name="security" class="...."/>
</interceptors>
<interceptor-stack name="loggerStack">
<interceptor-ref name="logger"></interceptor-ref>
<interceptor-ref name="security"></interceptor-ref>
</interceptor-stack>
<default-interceptor-ref name="loggoerDefault"/>
<action name="aa">
<result name="input">login.jsp</result>
</action>
</package>
但在这个action定义其他的拦截器的引用,那么这个action将不使用默认的拦截器,如果想在默认的拦截器上
上添加拦截器,中能在action新配置默认拦截器应用的拦截器