Servlet中的过滤器Filter详解

Java Servlet之Filte(过滤器)详解 提示:这里对文章进行总结:以上就是今天要讲的内容. 阅读详情

web.xml中元素执行的顺序listener->filter->struts拦截器->servlet。

1.过滤器的概念

Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。而在实际使用时,就要特别注意过滤链的执行顺序问题

2.过滤器的作用描述

  • 在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。 
  •   根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。 
  •   在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。 
  • 根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。

3.过滤器的执行流程


4.Filter接口

1.如何驱动

在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中

2.方法介绍

    • init()  Init 方法在 Filter 生命周期中仅执行一次,web 容器在调用 init 方法时
    • destory()  在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
    • doFilter() Filter 链的执行 

5.FilterChain接口

1.如何实例化

代表当前 Filter 链的对象。由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中

2.作用

调用过滤器链中的下一个过滤器

filter实例:

web.xml配置

[html]   view plain copy print ?
  1. <!-- 编码过滤器 -->  
  2.     <filter>  
  3.         <filter-name>setCharacterEncoding</filter-name>  
  4.         <filter-class>com.company.strutstudy.web.servletstudy.filter.EncodingFilter</filter-class>  
  5.         <init-param>  
  6.             <param-name>encoding</param-name>  
  7.             <param-value>utf-8</param-value>  
  8.         </init-param>  
  9.     </filter>  
  10.     <filter-mapping>  
  11.         <filter-name>setCharacterEncoding</filter-name>  
  12.         <url-pattern>/*</url-pattern>  
  13.     </filter-mapping>  
  14.    
  15. <!-- 请求url日志记录过滤器 -->  
  16.     <filter>  
  17.         <filter-name>logfilter</filter-name>  
  18.         <filter-class>com.company.strutstudy.web.servletstudy.filter.LogFilter</filter-class>  
  19.     </filter>  
  20.     <filter-mapping>  
  21.         <filter-name>logfilter</filter-name>  
  22.         <url-pattern>/*</url-pattern>  
  23.     </filter-mapping>  

编码拦截器:

[java]   view plain copy print ?
  1. public class EncodingFilter implements Filter {  
  2.     private String encoding;  
  3.     private Map<String, String> params = new HashMap<String, String>();  
  4.     // 项目结束时就已经进行销毁  
  5.     public void destroy() {  
  6.         System.out.println("end do the encoding filter!");  
  7.         params=null;  
  8.         encoding=null;  
  9.     }  
  10.     public void doFilter(ServletRequest req, ServletResponse resp,  
  11.             FilterChain chain) throws IOException, ServletException {  
  12.         //UtilTimerStack.push("EncodingFilter_doFilter:");  
  13.         System.out.println("before encoding " + encoding + " filter!");  
  14.         req.setCharacterEncoding(encoding);  
  15.         // resp.setCharacterEncoding(encoding);  
  16.         // resp.setContentType("text/html;charset="+encoding);  
  17.         chain.doFilter(req, resp);        
  18.         System.out.println("after encoding " + encoding + " filter!");  
  19.         System.err.println("----------------------------------------");  
  20.         //UtilTimerStack.pop("EncodingFilter_doFilter:");  
  21.     }  
  22.    
  23.     // 项目启动时就已经进行读取  
  24.     public void init(FilterConfig config) throws ServletException {  
  25.         System.out.println("begin do the encoding filter!");  
  26.         encoding = config.getInitParameter("encoding");  
  27.         for (Enumeration e = config.getInitParameterNames(); e  
  28.                 .hasMoreElements();) {  
  29.             String name = (String) e.nextElement();  
  30.             String value = config.getInitParameter(name);  
  31.             params.put(name, value);  
  32.         }  
  33.     }  
  34.  }  
日志拦截器:
[java]   view plain copy print ?
  1. public class LogFilter implements Filter {  
  2.     FilterConfig config;  
  3.    
  4.     public void destroy() {  
  5.         this.config = null;  
  6.     }  
  7.    
  8.     public void doFilter(ServletRequest req, ServletResponse res,  
  9.             FilterChain chain) throws IOException, ServletException {  
  10.         // 获取ServletContext 对象,用于记录日志  
  11.         ServletContext context = this.config.getServletContext();  
  12.         //long before = System.currentTimeMillis();  
  13.         System.out.println("before the log filter!");  
  14.         //context.log("开始过滤");  
  15.         // 将请求转换成HttpServletRequest 请求  
  16.         HttpServletRequest hreq = (HttpServletRequest) req;  
  17.         // 记录日志  
  18.         System.out.println("Log Filter已经截获到用户的请求的地址:"+hreq.getServletPath() );  
  19.         //context.log("Filter已经截获到用户的请求的地址: " + hreq.getServletPath());  
  20.         try {  
  21.             // Filter 只是链式处理,请求依然转发到目的地址。  
  22.             chain.doFilter(req, res);  
  23.         } catch (Exception e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.         System.out.println("after the log filter!");  
  27.         //long after = System.currentTimeMillis();  
  28.         // 记录日志  
  29.         //context.log("过滤结束");  
  30.         // 再次记录日志  
  31.         //context.log(" 请求被定位到" + ((HttpServletRequest) req).getRequestURI()  
  32.         //      + "所花的时间为: " + (after - before));  
  33.     }  
  34.    
  35.     public void init(FilterConfig config) throws ServletException {  
  36.         System.out.println("begin do the log filter!");  
  37.         this.config = config;  
  38.     }  
  39.    
  40.  }  
HelloServlet类:
[java]   view plain copy print ?
  1. public class HelloWorldServlet extends HttpServlet{  
  2.    
  3.     /** 
  4.      * 查看httpservlet实现的service一看便知,起到了一个controll控制器的作用(转向的) 
  5.      * 之后便是跳转至我们熟悉的doget,dopost等方法中  
  6.      */  
  7.     @Override  
  8.     protected void service(HttpServletRequest req, HttpServletResponse resp)  
  9.             throws ServletException, IOException {  
  10.         System.out.println("doservice..."+this.getInitParameter("encoding"));  
  11.           
  12.         super.service(req, resp);  
  13.     }  
  14.    
  15.     @Override  
  16.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  17.             throws ServletException, IOException {  
  18.         System.out.println("doget...");  
  19.         doPost(req, resp);  
  20.     }  
  21.    
  22.     @Override  
  23.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  24.             throws ServletException, IOException {  
  25.         System.out.println("dopost...");  
  26.     }  
  27.       
  28.       
  29.    
  30.  }  
结果:

[plain]   view plain copy print ?
  1. before encoding utf-8 filter!  
  2.   before the log filter!  
  3.   Log Filter已经截获到用户的请求的地址:/hello  
  4.   doservice...UTF-8  
  5.   doget...  
  6.   dopost...  
  7.   after the log filter!  
  8.   after encoding utf-8 filter!  
  9.   ----------------------------------------  

总结:

1.过滤器执行流程

2.常用过滤器

[html]   view plain copy print ?
  1. <pre name="code" class="plain"><pre></pre><pre name="code" class="plain"></pre><pre></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4. <pre></pre>  
  5. <pre></pre>  
  6. <pre></pre>  
  7. <pre></pre>  
  8.   
  9. </pre>  
JavaWeb的Servlet,Filter过滤器 一、学习目标 1、Filter过滤器 2、Filter映射 3、Filter链 二、重要知识 为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法 。 1、Filter过滤器 Filter被称作为过滤器,其基本功能就是对Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。这好比我们生活中所用到的净水器一样 阅读详情

相关推荐

Servlet之Filter过滤器的基本理解

Filter过滤器 Filter和Servlet一样,本质上也是一个接口,javax.servlet.Filter接口。 当客户端访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。 过滤器一般用于完成通用的操作,比如多个资源具有共同的一个操作,可以抽取出来放到过滤器中。比如,登陆验证/统一编码处理/敏感字符过滤等等。 使用步骤: 1,定义一个类,实现Filter接口 2...

少年啦飞啦的博客 726

Servlet中过滤器Filter的使用

Servlet中过滤器Filter的使用 1.Filter过滤器简介 在Servlet中,有时我们需要Filter来进行对信息的过滤,比如在一个管理系统中,我们可以设置过滤器来过滤没有登录的用户访问主页以提高系统的安全性。 2.过滤器的优点: 过滤器是可插拔的,我们不需要某个过滤器时,直接删掉不会影响程序的运行。 一个过滤器不依赖于另一个资源 维护少,容易维护 3.过滤器的创建 要创建一个过...

GzxNgu的博客 7972

基于JAVA的GB28181实现之SIP服务核心组件解析

本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。

weixin_30892037的博客 264

servlet-filter(过滤器)

是。

CUITAO2305532402的博客 3878

LAMMPS实战:如何用ReaxFF力场模拟碳氢化合物热解(附完整脚本)

本文提供了一份使用LAMMPS软件中ReaxFF反应力场模拟碳氢化合物热解过程的完整实战指南。内容涵盖从环境准备、力场参数选择、能量最小化,到升温恒温动力学模拟的完整脚本编写,并介绍了基于轨迹文件的产物分析方法,帮助计算化学与材料科学研究者快速上手这一关键的分子动力学仿真技术。

soda5的博客 1098

Cursor Cloud Agent:云原生编程工作流的底层重构

编程工作流正从本地计算范式转向云原生执行范式。Cloud Agent 本质是将代码理解、生成、执行与调试等核心能力下沉至隔离、可控、按需分配的云端虚拟机,通过 Firecracker 微虚拟机实现亚秒级启动,并依托上下文快照、环境镜像化和内核级沙箱保障一致性、算力弹性与数据安全。这一范式突破了传统本地 AI 编程助手在环境依赖、调试能力与企业合规上的根本局限,使 IDE 从编辑工具升维为分布式开发指挥中心。本文深入解析其运行机制与工程落地实践。

weixin_34354173的博客 337

javaWeb---Filter

文章目录Filter配置方式Filter工作流程生命周期Filter 链中 Filter 的执行顺序代码编码方式过滤 Filter 过滤器要实现 javax.servlet.Filter 接口: 在 Web 资源被访问前,检查 request 对象,修改请求头和请求正文,或对请求进行预处理操作。 将请求传递到下一个过滤器或目标资源。 在 Web 资源被访问后,检查 response 对象,修改响应头和响应正文。 配置方式 注解 Web.xml Filter工作流程 1.客户端请求访问容器内的 We

卿本佳人的博客 910

零基础入门红外与可见光图像融合:DAF-Net 实战全指南

本文介绍了基于DAF-Net的红外与可见光图像融合技术,主要内容包括:技术原理、环境配置、数据准备和模型实现。DAF-Net通过双分支特征提取和动态注意力融合机制,有效结合红外图像的热辐射信息与可见光图像的纹理细节。文章详细讲解了开发环境搭建步骤(Python 3.8+PyTorch),TNO数据集的预处理方法,并提供了完整的DAF-Net实现代码,包含特征提取、注意力融合和图像重建三个关键模块。该技术可广泛应用于安防监控、自动驾驶等领域,帮助开发者快速入门多模态图像融合。

FJN110的博客 123

Servlet过滤器Filter详解

Filter概述 1、Filter意为过滤镜或者过滤器,用于在Servlet之处对request或者response进行修改。Filter提出了过滤链(FilterChain)的概念。这个概念体现了设计模式中的 2、Filter的处理过程: Filter基本使用方法 Filter适用的案例

只有想不到没有做不到,程序的力量。。。 2058

【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 758

vue3 - 详细实现视频/图片/图文“响应式瀑布流“列表布局示例代码,手机移动端H5或PC端电脑网页根据屏幕宽度自适应响应式瀑布流效果,支持数据列表动态懒加载,仿小红书图文视频div容器的瀑布流方案

vue3,nuxt3,瀑布流,响应式,图片瀑布流,视频瀑布流,图文瀑布流,手机移动端,H5瀑布流,电脑PC网站,手机电脑都能用的瀑布流布局,屏幕自适应,最好用的瀑布流组件插件,滚动分页加载瀑布流列表,瀑布流效果,自适应瀑布流布局详细教程,动态加载数据,懒加载,小红书,图文列表,视频列表,列表容器高度不一致怎么排列,整个屏幕全是宽高不固定的div容器列表怎么办,移动端和pc端双端实现瀑布流,vue3实现图片瀑布流布局以及响应式,滚动条触底懒加载,组件插件,vue3瀑布流 电脑手机都能用,解决卡顿不流畅,对不齐

✅ 精选推荐文章 4340

Java Servlet中Filter过滤器的原理以及使用方式

详细介绍了Java Web Servlet中的Filter过滤器的原理以及常见用法。

终生学习践行者 3810

从 Claude Code 到 SAP ADT,vibing-steampunk 把 ABAP 开发带进 Agentic 工程现场

vibing-steampunk(vsp)是一个连接SAP ADT API与AI编码代理的桥梁工具,通过MCP协议实现ABAP开发的自动化。它绕开传统GUI脚本方式,直接利用ADT REST API进行代码读写、调试和部署。该工具提供包分析、边界检查、LUW分析等功能,并创新性地采用Hyperfocused模式和方法级编辑来优化token使用效率。通过上下文压缩技术,vsp能智能提取关键代码片段,显著提升AI处理ABAP代码的精准度,为SAP系统现代化改造提供了高效的技术路径。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 189

servlet中Filter过滤器源码解析

servlet中Filter过滤器源码解析 文章目录servlet中Filter过滤器源码解析一、简介二、Filter过滤器2.1 核心类2.1.1 Filter接口2.1.2 FilterConfig2.1.3 FilterChain2.2 注册三、示例 一、简介 在servlet开发中,对于请求的拦截,常使用filter过滤器,这里结合源码对Filter过滤器进行介绍。 二、Filter过滤器...

panda-star的博客 1728

【微服务】Spring Aop原理深入解析

spring原理深度解析

congge 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Servlet中的过滤器Filter用法

1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。 优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器...

diaohuyi6830的博客 291

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Javaweb核心之servlet规范过滤器-----Filter

Javaweb核心之servlet规范过滤器-----Filter

楠黎倾风的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Servlet程序 Filter过滤器 图解

06 Servlet Servlet与jsp是等价的。 1、Servlet是JavaEE规范之一。规范就是接口 2、Servlet就JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。 3、Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。 Servlet可以连接java代码与前端代码Html之间,架成桥梁传输数据。jsp就是HTML与java代码的整合,既可以写后端代码也可以写前端代码所以并没有实

皮皮亮的博客 1508

Servlet之Filter过滤器1

Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、自动登录、压缩响应信息等一些高级功能。 Servlet API中提供了一个Filter接口,开发web应用

天马行空的专栏 1392

servlet过滤器Filter入门

分类: 计总会 | 标签: servlet, 基础知识, 学习, 摘录 servlet API中最重要的一个功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。                                                                    

murongqiuye的专栏 1387

Servlet 过滤器( Filter )

Servlet 过滤器( Filter ) 原理图: 过滤器的使用场景 登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换 过滤器的优势 便于代码重用,不必每个servlet中还要进行相应的操作 配置方式 web配置方式 <!--过滤器的xml配置 --> <filter> <!--名称--> <filter...

bggl的博客 1355

java servlet的过滤器 Filter

java servlet的过滤器 Filter 在tomcat10之前,需要处理乱码问题就需要使用到过滤器,过滤乱码 在处理自己的业务时,都需要判断用户有没有登录,登录了才可以继续操作!这段判断用户是否登录的代码时固定的,每一个servlet类都需要编写,并没有达到复用。 可以使用servlet规范中的Filter过滤器来解决问题 原理 作用 Filter可以在Servlet这个目标程序执行之前添加代码,也可以在目标servlet代码之后添加代码,都可以添加过滤规则 一般情况下都是在过滤器中编写公共代

yuluo的博客 1234

Servlet高级-Filter过滤器

Filter被称为,Filter基本功能就是对Servlet容器调用Servlet的过程进行拦截,它位于客户端和处理程序之间,能够对请求和响应进行检查和修改。Filter就好比现实中的污水净化设备,专门用于过滤污水杂质。Filter在Web应用中的拦截过程如下图所示。

qq_40210639的博客 1244

servlet: 过滤器 filter

servlet的三大组件 servlet filter 过滤器 Listener 监听器 过滤器是用来过滤http请求的 //继承于filter(javax.servlet) public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) t...

weixin_30526593的博客 114

【Servlet】Filter过滤器详解、使用示例

Filter过滤器讲解 作用 对服务器接收的请求资源和相应给浏览器的资源进行管理。 保护servlet 使用 创建一个实现了Filter接口的普通Java类(Eclipse中可以直接创建Filter) 覆写接口方法 init方法 doFilter方法 destroy方法 在web.xml中配置过滤器(如下) <filter> <display-...

寒泉 2万+
上一篇: java自带线程池和队列详细讲解
下一篇: Listener介绍
过天
博客等级 码龄18年 358粉丝 72原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值