1.过滤器的主要功能是允许我们在request转给某个资源之前(比如:html文件,servlet,JSP文件,图片文件,excel文件等等)做一些事情,然后在response返回给客户端之前做一些事情。功能上有些类似于防火墙,对入口和出口进行严格控制。
public class MyFilter implements Filter {
//tomcat启动,或者context重新加载的时候调用init(先destroy再init)
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter init...");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//request到达的时候执行下面的代码
System.out.println("MyFilter request>>>>>>>>>>>>");
//转给过滤器链中的下一个filter,如果是最后一个filter,调用要访问的资源
chain.doFilter(request,response);
//要访问的资源访问完以后,response到达的时候执行下面的代码
System.out.println("MyFilter response>>>>>>>>>>>>");
}
//tomcat关闭或者context重新加载的时候调用destroy
public void destroy() {
System.out.println("MyFilter destroy...");
}
}
2.filter的配置方法
web.xml
通过url匹配:
<filter>
<filter-name>My Filter</filter-name>
<filter-class>MyFilter</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>My Filter</filter-name>
<!-- url匹配规则 -->
<url-pattern>/*</url-pattern>
<!-- filter对应的请求方式,默认是REQUEST -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
通过servlet名匹配:
<filter>
<filter-name>My Filter</filter-name>
<filter-class>MyFilter</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>My Filter</filter-name>
<!-- 根据url匹配到MyServlet的时候,执行My Filter -->
<servlet-name>MyServlet</servlet-name>
<!-- filter对应的请求方式,默认是REQUEST -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
3.过滤器链
1)request到达以后,实际匹配到的过滤器可能有一个,也可能有多个,多个的时候,会形成一个过滤器链,过滤器的执行顺序和web.xml中filter-mapping的配置的先后顺序一致,写在前面的先执行,写在后面的后执行。
2)每个过滤器执行完以后会调用chain.doFilter(request,response);从而调用下一个过滤器的doFilter方法。(其实此时执行到的只是每个过滤器中chain.doFilter(request,response);之前的代码)
3)当所有的匹配到的过滤器都执行完以后,将调用具体访问的资源,比如servlet,或者jsp。
4)请求的资源执行结束后,response返回的时候,再次调用匹配到的过滤器。调用顺序和request到达时的调用顺序正好相反。(此时执行的是每个过滤器中chain.doFilter(request,response);之后的代码)
如果在过滤器的doFilter前后,以及访问的servlet的doGet中事先写入打印调试信息的话,在浏览器中提交某个get请求的话,在控制台会看到下面的打印信息:
MyFilter1 request>>>>>>>>>>>>
MyFilter2 request>>>>>>>>>>>>
MyFilter3 request>>>>>>>>>>>>
MyServlet doGet>>>>>>>>>>>>
MyFilter3 response>>>>>>>>>>>>
MyFilter2 response>>>>>>>>>>>>
MyFilter1 response>>>>>>>>>>>>
对应的调用顺序如下:
客户端发出request --> MyFilter1 --> MyFilter2 --> MyFilter3 --> MyServlet --> MyFilter3 --> MyFilter2 --> MyFilter1
--> 客户端获得response
分享到:
相关推荐
通过对这个方法的细节与自定义插入过滤器的细节进行比较,作者找到了一个能在Tomcat 8(Tomcat 7可能需要稍作修改)下实现动态插入过滤器的方法。 5. **示例代码**: 笔记中提供了一个JSP文件的示例,展示了如何...
**Filter过滤器详解** 在Java Web开发中,Filter过滤器是一种强大的工具,它属于JavaEE规范中的重要组成部分,与Servlet程序、Listener监听器并称为三大组件。Filter的主要职责是拦截客户端的请求和服务器的响应,...
- 设置过滤器: `<filter><filter-name>MyFilter</filter-name><filter-class>com.example.MyFilter</filter-class></filter><filter-mapping><filter-name>MyFilter</filter-name><url-pattern>/*</url-pattern></...
除此之外,过滤器(Filter)和监听器(Listener)也是JavaWeb的重要组件。过滤器可以对HTTP请求和响应进行拦截,实现如登录检查、字符编码转换等功能。监听器则用于监听Web应用中的特定事件,例如会话创建或销毁,...
11. **过滤器和监听器**:Servlet API中的高级特性,如`Filter`可以预处理请求和后处理响应,`Listener`可以监听特定事件,如会话创建、销毁等。 通过这份"day04-Tomcat&Servlet入门-讲义.zip"的学习,初学者将建立...
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
6. **过滤器(Filter)和监听器(Listener)**: 过滤器在Servlet容器中拦截请求和响应,可以进行预处理和后处理,比如登录验证、字符编码转换等。监听器则监听特定事件,如会话创建、销毁,ServletContext的改变等...
7. **Filter过滤器**:JavaWeb中的过滤器可以拦截请求和响应,实现权限控制、日志记录等功能。 8. **Servlet生命周期**:包括加载、实例化、初始化、服务、销毁五个阶段,理解其生命周期对于优化性能和资源管理至关...
- 添加`FilterDispatcher`过滤器配置: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> ...
- **Filter Mapping**: 映射过滤器到所有请求。 - **Url Pattern**: `/*` #### 三、总结 通过上述内容的学习,我们可以了解到如何配置Eclipse及其周边工具如JDK、Tomcat和MyEclipse等的环境变量。同时,也介绍了...
### 黑马程序员_超全面的JavaWeb教程-视频+源码笔记 #### JavaWeb基础知识概览 在深入了解本教程之前,我们先来简要回顾一下JavaWeb的基础知识。JavaWeb是利用Java语言开发Web应用的技术集合。它主要包括Servlet、...
8. **过滤器(Filter)**:如何定义和使用Filter,实现请求的预处理和后处理,比如登录检查、字符编码转换等。 9. **监听器(Listener)**:利用ServletContextListener、ServletRequestListener、...
该文件是Web应用的核心配置文件之一,用于配置Servlet容器的初始化参数、监听器、过滤器等。 ##### 2. 导入依赖包 - **所需JAR包**: - Struts2核心库(例如:`struts2-core-2.2.24.jar`) - Tomcat相关的JAR包...
6. **过滤器和监听器**:介绍Filter接口和Listener接口的使用,它们可以用于拦截请求、响应,以及监听应用程序的特定事件。 7. **会话管理**:讲解如何在Web应用中管理和跟踪用户会话,包括Cookie和Session的使用。...
配置`web.xml`文件,设置Struts2的过滤器,以便拦截所有请求: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> ...
7. **过滤器(Filter)和监听器(Listener)**:这两者是JavaWeb中增强应用程序功能的重要组件,笔记可能讲解了如何配置和使用它们。 8. **文件上传和下载**:在Web应用中,文件操作是常见需求,笔记会涵盖Servlet...
5. **Filter(过滤器)和Listener(监听器)**:这两种技术用于增强Web应用的功能。Filter可以拦截请求和响应,实现如权限控制、日志记录等功能。Listener则监听Web应用中的特定事件,如session的创建、销毁,或者...
【JAVA WEB学习笔记】 Java Web是Java技术在Web开发领域中的应用,涵盖了从服务器端编程到客户端交互的各种技术。这份学习笔记将带你深入理解Java Web的核心概念和实践技巧。 1. **Servlet与JSP** - Servlet是...
接下来,笔记可能深入到过滤器(Filter)和监听器(Listener)的概念。过滤器可以拦截请求和响应,执行预处理或后处理操作,如字符编码转换、安全检查等。常见的过滤器接口有Filter和ServletChain。监听器则能监听...