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过滤器后置代码 -> 返回给浏览器页面/数据

相关文章
|
2月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
1月前
|
监控 Java 数据管理
java会话跟踪和拦截器过滤器
本文介绍了Web开发中的会话跟踪技术——Cookie与Session,以及过滤器(Filter)和监听器(Listener)的概念和应用。Cookie通过在客户端记录信息来识别用户,而Session则在服务器端保存用户状态。过滤器用于拦截和处理请求及响应,监听器则监控域对象的状态变化。文章详细解释了这些技术的实现方式、应用场景和主要方法,帮助开发者更好地理解和使用这些工具。
45 1
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
492 37
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
37 2
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
76 5
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
3月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
125 2
|
2月前
|
Java 数据安全/隐私保护 容器
java当中组件和窗口的相容问题(里面包含了这些方法的作用)
Java窗口和组件的布局指南,教你如何打造一个既美观又实用的GUI界面。
36 0
|
3月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
Web App开发 Java 容器