Filter、Servlet和Interceptor的执行顺序
2016-08-10 19:56
344 查看
1. Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
![](http://dl.iteye.com/upload/picture/pic/87189/45c8e7a4-a4df-35aa-a18e-3d668e70416c.png)
通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。
2. Servlet Filter Struts2的DispatcherFilter的执行顺序。
在Servlet JSR中说明了Servlet和Filter执行的顺序:
如果一个请求匹配了一个Serlvet,并且该Servlet配置了一个或者多个Filter,毫无疑问,先执行Filter,再执行Servlet。
对与多个匹配的Filter,哪个先执行呢?
JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。
所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。
当Filter被调用,并且进入了Struts2的DispatcherFilter中后,Struts2会按照在Action中配置的Interceptor Stack中的Interceptor的顺序,来调用Interceptor。
参考文章:http://www.iteye.com/problems/41978
![](http://dl.iteye.com/upload/picture/pic/87189/45c8e7a4-a4df-35aa-a18e-3d668e70416c.png)
通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。
2. Servlet Filter Struts2的DispatcherFilter的执行顺序。
在Servlet JSR中说明了Servlet和Filter执行的顺序:
如果一个请求匹配了一个Serlvet,并且该Servlet配置了一个或者多个Filter,毫无疑问,先执行Filter,再执行Servlet。
对与多个匹配的Filter,哪个先执行呢?
JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。
所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。
当Filter被调用,并且进入了Struts2的DispatcherFilter中后,Struts2会按照在Action中配置的Interceptor Stack中的Interceptor的顺序,来调用Interceptor。
参考文章:http://www.iteye.com/problems/41978
相关文章推荐
- servlet 和filter区别和servlet、filter、interceptor的执行顺序
- context-param, listener, filter, servlet, interceptor的执行顺序
- filter、servlet、interceptor的执行顺序
- servlet 和filter区别和servlet、filter、interceptor的执行顺序
- [转]servlet 和filter区别和servlet、filter、interceptor的执行顺序
- Web.xml中 listener、filter、servlet 执行顺序
- Tomcat的valve、filter和servlet的执行顺序
- ServletContext,Listener,Filter和自启动Servlet的执行顺序
- Filter和Servlet的执行顺序与实例
- Servlet中filter的执行顺序以及urlPatterns和servletNames之间的关系
- ServletContext,Listener,Filter和自启动Servlet的执行顺序
- Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
- web.xml文件中context-param、listener、filter、servlet的执行顺序
- Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
- Listener,Filter,Servlet执行顺序和生命周期
- Listener,Filter,Servlet执行顺序和生命周期
- Servlet 中 Filter的执行顺序
- Listener,Filter,Servlet执行顺序和生命周期
- servlet3.1(tomcat8、9)开发中,Filter使用注解(Annotation)时,如何定义执行顺序
- Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序