Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处 理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
2)servlet、filter、interceptor的执行顺序
通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路 返回。
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/
引用
看Servelt规范:
简要翻译下:
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响 应,它只是修改对某一资源的请求,或者修改从某一的响应。
再在看Filter的继承体系(不继承Servlet接口):
- 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。
转自:http://www.iteye.com/problems/41978
相关推荐
Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?
给大家介绍了spring-boot中如何定义过滤器、监听器和拦截器,对Spring Boot 编写Servlet、Filter、Listener、Interceptor的相关知识感兴趣的朋友一起看看吧
主要介绍了Java servlet、filter、listener、interceptor之间的区别和联系的相关资料,需要的朋友可以参考下
主要介绍了浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...
介绍了structs+spring+servlet+Thread的实现,其中介绍了listener、filter、servlet、Interceptor、aop技术、web多线程多种实现方式,下载即可运行
拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...
springboot-web整合Servlet、Filter、Listener、Interceptor等
以及最早学习到的java web中的javax.servlet.Filter的概念, 都是一种链式的处理流程,这一个环节处理完成,然后处理另一个环节,这样就可以在一个处理本身的之前和之后做一些事情了。 比如说,struts2中Action在...
综合使用servlet filter与struts2 interceptor对权限进行验证。
CXF 是以消息处理为中心的,熟悉 JSP/Servlet 的开发者可以将拦截器视为 CXF 架构中的“Filter”,拦截器链也与“FilterChain”类似。通过拦截器,开发者可以方便地在消息传递、 处理的整个过程中对 CXF 进行扩展。...
012-sprinboot-interceptor 013-springboot-servlet 014-springboot-filter 015-springboot-character-filter 016-springboot-character-properties 017-springboot-mapper 018-springboot-mapperscan 019-...
基于 Servlet Filter 或者 Spring Interceptor 等技术,实现对请求的拦截和处理。 在请求到达服务器之前或者返回给客户端之前,通过拦截器对 URL 进行重写操作。 灵活的重写规则: 提供灵活的 URL 重写规则配置,...
本资源是包含过滤器、拦截器的一个完整的MyEclipse项目。下载后可以直接导入MyEclipse中部署运行。 关于过滤器和拦截器: 过滤器--是在java web中,提前...执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
org.apache.struts2.dispatcher.ng.filter, org.apache.struts2.dispatcher.ng.listener, org.apache.struts2.dispatcher.ng.servlet, org.apache.struts2.impl, org.apache.struts2.interceptor, org.apache....
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
15.1 拦截器概述 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。 ...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...