一、拦截器创建方法
拦截器生命周期:随项目启动而创建,随项目销毁而销毁
1、实现接口Interceptor。
2、继承AbstractInterceptor。帮我们空实现里init()和destroy()方法,如不需要这两个方法,就可以只实现Intercept方法。
3、继承MethodFilterInterceptor。可以定制拦截器拦截的方法。可以定制哪些方法需要拦截,哪些不需要拦截。只需要实现doIntercept()方法。
推荐第三种。
二、拦截器的放行
放行方法:Invocation.invoke()
放行之前是前处理,放行之后是后处理。
如若不放行,可以不进行invoke(),直接在返回值处返回相应的字符串,从而跳过后序的拦截器和Action,交给结果集进行处理。如跳转到登录错误页面。
三、拦截器配置
1、注册拦截器
在struts.xml中的配置位置是在第二个,位于result-type之后。
<interceptors>
<interceptor name="myInter" class="Inter.myInter"></interceptor>
<interceptor>
2、注册拦截器栈
<interceptor-stack name="myStack">
<!-- 自定义拦截器引入(建议放在20个拦截器之前)-->
<interceptor-ref name="myInter"></interceptor-ref>
<interceptor-ref name="defaultStack"><interceptor-ref>
</interceptor-stack>
3、指定默认的拦截器栈
在struts.xml中的位置紧挨在interceptor之后。
<default-interceptor-ref name="myStack"></default-interceptor-ref>
四、拦截器拦截方法指定
<interceptor-ref name="myInter">
<!--指定哪些方法不拦截-->
<param name="excludeMethods">add,delete</param>
</interceptor-ref>
<interceptor-ref name="myInter">
<!--指定哪些方法需要拦截-->
<param name="includeMethods">add,delete</param>
</interceptor-ref>
配置的本质:调用MethodFilterInterceptor类的setExcludeMethods()或setIncludeMethods()方法。