Struts 拦截器

 

 

 

拦截器工作原理:在Action请求到达Filter时,Struts会查找配置文件,并实例化配置的拦截器,然后串成一个列表,逐一进行调用。

拦截器与过滤器的区别:

  1.拦截器是java反射机制,过滤器是回调函数。

  2.拦截器不依赖servlet容器,而过滤器依赖。

  3.拦截器只对action请求有用,而过滤器几乎对任何请求都有用。

  4.拦截器可以访问Action上下文,值栈中的对象,而过滤器不能。

  5.在action的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时调用一次。

 

拦截器的配置

拦截器配置必需要保证package中的extends="struts-default",表示继承struts-default这个文件,里面有很多内置拦截器。

拦截器的配置是在struts.xml中完成的定义一个拦截器使用<interceptor/>配置,如果要为其拦截器传人参数,也可一并操作:

<interceptors>
       <interceptor name="拦截器名" class="所在类名"/>

        <param name="传入的参数名">值</param>

      </interceptor>

</interceptors>

注意如果有拦截器名字与前面的相同,那么前一个拦截器将会被覆盖掉。

拦截器是配置在包下的,但只是配置了,并没有得到应用,如果要应用,就必须在<action>属性中应用这些拦截器

<action name="Action名" class="Action类">
        
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <interceptor-ref name="拦截器一"></interceptor-ref>
        <interceptor-ref name="拦截器2"></interceptor-ref>
</action>

注意:应用拦截器时必须要将defaultStack应用到第一个,应为这是默认拦截器,如果Action指定了拦截器,则需要显示引用。

拦截器栈:在开发中,经常会出现多个拦截器同时在多个action中应用,如果在每个action里面都配置这些拦截器,那太麻烦了,所以要用到拦截器栈

  <interceptors>
            <interceptor-stack name="拦截器栈名">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="拦截器1"></interceptor-ref>
         <interceptor-ref name="拦截器2"></interceptor-ref>
      </interceptor-stack>
   </interceptors>

在action中调用拦截器栈:和调用普通拦截器一样:

<interceptor-ref name="拦截器栈名"></interceptor-ref>

 

posted @ 2016-09-12 14:35  夏文杰  阅读(122)  评论(0)    收藏  举报