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>

浙公网安备 33010602011771号