Filter 过滤器

news/2024/12/1 20:39:31/

Filter过滤器介绍

这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理完请求之后,我们的response还是先经过过滤器才能到达我们的客户端,这里我们进行一个代码的演示,看看具体执行流程。首先给出一个图。

这里我们通过实现Filter接口,来进行定义过滤器类,通过注解来配置该过滤器拦截的路径。

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class FilterDemo2 implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 对request对象的请求进行处理System.out.println("处理了request请求");// 放行chain.doFilter(request,response);// 对response对象的响应进行处理System.out.println("处理了response响应");}
}

然后给出我们的index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body>index.jsp...<%System.out.println("index.jsp...");%></body>
</html>

 

可以看出,但我们客户端发起请求的时候,首先是经过了Filter过滤器,处理了request请求,然后去执行了我们的servlet/jsp,当执行完毕后,我们的response响应也经过了过滤器,这里经过过滤器的时候是从放行后面开始执行的,也就是处理了response响应(注意并没有再次处理request请求)。

多个Filter过滤器执行顺序

多个 Filter 过滤器执行的 特点:

  1. 所有 Filter 和目标资源都在同一个线程中
  2. 多个 Filter 共同执行的时候,都在使用同一个 Request 对象
  3. 多个 Filter 共同执行的时候,执行的先后顺序是由 web.html 配置文件中,从上到下的配置顺序决定的
  4. 只有执行到 filterChain.doFilter() 语句的时候,才会执行下一个 Filter 过滤器或者目标资源
     

Filter生命周期

Filter的生命周期可分为创建、执行、销毁三个阶段。

  1. 创建阶段:Web服务器启动的时候会创建Filter实例对象,并调用init()方法,完成对象的初始化。
  2. 执行阶段:当客户端请求目标资源时,服务器会筛选出符合映射条件的Filter,并按照类名的的先后顺序依次执行doFilter() 方法。
  3. 销毁阶段:服务器关闭时,Web服务器调用destroy()方法销毁Filter对象。

http://www.ppmy.cn/news/59826.html

相关文章

MySQL几种备份方式对比,你用对了吗?

各备份方法对比 备份数据的策略需要根据几种维度考虑 备份能承受最大丢失数据量 备份期间系统可以处于哪种情况&#xff08;不可用&#xff0c;部分可用&#xff0c;完全可用&#xff09; 数据恢复时长 需要恢复全量数据还是增量数据 备份数据的方法 逻辑备份&#xff1a;…

JavaWeb《CSS》

本笔记学习于Acwing平台 目录 1. 样式定义方式 2.1 行内样式表&#xff08;inline style sheet&#xff09; 2.2 内部样式表&#xff08;internal style sheet&#xff09; 2.3 外部样式表&#xff08;external style sheet&#xff09; 2. 选择器 2.1 标签选择器 2.2 …

真题详解(归纳法)-软件设计(六十七)

真题详解(关系模型)-软件设计&#xff08;六十六)https://blog.csdn.net/ke1ying/article/details/130495791 1、2018上半年 将小阶向大阶对奇&#xff0c;尾数右移动 解析&#xff1a; 0.23 * 10的2次方 0.22 *10的3次方 第一步&#xff1a;0.023*10的3次方&#xff0c;…

第三十四章 Unity人形动画(上)

在我们DirectX课程中&#xff0c;我们讲过一个模型最少拥有网格和材质&#xff0c;可以没有动画。游戏场景中的静态物体就可以是这样的模型&#xff0c;例如花草树木&#xff0c;建筑物等等&#xff0c;他们通过MeshRenderer就可以渲染。对于一个带有动画的FBX文件&#xff0c;…

feign远程调用原理

目录 一、简介 二、调用流程分析 2.1 添加注解 2.2 Import(FeignClientsRegistrar.class)&#xff0c; 2.3 代理创建流程 2.4 代理调用 一、简介 feign是springCloud全家桶中的远程调用组件&#xff0c;其底层主要依赖于Java的动态代理机制&#xff0c;然后基于http client…

【vue3.2 + ts + vite】使用 slot

vue3中使用slot会报错&#xff0c;需要用template封装一下。 1&#xff0c;基本使用方法 <slot name"button"> </slot><template #button><div>查看详情</div> </template>2&#xff0c;有参数传递&#xff0c;接收值使用方法…

【Python习题集1】Python 语言基础知识

python习题 一、实验内容二、实验总结 一、实验内容 1、运用输入输出函数编写程序&#xff0c;将华氏温度转换成摄氏温度。换算公式&#xff1a;C(F-32)*5/9,其中C为摄氏温度&#xff0c;F为华氏温度。 &#xff08;1&#xff09;源代码&#xff1a; ffloat(input(输入华氏温…

PostgreSQL数据库自带的命令行工具--psql

文章目录 PostgreSQL自带的命令行工具--psql使用psql连接数据库psql帮助内容\copyright 发布条款\h SQL命令的帮助\? 元命令帮助psql元命令实际执行SQL部分中文说明其他说明 参考 【免责声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL…