拦截器的本质:
拦截器就是一个类,一个实现了超级接口Interceptor的类。Interceptor接口里定义了三个方法 init(),destory(),intercept()。其中inercept()是核心方法,该方法的参数是invocation,它的类型是ActionInvocatio接口,该接口定义了拦截的核心方法invoke();
拦截器体现的面向切面编程思想(AOP),在目标代码执行之前或执行之后插入必要的辅助业务,来降低系统的耦合度。Struts2拦截器的目标代码就是Action。
使用拦截器的步骤:
1.先创建一个实现Interceptor接口的类。该类是拦截器执行的核心代码,在目标对象的前后执行。
要注意的是Interceptor是超级接口,它实现了三个方法。另外你也可以继承AbstractInterceptor抽象类,只需实现interceptor()方法就行了。另外还可以继承MethodFilterInterceptor抽象类,只需实现doIntercept()方法。
2.(要点)在Struts.xml的package中配置拦截器:首先声明拦截器,然后把自定义的拦截器放入拦截器栈中。要想对哪个Action进行拦截,在action标签里引用配置的拦截器就行了。
在配置拦截器时很容易出错,收集以下资料参考:
http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html
拦截器的执行顺序:
之所以叫拦截器栈就说明了它的执行顺序,假如一个拦截器栈里有a,b,c三个拦截器,则它们的执行顺序是a,b,c,action,c,b,a。