struts2 18拦截器详解(一)
准备知识
struts2作为一优秀的Web层框架,其拦截器机制更是让其如虎添翼,下面将详细介绍struts2内置的defaultStack中的18拦截工作原理其及功能。但讲解之前必须先了解struts2中拦截器的执行流程,以更好地理解各个拦截器的执行与功能。
struts2中拦截器与Action的执行调度即执行流程或者说执行顺序是由ActionInvocation来完成的(如果此处不怎么了解可以参看struts2处理请求流程详解),ActionInvocation是一接口,struts2其默认实现类是DefaultActionInvocation,拦截器与Action的执行调度就是由该完成,调度逻辑就在该类的invoke方法中,下面是invoke方法核心源码:
public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception;}其中就三个方法,destroy在拦截器销毁的时候会执行,init方法会在拦截器实例化完成后立即执行,最重要的是intercept方法,该方法中执行的逻辑直接影响到整个拦截器的执行流程,如果intercept方法中调用了invocation.invoke()方法则会执行下一个拦截器,如果没有调用而直接返回一个字符串则后面的所有拦截器都不会执行,更不会执行Action,然后该拦截器与前面的拦截器执行返回。 拦截器与Action的执行调度是非常重要的,只有理解了这一点才能更好的理解拦截器的工作原理。