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
相关推荐
标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...
- Filter的执行顺序更加固定,而Interceptor的执行顺序更加灵活可控。 - Filter主要用于做一些预处理工作,而Interceptor更多地用于处理与业务逻辑相关的请求拦截需求。 总之,在实际开发过程中,应根据具体的需求...
Filter和Interceptor虽然都是用来拦截请求并执行特定逻辑的技术,但它们在使用场景、配置方式和执行范围等方面存在显著差异。理解这些差异有助于开发者更好地选择适合当前应用场景的技术方案,从而提高应用程序的...
Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?
2. **加载顺序**:web.xml中的加载顺序通常是context-param -> listener -> filter -> servlet,而Interceptor的执行顺序取决于框架的规则。 3. **职责**:Servlet主要负责业务逻辑处理,Filter用于处理请求和响应...
在Web开发中,`filter`、`servlet`、`listener`和`interceptor`都是重要的组件,它们各自承担着不同的职责。以下是它们的详细解释和对比: 1. **Servlet**: - Servlet是一个Java类,用于扩展服务器的功能。它们在...
描述:Spring Boot 中如何定义过滤器、监听器和拦截器,对 Spring Boot 编写 Servlet、Filter、Listener、Interceptor 的相关知识感兴趣的朋友一起看看吧 标签:spring boot 编写Servlet Filter Listener Inter ...
浅谈SpringMVC中Interceptor和Filter区别 SpringMVC中Interceptor和Filter是两个重要的概念,它们都是用来处理用户请求的,但它们有着不同的作用和实现机制。本文将详细介绍Interceptor和Filter的区别,帮助读者更...
过滤器的执行顺序由`<filter-mapping>`标签中的`filter-name`和`url-pattern`决定,过滤器链中所有过滤器的`doFilter`方法都会被调用。过滤器不关心Spring MVC的Controller,它们直接作用于Servlet容器。 **区别与...
在本文中,我们将深入探讨SpringMVC的拦截器(Interceptor)和Servlet的过滤器(Filter)之间的差异和联系,以及如何配置SpringMVC的拦截器。理解这两者的区别对于开发高效且安全的Web应用程序至关重要。 首先,让我们...
Interceptor可以深入到业务处理方法的执行前后和抛出异常的时候,而Filter无法做到这一点。Interceptor可以使用Spring容器的任何资源,只要通过IoC注入到Interceptor即可。 Interceptor需要实现org.springframework...
- **异步处理**:Servlet3.0引入了异步Servlet API,允许在服务线程中执行长时间运行的任务,提高服务器性能。 - **过滤器链的改进**:过滤器可以使用`@WebFilter`注解定义,并且支持链式调用,便于管理过滤器顺序...
`Servlet和Filter的url匹配url-pattern-JSP编程教程`以及`servlet和JSP过滤器Filter-JSP教程`可能提供了关于如何配置`Filter`以匹配特定URL模式的示例,这对于控制访问权限和执行预处理逻辑非常重要。 综上所述,`...
在Java Web开发中,Filter模式尤其重要,因为它在Web应用程序中起到预处理请求和后处理响应的关键作用。本例将深入探讨Filter设计模式,以及如何将其与Struts2框架相结合。 首先,Filter模式的核心概念是过滤器链。...
1. 直接集成:在Servlet中创建Struts2的ActionContext,并手动设置请求和响应对象,然后调用Action的execute()方法执行业务逻辑。 2. 使用Filter转发:配置Struts2的Filter在Servlet处理完请求后,将控制权交给...
为了达到类似Struts2的效果,我们可以创建一个Servlet过滤器(Filter),在`doFilter`方法内进行请求的初步处理和转发。过滤器可以注册到web.xml文件中,对特定URL路径或所有请求进行拦截。 2. **解析自定义XML数据...
拦截器(Interceptor)和过滤器(Filter)在SpringBoot中用于在请求处理之前或之后执行特定任务,例如日志记录、权限检查或请求数据处理等。本文主要介绍如何在SpringBoot中使用拦截器和过滤器,以及它们之间的区别...
应谨慎选择过滤器的执行范围和执行逻辑,确保只处理必要的请求。 通过以上知识点,我们可以了解到Spring Boot与Servlet 3.0过滤器的集成和使用方式,以及它们在Web应用程序中的角色和作用。正确理解和运用这些知识...
Struts2 中的拦截器和过滤器都是用于处理请求的机制,但它们的实现机制、作用域和执行顺序都有所不同。了解这两个机制的差异可以帮助开发者更好地使用 Struts2 框架来构建高效、可靠的 Web 应用程序。
在`doFilter()`方法中,如果没有匹配到预设的Servlet,`FilterChain`对象的`doFilter()`方法会被调用,这使得请求能按照过滤器链的顺序继续传递,直到到达最终的目标资源。 综上所述,Struts2提供了多种方式来与...