JavaWEB必知必会-Filter(过滤器)

本文介绍了JavaFilter的基本概念,包括Filter的工作原理和入门案例。详细讲解了Filter的API,如init、doFilter和destroy方法。接着深入探讨了Filter的配置,包括url-pattern、servlet-name和dispatcher的使用,以及各种过滤规则的配置和测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  1. Filter简介及入门
  2. Filter的API详解
  3. Filter配置的详解

1 Filter简介及入门

1.1 Fileter简介

filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理.
filter工作原理图解:

1.2 入门案例

1.2.1 编写一个Servlet

1.2.2 编写第一个Filter

1.2.3 编写第二个Filter

1.2.4 配置Filter

1.2.5 访问Servlet

1.2.6 结论

如果Filter的<url-pattern>配置为过滤servlet路径,那么在请求到达该servlet之前,会先经过过滤器.执行过滤器的前处理(doFilter()方法).直到过滤器执行放行操作:

chain.doFilter(request,response),再进入下一个Filter,所有的Filter放行完成后,请求到达servlet;在servlet处理完成之后,请求会再次返回,即经过Filter的后处理.
在整个前处理过程中,如果过滤器链中的某一个过滤器不进行放行操作,则该请求无法到达目标资源.目标资源就包括所有Servlet,jsp等动态资源和js,css,html等静态资源.

2 Filter的API详解

2.1 Filter生命周期及其相关方法

2.1.1 Filter的生命周期

Filter何时创建:服务器启动时就创建filter对象
Filter何时销毁:服务器关闭时filter销毁

2.1.2 生命周期方法

Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法

  • init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行
  • doFilter(ServletRequest,ServletResponse,FilterCha):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
  • destory():代表是filter销毁方法 当filter对象销毁时执行该方法

2.2 API详解

2.2.1 init方法

其中参数config代表该Filter对象的配置信息的对象,内部封装是该filter的配置信息。

  • 代码演示

在web.xml中分别配置filter的初始化参数和web应用的初始化参数.


重写Filter的init()方法:

启动服务器,结果如下:

2.2.2 destroy方法

该方法会在服务器关闭的时候,及Filter对象被销毁的时候调用.见入门案例

2.2.3 doFilter方法

doFilter(ServletRequest,ServletResponse,FilterChain)
其中的参数:

  • ServletRequest/ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。该request个该response就是在访问目标资源的service方法时的request和response。
  • FilterChain:过滤器链对象,通过该对象的doFilter方法可以放行该请求

3 Filter配置详解

3.1 基本配置图解

Filter的基本配置如下:

3.2 过滤规则详解

3.2.1 url-pattern

配置的核心部分在于,也就是过滤资源的路径.配置该标签时有以下几种配置方式:

  1. 完全匹配: /demo1
  2. 目录匹配: /aaa/bbb/*
  3. 扩展名匹配: *.action *.jsp…
  • 代码演示

创建两个Filter,其过滤规则为第二,第三种.再创建两个Servlet,访问路径分别第二,第三种.测试的配置.

  1. 第二种过滤规则的测试

Filter的配置及代码


Servlet的配置及代码


2) 第三种过滤规则的测试
Filter的配置及代码



Servlet的配置及代码

  • 测试结果

3.2.2 servlet-name

过滤器的过滤规则除了可以使用url-pattern进行配置以外,还可以使用servlet-name进行配置.
  • 代码演示

写一个过滤器,通过servlet-name过滤Demo1Servlet.

  • 测试结果

3.2.3 dispatcher

dispatcher代表请求的访问方式.

  1. REQUEST:默认值,代表直接访问某个资源时执行filter
  2. FORWARD:转发时才执行filter
  3. INCLUDE: 包含资源时执行filter
  4. ERROR:发生错误时 进行跳转是执行filter
  • 代码演示

在index.jsp页面中,进行请求转发,转发到Demo1Servlet

按照之前的案例,在我访问/demo1的时候,请求会经过3个过滤器.但是查看控制台:

发现只对jsp页面进行了过滤.原因就是因为我们过滤请求的方式是直接访问,请求转发的时候不包含在内.所以需要在Filter的配置中,配置dispatcher标签.
我们对Demo6Filter的配置进行修改:

再次访问index.jsp:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miracle_PHP|JAVA|安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值