JavaWeb 三大组件之 过滤器 Filter

简介: JavaWeb 三大组件之 过滤器 Filter

过滤器介绍


   Filter 过滤器是 JavaWeb 三大组件之一(Servlet 程序、Listener 监听器、Filter 过 滤器)。过滤器可以拦截不正确的请求(大部分请求都有一个正确的访问流程,不可跳过,例如:一个登录页面要用户名密码正确才能登录访问,不能跳过登录页面直接访问登陆成功之后的页面),


Filter 过滤器基本原理


6912b1fe68f6418e9e1d7df6d2127cb4.png


Filter 过滤器 url-patter


1、url-pattern : Filter 的拦截路径, 即浏览器在请求什么位置的资源时,过滤器会进行拦截过 滤


2.、精确匹配 /a.jsp 对应的 请求地址 http://ip[域名]:port/工程 路径/a.jsp 会拦截


3、目录匹配 /manage/*对应的 请求地址 http://ip[域名]:port/ 工程路径/manage/xx , 即 web 工程 manage 目录下所有资源 会拦截


4、后缀名匹配 *.jsp 后缀名可变,比如 *.action *.do 等等对应 的 请求地址 http://ip[域名]:port/工程路径/xx.jsp , 后缀名为 .jsp 请求会拦截


5、Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在


Filter 过滤器生命周期


     Web工程启动时会执行构造器和init初始化方法,过滤器实例生效。当Tomcat接收到HTTP请求,会查看请求是否匹配过滤器Filter的路径url-pattern,匹配就调用doFilter()方法。当Web工程停止或重启时,会调用destory()方法销毁Filter实例。


FilterConfig 说明


    1. FilterConfig 是 Filter 过滤器的配置类


       2. Tomcat 每次创建 Filter 的时候,也会创建一个 FilterConfig 对象,这里包含了 Filter 配 置文件的配置信息。


       3. FilterConfig 对象作用是获取 filter 过滤器的配置内容

b3ff71db99cc4a5db8226d45f3cf988d.png


FilterChain 过滤器链


 FilterChain: 在处理某些复杂业务时,一个过滤器不够,可以设计多个过滤器 共同完成过滤任务。一个过滤器执行自己的前置就会调用下一个过滤器直到调用到资源,然后返回过滤器的后置代码,返回上一个过滤器的后置代码,这样过滤器之间相连形成过滤器链(前置代码和后置代码自己配)。 过滤器的调用顺序是按照web.xml里面的配置顺序进行调用。

16fc7199bf5443a9b6e52bea65fb47d7.png

97532e03929144a2bbabc6f2559e2db1.png


FilterChain 注意事项和细节


1. 多个 filter过滤器 和目标资源在一次 http 请求,在同一个线程中


2. 当一个请求 url 和 filter 的 url-pattern 匹配时, 才会被执行, 如果有多个匹配上,就会 顺序执行,形成一个 filter过滤链(底层可以使用一个数据结构搞定)。


3. 多个 filter 共同执行时,在同一次 http 请求, 使用同一个 request 对像


4. 多个 filter 执行顺序,和 web.xml 配置顺序保持一致.


5. chain.doFilter(req, resp)方法 将执行下一个过滤器的 doFilter 方法, 如果后面没有过滤器, 则执行目标资源。


6. 小结:执行过滤器链时, 顺序是Http请求 -> A 过滤器 dofilter() -> A 过滤器前置代码 -> A 过滤器 chain.doFilter() (调用下一个过滤器Filter)-> B 过滤器 dofilter() -> B 过滤器前置代 码 -> B过滤器 chain.doFilter() -> 目标文件 -> B过滤器后置代码 -> A过滤器后置代码 -> 返回给浏览器页面/数据

相关文章
|
1月前
|
Java 数据安全/隐私保护 索引
(Java)Java里JFrame窗体的基本操作(组件篇-3)
回顾 说过了下拉框和下拉列表,本篇内容将了解滚动面板和各类输入框 什么是组件? 如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入; 另:在使用组件前,请先将窗体中的内容类给实例化出来进行操作,代码如下: Container c = getContentPane(); JScollPane JScollPane类,说的就是滚动面板。它不同于其他组件,它是一个容器,
68 1
|
1月前
|
Java 索引 容器
(Java)Java里JFrame窗体的基本操作(组件篇-2)
回顾 这算是JFrame窗体基本操作的组件第二篇了,上一篇说过了单选框,复选框,按钮。 在这一篇中,我会说明下拉框和列表框 什么是组件? 自行百度:java中JFrame窗体里的组件是什么? 名字都给你想好了 ( :I ) JComBox下拉框 JComBox类,就是下拉框,实例化出来后,要填写泛型<>,添加是什么数据类型的内容,泛型中就写上该数据类型; JComboBox<?> combox = new JComboBox<>(); 以下实例化下拉框的时候我泛型写的全
75 0
|
1月前
|
Java 容器
(Java)Java里JFrame窗体的基础操作(组件-1)
如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,当然这只是在不熟悉组件的前提下。如果深入了解了组件,那么它有着非常多的组件,这些组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入
53 1
|
2月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
3月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
225 7
|
4月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
183 0
|
5月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
193 2
|
10月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
188 4
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
127 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
144 1