servlet 和filter区别和servlet、filter、interceptor的执行顺序
2011-08-11 10:16
302 查看
1)servlet和filter的区别
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
2)servlet、filter、interceptor的执行顺序
![](http://hi.csdn.net/attachment/201108/11/0_1313029064k6i8.gif)
通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。
cwx714 (架构师) 2010-05-10
filter与servlet:
http://www.cnblogs.com/Fskjb/archive/2010/03/27/1698448.html
filter 与 struts 拦截器
http://bruceyoo.iteye.com/blog/631355 http://jwx0925.iteye.com/blog/631968
Struts2中拦截器与过滤器的执行顺序证明:
http://blog.163.com/mail_sv/blog/static/13853926420102295392416/
==============
略多细读
Anddy (架构师) 2010-05-11
引用
servlet和filter有什么区别
看Servelt规范:
引用
A filter is a reusable piece of code that can transform the content of HTTP requests, responses, and header information. Filters do not generally create a response or respond to a request as servlets do, rather they modify or adapt the
requests for a resource, and modify or adapt responses from a resource.
简要翻译下:
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
再在看Filter的继承体系(不继承Servlet接口):
Java代码
![](http://www.iteye.com/images/icon_star.png)
public interface Filter
所以第一个结论:Servlet和Filter没有关系!但是2者可以很好的协同工作。
引用
servlet、filter、interceptor
首先,关于Interceptor。Interceptor是XWork中引入的概念,Struts2的核心是XWork2。Struts2的DispatcherFilter从SerlvetContainer中,获取到HTTP请求,然后交由内部的Interceptor处理。
Interceptor不是Servlet JSR中的概念。所以Interceptor与其他Filter的执行顺序,取决于Struts2的DispatcherFilter与其他Filter的执行顺序。
问题变为: 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。
xiaolongfeixiang (资深架构师) 2010-05-11
其实你可以把 Interceptor理解为 Struts的Filter调用的方法。这样你就清楚了。
这个流程和以前的 Filter-> Servlet 一样的。
xiaolongfeixiang (资深架构师) 2010-05-11
引用
org.apache.struts.action.ActionServlet
这个是struts 中最核心的servlet,所有的请求都是通过它。
Anddy (架构师) 2010-05-11
看看这张图,再看看这篇文章,应该明白了servlet跟action之间的关系。action只是处理业务逻辑,并不是servlet。ActionServlet才是struts中控制器,在底层负责所有的转发,分配处理等。
![](http://hi.csdn.net/attachment/201108/11/0_1313029076F5E5.gif)
http://cheng5259.iteye.com/blog/638716 Anddy (架构师) 2010-05-11
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
2)servlet、filter、interceptor的执行顺序
![](http://hi.csdn.net/attachment/201108/11/0_1313029064k6i8.gif)
通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。
cwx714 (架构师) 2010-05-10
filter与servlet:
http://www.cnblogs.com/Fskjb/archive/2010/03/27/1698448.html
filter 与 struts 拦截器
http://bruceyoo.iteye.com/blog/631355 http://jwx0925.iteye.com/blog/631968
Struts2中拦截器与过滤器的执行顺序证明:
http://blog.163.com/mail_sv/blog/static/13853926420102295392416/
==============
略多细读
Anddy (架构师) 2010-05-11
引用
servlet和filter有什么区别
看Servelt规范:
引用
A filter is a reusable piece of code that can transform the content of HTTP requests, responses, and header information. Filters do not generally create a response or respond to a request as servlets do, rather they modify or adapt the
requests for a resource, and modify or adapt responses from a resource.
简要翻译下:
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
再在看Filter的继承体系(不继承Servlet接口):
Java代码
![](http://www.iteye.com/images/icon_star.png)
public interface Filter
所以第一个结论:Servlet和Filter没有关系!但是2者可以很好的协同工作。
引用
servlet、filter、interceptor
首先,关于Interceptor。Interceptor是XWork中引入的概念,Struts2的核心是XWork2。Struts2的DispatcherFilter从SerlvetContainer中,获取到HTTP请求,然后交由内部的Interceptor处理。
Interceptor不是Servlet JSR中的概念。所以Interceptor与其他Filter的执行顺序,取决于Struts2的DispatcherFilter与其他Filter的执行顺序。
问题变为: 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。
xiaolongfeixiang (资深架构师) 2010-05-11
其实你可以把 Interceptor理解为 Struts的Filter调用的方法。这样你就清楚了。
这个流程和以前的 Filter-> Servlet 一样的。
xiaolongfeixiang (资深架构师) 2010-05-11
引用
org.apache.struts.action.ActionServlet
这个是struts 中最核心的servlet,所有的请求都是通过它。
Anddy (架构师) 2010-05-11
看看这张图,再看看这篇文章,应该明白了servlet跟action之间的关系。action只是处理业务逻辑,并不是servlet。ActionServlet才是struts中控制器,在底层负责所有的转发,分配处理等。
![](http://hi.csdn.net/attachment/201108/11/0_1313029076F5E5.gif)
http://cheng5259.iteye.com/blog/638716 Anddy (架构师) 2010-05-11
相关文章推荐
- servlet 和filter区别和servlet、filter、interceptor的执行顺序
- [转]servlet 和filter区别和servlet、filter、interceptor的执行顺序
- context-param, listener, filter, servlet, interceptor的执行顺序
- filter、servlet、interceptor的执行顺序
- Filter、Servlet和Interceptor的执行顺序
- servlet/filter/listener/interceptor区别与联系
- servlet/filter/listener/interceptor区别与联系
- servlet/filter/listener/interceptor区别与联系
- Spring filter和拦截器(Interceptor)的区别和执行顺序
- servlet/filter/listener/interceptor区别与联系
- 四个概念详细分析servlet、filter、listener、interceptor的区别与联系?
- servlet/filter/listener/interceptor区别与联系
- servlet/filter/listener/interceptor区别与联系
- servlet/filter/listener/interceptor区别与联系
- servlet,filter, listener, interceptor 区别与联系
- Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
- servlet/filter/listener/interceptor区别与联系
- servlet/filter/listener/interceptor区别与联系
- web.xml中的context-param、filter、listener、servlet节点的执行顺序
- servlet/filter/listener/interceptor区别与联系