在一个大型项目中往往有多个servlet过滤器,但是这些servlet过滤器的执行顺序是怎样的呢? 项目中关于SSH2中OpenSessionInViewFilter的学习研究,测试Filter的先后顺序!!
请看一下例子:
创建两个简单的servlet文件
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter1 implements Filter {
public void destroy() {
}
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
System.out.println("filter1");
chain.doFilter(request, response);
System.out.println("filter1 go back");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter2 implements Filter {
public void destroy() {
}
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
System.out.println("filter2");
chain.doFilter(request, response);
System.out.println("filter2 go back");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在web.xml里面添加映射文件:
<filter>
<filter-name>filter1</filter-name>
<filter-class>filter.Filter1</filter-class>
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>filter.Filter2</filter-class>
</filter>
<filter>
<filter-name>filter3</filter-name>
<filter-class>filter.Filter3</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对于这个项目的任意一个jsp以及其他请求都要经过这两个servlet过滤器的过滤
因为<url-pattern>/*</url-pattern>
程序执行结果
filter1
filter2
filter2 go back
filter1 go back
如果把web.xml映射文件修改为
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>filter.Filter2</filter-class>
</filter>
<filter>
<filter-name>filter3</filter-name>
<filter-class>filter.Filter3</filter-class>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
则程序的执行结果为:
filter2
filter1
filter1 go back
filter2 go back
仔细观察这两个映射文件的不同之处我们可以看出
servlet过滤器的执行顺序就是servlet过滤器在web.xml里面映射文件的顺序
相关推荐
在IT领域,特别是Java Web开发中,Servlet过滤器(Filter)是实现用户权限管理、登录状态验证等关键功能的重要机制之一。本文将深入探讨如何利用Servlet过滤器来验证用户是否已登录,以及如何配置过滤器以针对特定的...
Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者Servlet响应返回客户端之前进行拦截处理。在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用...
Java Servlet过滤器是Java Web应用程序中的重要组件,它在请求被Servlet处理之前和响应返回给客户端之后进行拦截,可以用于实现各种功能,如字符编码转换、URL重写、权限控制等。本篇将深入讲解Java Servlet过滤器的...
Servlet过滤器是Java Web开发中的一个重要组件,它在Servlet生命周期中扮演着预处理和后处理的角色。在Tomcat这样的Servlet容器中,过滤器允许开发者在请求到达Servlet之前或Servlet响应发送回客户端之后对请求和...
### Servlet过滤器详解 #### 一、Filter的基本概念与作用 **过滤器(Filter)**是一种Web组件,它能够在客户端请求到达目标资源(如Servlet、JSP页面等)之前进行预处理,以及在响应返回客户端之前进行后处理。...
下面将详细介绍Java Servlet过滤器的工作原理、配置以及常见应用场景。 ### 1. 工作原理 Servlet过滤器通过实现`javax.servlet.Filter`接口来创建。当客户端发起请求时,服务器会根据`web.xml`或Java配置文件中的...
在这个主题中,我们将深入探讨Servlet过滤器的API用法、乱码处理策略以及如何防止JavaScript注入问题。 首先,让我们了解一下Servlet过滤器的基础。在Servlet规范中,`Filter`接口定义了过滤器的核心方法,如`...
5. **过滤器链(Filter Chain)**:多个过滤器可以串联起来形成过滤器链,按照定义的顺序逐个执行。过滤器链允许开发者在单个请求中执行多个操作,如身份验证、授权、数据转换等。 6. **配置过滤器**:在`web.xml`...
Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后对请求和响应进行处理。这个"Servlet过滤器示例代码"提供的内容,旨在帮助学习者深入理解过滤器的工作原理...
Servlet过滤器和监听器是Java Servlet技术中两个重要的组件,它们极大地增强了Web应用程序的功能和灵活性。Servlet过滤器在Servlet 2.3规范中被引入,主要用于处理通用任务,如请求预处理、响应后处理,以及诸如编码...
过滤器的执行顺序可以根据filter-mapping的定义顺序来确定。 使用过滤器的好处是避免了在每个页面的代码中重复编写判断用户是否登录的逻辑,既保证了代码的整洁,也使得维护更加方便。通过集中管理登录验证逻辑,...
Servlet过滤器是Java Web开发中的一个重要概念,它在Servlet请求处理生命周期中扮演着关键角色。过滤器(Filter)允许开发者在请求被实际处理到Servlet之前或之后进行拦截,执行一些预处理或后处理任务。本篇文章将...
Java Servlet中的过滤器(Filter)是Java Web开发中一个非常重要的概念,它是Servlet API的一部分,主要用于在请求被发送到目标Servlet或JSP之前对请求进行预处理,以及在响应返回给客户端之前对响应进行后处理。...
- `doFilter(ServletRequest request, ServletResponse response)`: 执行过滤链中的下一个过滤器或目标资源。 **过滤器的部署** 在`web.xml`中配置过滤器包括两部分: - `<filter>`元素定义过滤器,包括过滤器名称...
Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...
Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。这个机制提供了对HTTP请求和响应进行预处理和后处理的能力,极大地扩展了Servlet的功能。在...
- 过滤器的执行顺序取决于它们在web.xml或Spring配置中的声明顺序。`@Order`注解可用于指定过滤器的执行优先级。 5. **拦截器(Interceptor)与过滤器的区别** - 虽然两者都可以处理请求和响应,但拦截器是Spring...