浅析Servlet过滤器
本文转载自微信公众号「码工是浅析小希」 ,作者码工是滤器小希 。转载本文请联系码工是浅析小希公众号。
1 定义
Servlet过滤器和 Servlet 很类似 ,滤器注意的浅析是它有拦截客户端请求的用法,Servlet过滤器可以改变请求中的滤器内容,满足实际开发的浅析需要。
开发来讲,滤器过滤器实质上是免费模板浅析在Web应用服务器里面的一个Web组件,目的滤器用在拦截客户端(浏览器)与目标资源的请求,并把这些请求进行一定过滤处理发给目标资源 :

从图看出,浅析Web容器部署过滤器后 ,滤器不仅客户端发送的浅析请求会经过过滤器的处理,要不要返回呢?滤器是的,请求的浅析回应信息也同样要经过过滤器 。
如果一个Web应用中使用一个过滤器不能解决实际的高防服务器业务需求,那可以部署多个过滤器对业务请求多次处理,这样做就组成一个过滤器链,Web容器在处理过滤器时 ,将被过滤器的先后顺序对请求进行处理:

Web服务器中部署过滤器链 ,那请求会一次按照过滤器顺序进行处理,在第一个过滤器处理一请求后,会传递给第二个过滤器进行处理 ,依次类推 ,传递到最后一个过滤器为止,再将请求交给目标资源进行处理 ,目标资源在处理经过过滤的请求后 ,其回应信息再从最后一个过滤器依次传递到第一个过滤器,最后传送到客户端;
2 过滤器核心对象
过滤器对象放在 javax.servlet 包中 ,亿华云叫做 Filter, 是个接口 ,与过滤器相关的对象还有 FilterConfig对象 与 FilterChain对象 ,这两个也同样是接口对象 ,位于 javax.servlet 包中 ,分别作为过滤器的配置对象与过滤器的传递工具。在实际开发,定义过滤器对象只需要直接或间接地实现 Filter接口即可。下图的MyFilter1过滤器与MyFilter2过滤器,而 FilterConfig对象 与 FilterChain对象 用在过滤器的相关操作:

Filter接口
每个过滤器对象只直接或间接地实现 Filter接口,服务器租用在Filter接口中定义了3个方法,分别是 init(),doFilter()和destroy(),说明如表:
方法 声明 public void init(FilterConfig filterConfig) throws ServletException 过滤器初始化方法,该方法在过滤器初始化时调用 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 对请求进行过滤处理 public void destroy() 销毁方法,以便释放资源FilterConfig接口
它是Servlet容器进行实现 ,主要是获取过滤器中的配置信息,其方明及说明如表 :
方法 说明 public String getFilterName() 用于获取过滤器的名字 public ServletContext getServletContext() 获取Servlet上下文 public String getInitParameter(String name) 获取过滤器的初始化参数值 public Enumeration getInitParameterNames() 获取过滤器的所有初始化参数FilterChain接口
它由Servlet容器进行实现,在这个接口中一个方法 ,模板下载其方法声明 :public void doFilter(ServletRequest request, ServletResponse response)throws IOException,ServletException 该方法将过滤的请求传给下一个过滤器,如果此过滤器已经是过滤器链中的最后一个过滤器 ,那么,请求传给目标资源 。
过滤器创建于配置
创建一个过滤器对象需要实现 javax.serjavax.servlet.Filter接口 ,下面演示过滤器的创建:
创建名称为 MyFilter的过滤器对象 :
复制import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servletFilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 过滤器 */ public class MyFilter implements Filter{ //初始化方法 public void init(FilterConfig fConfig) throws ServletException{ //初始化处理 } //过滤处理方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletEXception { //过滤处理 chain.doFilter(request, response); } //销毁方法 public void destroy(){ //释放资源 } }过滤器的init()对过滤器的初始化进行处理 ,destroy()是过滤器的销毁方法,建站模板主要是释放资源 ,对于过滤器处理的业务需要编写到doFilter()里面 ,在请求过滤要调用chain参数的doFilter()把请求向下传给下一过滤器或目标资源:
使用过滤器并不一定要将请求向下传递到下一过滤器或目标资源 ,如果业务逻辑需要,也可以在过滤处理后 ,直接回应客户端;
过滤器与Servlet也十分相似 ,在创建后同样对其配置 ,过滤器的配置主要分为两个步骤,分别是声明过滤器对象和创建过滤器映射,创建叫MyFilter的过滤器对象 :
复制<!- 过滤器声明 -> <filter> <!- 过滤器的名称 -> <filter-name>MyFilter</filter-name> <!- 过滤器的完整类名 -> <filter-class>com.lyq.Myilter</filter-class> </filter> <!- 过滤器映射 -> <filter-mapping> <!- 过滤器名称 -> <filter-name>MyFilter</filter-name> <!-- 过滤器 URL映射 -> <url-pattern>/MyFilter</filter-name> <!- 过滤器URL映射 -> <url-pattern>/MyFilter</url-pattern> </filter-mapping>相关文章
进入 2023 年,网络钓鱼仍然像往年一样活跃在互联网的各个角落。2022 年 Verizon 数据泄露调查报告指出,去年75%的社会工程攻击涉及网络钓鱼,仅去年一年就有超过33 万个账户被网络钓鱼,2025-12-08
努比亚蓝牙耳机——音质出众,便捷无忧(畅享高品质音乐,助你随时沉浸)
近年来,蓝牙耳机的发展迅猛,为我们的音乐体验带来了极大的便利。而努比亚作为一家知名手机品牌,也推出了自家的努比亚蓝牙耳机。本文将详细介绍努比亚蓝牙耳机的音质表现、使用便捷性以及其他特点,让您更好地了解2025-12-08
e52623v3(解析e52623v3的性能、特点和适用领域)
在计算机领域,处理器是电脑的核心部件之一,它直接影响着计算机的性能和运行速度。本文将深入探讨e52623v3这款处理器的性能、特点以及适用领域,帮助读者更好地了解该处理器。1.架构和制程工艺:e5262025-12-08
雷神911-s6是一款备受瞩目的高性能游戏本,它不仅在硬件配置上拥有强大的竞争力,同时还具备独特的设计风格和出色的游戏体验。本文将从多个方面对雷神911-s6进行深度评测,带您全面了解这款游戏本的优势2025-12-08
近日,高乐氏公司称去年 9 月的一次网络攻击迄今已造成该公司 4900 万美元的损失。高乐氏作为一家美国消费和专业清洁产品制造商,拥有 8700 名员工,2023 年收入近 75 亿美元。去年8 月2025-12-08
作为一家综合性水务企业,多元环球水务致力于提供可持续的水资源管理解决方案。本文将分析多元环球水务的发展情况以及其在水资源管理领域的创新实践,展示其在推动可持续发展和保护环境方面的重要作用。1.多元环球2025-12-08

最新评论