Servlet过滤器Filter
Servlet Filter 又称 Servlet 过滤器,它是在 Servlet 2.3 规范中定义的,能够对 Servlet 容器传给 Web 资源的 request 对象和 response 对象进行检查和修改。
Filter 不是 Servlet,不能直接访问,它本身也不能生成 request 对象和 response 对象,它只能为 Web 资源提供以下过滤功能:
- 在 Web 资源被访问前,检查 request 对象,修改请求头和请求正文,或对请求进行预处理操作。
- 将请求传递到下一个过滤器或目标资源。
- 在 Web 资源被访问后,检查 response 对象,修改响应头和响应正文。
注意:过滤器并不是必须要将请求传递到下一个过滤器或目标资源,它可以自行对请求进行处理,并发送响应给客户端,也可以将请求转发或重定向到其他的 Web 资源。
Filter 是 Servlet 规范中最实用的技术,通过它可以对服务器管理的所有 Web 资源(例如 JSP、Servlet、静态 HTML 文件、静态图片等)进行拦截,从而实现一些特殊的功能,例如用户的权限控制、过滤敏感词、设置统一编码格式等。
Filter 接口
与开发 Servlet 需要实现 javax.servlet.Servlet 接口类似,开发过滤器要实现 javax.servlet.Filter 接口,并提供一个公开的不带参的构造方法。在 Filter 接口中,定义了 3 个方法,如下表所示。
返回值类型 | 方法 | 功能描述 |
---|---|---|
void | init (FilterConfig filterConfig) | 该方法用于初始化过滤器。 |
void | doFilter(ServletRequest request,SeivletResponse response, FilterChain chain) |
该方法完成实际的过滤操作,当客户端请求的 URL 与过滤器映射的 URL 匹配时,容器会先调用该方法对请求进行拦截。 参数 request 和 response 表示请求和响应对象。 参数 chain 代表当前 Filter 链对象,在该方法内部,调用 chain.doFilter() 方法,才能把请求交付给 Filter 链中的下一个 Filter 或者 Web 资源。 |
void | destroy() | 该方法在销毁 Filter 对象之前被调用,用于释放被 Filter 对象占用的资源。 |
Filter 的工作流程
- 客户端请求访问容器内的 Web 资源。
- Servlet 容器接收请求,并针对本次请求分别创建一个 request 对象和 response 对象。
- 请求到达 Web 资源之前,先调用 Filter 的 doFilter() 方法,检查 request 对象,修改请求头和请求正文,或对请求进行预处理操作。
- 在 Filter 的 doFilter() 方法内,调用 FilterChain.doFilter() 方法,将请求传递给下一个过滤器或目标资源。
- 目标资源生成响应信息返回客户端之前,处理控制权会再次回到 Filter 的 doFilter() 方法,执行 FilterChain.doFilter() 后的语句,检查 response 对象,修改响应头和响应正文。
- 响应信息返回客户端。
Filter 的生命周期
Filter 的生命周期分为 3 个阶段:
- 初始化阶段
- 拦截和过滤阶段
- 销毁阶段
1. 初始化阶段
Servlet 容器负责加载和实例化 Filter。容器启动时,读取 web.xml 或 @WebFilter 的配置信息对所有的过滤器进行加载和实例化。
加载和实例化完成后,Servlet 容器调用 init() 方法初始化 Filter 实例。在 Filter 的生命周期内, init() 方法只执行一次。
2. 拦截和过滤阶段
该阶段是 Filter 生命周期中最重要的阶段。当客户端请求访问 Web 资源时,Servlet 容器会根据 web.xml 或 @WebFilter 的过滤规则进行检查。当客户端请求的 URL 与过滤器映射匹配时,容器将该请求的 request 对象、response 对象以及 FilterChain 对象以参数的形式传递给 Filter 的 doFilter() 方法,并调用该方法对请求/响应进行拦截和过滤。
3. 销毁阶段
Filter 对象创建后会驻留在内存中,直到容器关闭或应用被移除时销毁。销毁 Filter 对象之前,容器会先调用 destory() 方法,释放过滤器占用的资源。在 Filter 的生命周期内,destory() 只执行一次。
Servlet过滤器Filter相关推荐
- Java web—Servlet过滤器(Filter)
前言: 过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...
- Servlet过滤器Filter和监听器
一.Servlet过滤器的概念: *********************************************************************************** ...
- Java学习路线-49:Servlet过滤器Filter
课时1 过滤器的入门 JavaWeb三大组件 1.都需要在web.xml中进行配置 Servlet Filter Listener 2.过滤器 会在一组资源(jsp, servlet, css, ht ...
- java过滤器应用实例_Servlet过滤器Filter的简单介绍(附示例)
本篇文章给大家带来的内容是关于Servlet过滤器Filter的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 特点 1)Filter是依赖于Servlet容器,属 ...
- SpringBoot定义三大组件Servlet,过滤器Filter,监听器Listener
SpringBoot定义三大组件Servlet,过滤器Filter,监听器Listener 1.定义组件的配置类: com.example.mybatis2018.config.MyServletCo ...
- Javaweb核心之servlet规范过滤器-----Filter
2 Servlet规范中的过滤器-Filter 2.1 过滤器入门 2.1.1 过滤器概念及作用 过滤器--Filter,它是JavaWeb三大组件之一.另外两个是Servlet和Listener. ...
- 文章本天成|跟我一起来一场简洁易懂的servlet的过滤器Filter的学习吧
filter的前身今生 0.fiter是什么 1.filter有啥用 2.filter在哪里 3.filter做了啥 4.filter代码实现 4.1 依赖包 4.2 代码 4.2.1 MyFirst ...
- Servlet 3.0 @WebFilter注解过滤器Filter使用(如何设置多个参数的方法)
因为在网上搜寻半天发现没有关于@WebFilter注解如何设置多个参数的方法,参考其他博主的文章和自己的实践,写下此笔记,供大家参考 Servlet3.0提供@WebFilter注解将一个实现了jav ...
- Servlet过滤器(Filter)不过滤登录页面、JS和CSS文件
Servlet过滤器主要用于对客户端(浏览器)的请求进行过滤处理,先将过滤后的请求转交给下一资源,它在Java Web开发中具有十分重要的作用.Servlet过滤器可以用于验证用户的登录情况,但在实际 ...
最新文章
- mysql5.5安装
- 远程桌面中Tab键不能补全的解决办法
- 每秒上万并发下的Spring Cloud参数优化实战
- Statement和PreparedStatement深入学习总结
- jna 使用_使用JNA的透明JFrame
- java 窗体 源码_Java制作MDI窗体源代码
- 数据库-Linux系统下的命令
- webdriver 等待页面加载完成_Python爬虫,登陆神器Selenium等待(waits)页面加载的三种方法...
- Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1
- CorelDRAWX4的VBA插件开发(三)VBA的必用基础知识
- dell服务器开机蓝屏无限重启,戴尔电脑不停蓝屏重启怎么办
- python输出列表的子列表_python切片(获取一个子列表(数组))详解
- 《Adobe Premiere Pro CS6中文版经典教程》——复习题
- SpringMVC总结笔记
- 内分泌6项检查费用_内分泌6项检查费用是多少 详解内分泌6项检查是什么
- Rust学习笔记(13)——struct、Option和Box组合应用实现单向链表
- 2020行业进阶趋势:传统IT式微已显而易见
- 芬兰ZYFRA公司在首届中俄创新大赛中获胜
- 复选框CheckBox
- 组件化设计思维 – 从规范到工具的构建与探索
热门文章
- 程序员30岁投简历找工作,还能找到满意的工作吗?
- (转)智能投顾万亿级市场模式待定 银、券、基三派都怎么玩?
- 《趣谈Linux》总结三:进程/线程
- 【解决方案】在windows系统中解决刻录光驱没法刻录光盘的问题
- 何恺明霸榜,近10年里的具有影响力的一作(年轻)AI学者大盘点
- java map类说_在Java中,关于HashMap类的描述,以下说法错误的是( )。
- 黄仁勋台大毕典演说全文
- python实践之电商系列
- 图灵最强诸葛老师最新分享:分布式服务框架原理与实践.pdf篇
- [Unity3D]接入vive tracker 方案SteamVR+VRTK配置