Filter 过滤器的介绍及使用

article/2025/9/6 9:37:51

Filter过滤器

MySql的语法看这篇就够了,传送地址:MySql必知必会
JSP的使用看这篇就够了,传送地址:JSP必知必会

文章目录

  • Filter过滤器
    • 一、Filter过滤器的介绍
    • 二、Filter过滤器的使用
    • 三、Filter过滤器的生命周期
    • 四、FilterConfig类
    • 五、FilterChain过滤器链
    • 六、Filter的拦截路径

一、Filter过滤器的介绍

  1. Filter过滤器是JavaWeb三大组件之一,其余组件是:Servlet程序、Listener监听器
  2. Filter过滤器是JavaEE规范,也就是一个接口
  3. Filter过滤器的作用是:拦截请求、过滤响应

二、Filter过滤器的使用

  1. Filter过滤器的使用步骤:

(1) 编写一个类实现Filter接口 (导入的包为:javax.servlet.Filter)

(2) 实现三个方法:
①实现过滤方法doFilter(),此方法中的:
filterChain.doFilter(servletRequest,servletResponse);
只有执行此方法,才可以访问拦截路径中的资源,若未执行此方法则代表拦截
②实现init()方法
③实现destroy()方法

(3) 到web.xml中配置Filter的拦截路径

  1. Filter过滤器的工作流程:
    在这里插入图片描述

  2. 案例:在web目录下有一个Admin目录,此目录下的所有资源都必须用户登录之后才可访问,
    若没有登录,则跳转到登录页面

分析: 用户登录之后会把登录信息保存到Session域中,所以检查用户是否登录,可以判断Session 中是否包含用户的登录信息即可

代码演示(1):创建LoginServlet程序

public class LoginServlet implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;HttpSession session = httpServletRequest.getSession();Object user = session.getAttribute("user");//如果等于null,说明还没有登录if (user == null) {   httpServletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);} else {//登录成功,可以访问Admin目录下的目标资源filterChain.doFilter(servletRequest,servletResponse);}}@Overridepublic void init(FilterConfig filterConfig) throws ServletException { }@Overridepublic void destroy() { }
}

代码演示(2):在web.xml中编写配置

<!--  Filter标签用于配置一个Filter过滤器,用法与Servlet标签一致  -->
<filter><filter-name>LoginServlet</filter-name><filter-class>com.qizegao.Filter.LoginServlet</filter-class>
</filter>
<filter-mapping><filter-name>LoginServlet</filter-name><!--  url标签用于配置拦截路径,也就是访问哪些资源需要被拦截  --><!--  /表示工程路径,映射到web目录  --><!--  /*代表指定目录下的所有文件  --><url-pattern>/Admin/*</url-pattern>
</filter-mapping>

运行结果:
直接在浏览器输入:http://localhost:8080/MyTest/Admin/a.jsp,跳转到login.jsp,无法访问a.jsp

注意:
1.Filter过滤器也支持注解,在首行加@WebFilter(“拦截路径”),则无需web.xml文件
2.浏览器不能直接访问实现Filter接口的类,只需访问拦截路径,就会自动的触发doFilter方法

三、Filter过滤器的生命周期

1.构造器方法
2.init初始化方法
3.doFilter方法 (其中有chain.doFilter方法)
4.destroy方法
其中:① 1和2在web工程启动的时候执行(即在创建Filter过滤器)
② 第三步,符合拦截路径的请求发送到服务器的时候,自动的执行,若请求不属于拦截
路径,则不会执行
③ 第四步,停止web工程的时候执行(停止web工程,也会销毁Filter过滤器)

四、FilterConfig类

1.FilterConfig类是Filter过滤器的配置文件类,每次创建Filter的时候,也会创建一个FilterConfig
类,其中包含了Filter配置文件的配置信息

2.FilterConfig类的作用是获取Filter过滤器的配置文件内容:
(1) 获取Filter的名称,即web.xml文件中标签的值:
filterConfig.getFilterName();
(2) 获取web.xml文件中标签的值(写在filter标签中,可写多个),如:
在这里插入图片描述
(3) 获取ServletContext对象:filterConfig.getServletContext()

五、FilterChain过滤器链

作用:解决多个过滤器如何一起工作
在这里插入图片描述

注意:

  1. 上述两个Filter拦截的资源路径相同,代表一定会执行两个Filter过滤器的doFilter方法, 但因为手动注释不一定执行其中的chain.doFilter方法
  2. 如果两个Filter拦截资源不同,且拦截资源符合Filter1,不符合Filter2,则会执行Filter1 的doFilter方法,且执行其中的chain.doFilter方法时,不会去执行Filter2的doFilter方法, 直接去访问资源,之后执行Filter1的后置代码(在chain.doFilter之后的均是后置代码)
  3. 如果请求的资源不符合过滤器1和2的拦截路径,两个doFilter方法都不执行
  4. 前置代码、chain.doFilter方法、后置代码都在doFilter方法中

六、Filter的拦截路径

1.精确匹配

<url-pattern>/target.jsp</url-pattern>

表示请求的地址必须为http://ip:port/工程路径/target.jsp,才可以触发doFilter方法

2.目录匹配

<url-pattern>/admin/*</url-pattern>

表示请求的地址必须为http://ip:port/工程路径/admin/目录下所有的文件,才可以触发doFilter方法

3.后缀名匹配

<url-pattern>*.html</url-pattern>

表示请求地址必须以.html结尾才可以触发doFilter方法

<url-pattern>*.jsp</url-pattern>

表示请求地址必须以.jsp结尾才可以触发doFilter方法

注意:Filter过滤器只关心请求的地址是否符合拦截路径,不会关心请求的资源是否存在

代码演示:FilterChain过滤器链的使用
(1) 在Admin目录下创建a.jsp
在这里插入图片描述

(2) 创建两个Filter过滤器

public class Filter1 implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("Filter1的前置代码执行");chain.doFilter(req, resp);System.out.println("Filter1的后置代码执行");}
}
public class Filter2 implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("Filter2的前置代码执行");chain.doFilter(req, resp);System.out.println("Filter2的后置代码执行");}
}

(3) 在web.xml中编写配置
在这里插入图片描述

运行结果:
在浏览器地址栏输入:http://localhost:8080/MyTest/Admin/a.jsp
控制台输出:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/bVXJkZLx.shtml

相关文章

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

详细介绍了Java Web Servlet中的Filter过滤器的原理以及常见用法。 文章目录 1 Filter接口1.1 过滤器的生命周期1.2 doFilter过滤方法 2 Filter的使用3 Filter的执行顺序3.1 多个过滤器 4 Filter的应用4.1 脏话过滤器4.2 编码过滤器4.3 统计IP访问次数4.4 禁止动态资源缓存的过…

python filter过滤器的使用_Python filter过滤器原理及实例应用

filter的语法&#xff1a;filter(函数名字,可迭代的变量) 其实filter就是一个“过滤器”&#xff1a;把【可迭代的变量】中的值&#xff0c;挨个地传给函数进行处理&#xff0c;那些使得函数的返回值为True的变量组成的迭代器对象就是filter表达式的结果 那filter的第一个参数&…

vue filter 过滤器 详解

Vue.js 允许你自定义过滤器filter&#xff0c;可被用于一些常见的文本格式化。 &#xff08;注意vue版本号不同 用法也稍有不同&#xff09; 接下来咱们就记录一下最常用的filter过滤器用法。&#xff08;该示例以多个过滤器为例&#xff0c;当然你也可以删掉第二个过滤器自行…

FFmpeg filter过滤器使用详解

1、FFmpeg过滤器简介 FFmpeg filter 提供了很多音视频特效处理功能&#xff0c;比如视频缩放、截取、翻转、叠加等。 FFmpeg有很多已经实现好的滤波器&#xff0c;这些滤波器的实现位于libavfilter目录之下&#xff0c;用户需要可以调用这些滤波器实现滤波。 我们可以通过ffm…

【全面详解】Filter过滤器的使用

一、什么是过滤器 Filter称之为过滤器&#xff0c;是SerlvetAPI提供的一个Filter接口&#xff0c;A类实现了这个接口&#xff0c;那么A类称之为过滤器Filter。主要用户的请求&#xff08;HttpServletRequest&#xff09;进行预处理&#xff0c;也可以对服务器响应后的数据进行处…

Filter过滤器的例子与注解配置

概念 作用 创建 创建web项目 定义类实现Servlet接口&#xff0c;实现其抽象方法 配置Filter 原理 注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 Filter的过滤器链 概念 当访问服务器的资源时&#xff0c;过滤器可以将请求拦截下来&…

Filter 过滤器接口详解

目录 1、Filter接口描述 2、如何使用Filter接口定义一个过滤器&#xff1f; 3、Filter接口的工作原理 4、Filter、FilterChain、FilterConfig、FilterRegistration、FilterRegistration.Dynamic 接口综述 &#xff08;1&#xff09;如何使用FilterConfig接口对Filter实例进…

Filter过滤器的作用

Filter过滤器的作用 Filter的作用&#xff1a;过滤器处于客户端和服务器端资源之间&#xff0c;对所有的请求或者响应进行拦截操作Filter过滤器在开发过程中的实际运用&#xff1a;Servlet 开发和Filter开发做对比Servlet开发Filter开发 Filter的作用&#xff1a;过滤器处于客户…

Filter 过滤器的使用

目录 一、Filter简介 二、Filter使用 1、Filter 的初体验 2、Filter 的生命周期 3、FilterConfig类 4、FilterChain过滤器链 5、Filter 的拦截路径 1&#xff09;精确匹配 2&#xff09;目录匹配 3&#xff09;后缀名匹配 一、Filter简介 Filter 过滤器它是 JavaWeb…

Filter过滤器工作原理

Filter过滤器工作原理 Filter简介 Filter也称之为过滤器&#xff0c;它是Servlet技术中最激动人心的技术之一&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截&#xff0…

Filter过滤器

文章目录 FilterFilter过滤器的简单说明Filter的执行顺序 Eclipse创建简单的Filter过滤器Filter过滤不到指定路径 Filter Filter过滤器的简单说明 1.过滤器是一个驻留在服务器端的web组件&#xff0c;可以截取客户端和服务器端之间的请求与响应的信息 2.过滤器Filter是对客户…

FilterChain 过滤器链和拦截路径

Filter 过滤器 Chain 链&#xff0c;链条 FilterChain 就是过滤器链&#xff08;多个过滤器如何一起工作&#xff09; Filter 的拦截路径 精确匹配&#xff1a; <url-pattern>/target.jsp</url-pattern>以上配置的路径&#xff0c;表示请求地址必须为&#xff1…

Filter 过滤器

一、Filter 过滤器概念 ① Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是&#xff1a;Servlet 程序、 Listener 监听器、 Filter 过滤器 ② 他是 JavaEE 的规范&#xff0c;也就是接口 ③ 作用&#xff1a;拦截请求&#xff0c;过滤响应 拦截请求常见的应用场景有&…

filter过滤器的概念

文章目录 1. 图示2. 什么是Filter3. 代码演示4. 使用场景&#xff1a;事务处理 1. 图示 2. 什么是Filter Filter也属于Servlet规范Filter开发步骤&#xff1a;新建类实现Filter接口&#xff0c;然后实现其中的三个方法&#xff1a;init、doFilter、destroy 配置Filter&#xf…

Filter 过滤器使用

一、什么是Filter过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。 三大组件分别是&#xff1a;Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范。也就是接口 Filter 过滤器它的作用是&#xff1a;拦截请求&#xff0c;过滤响应。 拦截…

Filter过滤器(超详细)

声明&#xff1a;本文是根据博主学习内容所整理得的笔记&#xff0c;仅作为交流学习使用&#xff0c;需要观看视频的请移步&#xff1a;http://www.atguigu.com/ 1.Filter &#xff1f;什么是过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。 三大组件分别是&#xff1a;S…

GitHub使用教程(完整教程)

第一步&#xff1a;进入官网 &#xff08;https://github.com/&#xff09; 第二步&#xff1a;新建账号——输入用户名&#xff0c;邮箱&#xff0c; 密码——邮箱确认——登录GitHub 第三步&#xff1a;创建仓库 第三步&#xff1a;查看仓库 第四步&#xff1a;实现本地项目…

Git和Github详细入门教程(别再跟我说你不会Git和Github)

前言&#xff1a;基础差建议先观看B站视频&#xff08;关键字&#xff1a;GitHub&#xff09;&#xff0c;该教程是根据视频教程而制。 文章目录 01.Git概述02.Git的本地仓库操作 Git的版本回退操作 03.远程仓库05.Git的分支操作06.冲突的产生与解决07.Git实用功能08.忽略文件0…

GitHub Actions 入门教程

https://jiangren.com.au/blog/github-actions 一、GitHub Actions 是什么&#xff1f; 大家知道&#xff0c;持续集成由很多操作组成&#xff0c;比如抓取代码、运行测试、登录远程服务器&#xff0c;发布到第三方服务等等。GitHub 把这些操作就称为 actions。 很多操作在不…

小白入门~ GitHub和Git超详细使用教程

https://github.com/ 这是GitHub的官方网站&#xff0c;在官网上可以注册属于自己的GitHub账号&#xff0c;网上是全英文的&#xff0c;对于英语不好的同学建议使用谷歌浏览器&#xff0c;谷歌浏览器可以翻译网页变为中文使用起来十分方便。 通过简单的步骤之后你就会有一个属于…