在学习Struts2的过程当中对拦截器和动做类的执行过程一度陷入误区,特别读了一下Struts2的源码,将本身的收获分享给正在困惑的童鞋。。。浏览器
开始先上图:学习
从Struts2的图能够看出当浏览器发出请求以后,通过Struts2的一些核心处理以后(在拦截器以前的执行过程此处略过)到达Interceptor1第一个拦截器
此时Struts将会按照顺序进行执行拦截器一直到达动做方法。
若是为某个动做方法配置了拦截器,那么在调用到该动做方法以前会通过拦截器,通常咱们的拦截器会在拦截条件以后选择是否进行放行操做,
当请求知足放行条件时调用invocation的invoke()方法放行可是在此有两种状况:
咱们去看一下源码:spa
经过分析源码咱们能够看出,拦截的工做过程当中最重要的是invocation.invoke();这个方法在拦截器的执行过程当中充当调度者的做用。
若是在拦截器中没有调用invocation.invoke();的话在执行拦截器类的时候就会按照顺序执行直接返回字符串3d
当拦截器执行完毕以后跳转到相应的JSP模板进行执行,此时浏览器仍然不会跳转到目的页面
执行完JSP页面代码以后按照逆序的方式执行拦截器
最后响应客户端请求blog