过滤器介绍

news/2024/10/23 7:36:49/

1、什么是过滤器?

过滤器,顾名思义就是起到过滤筛选作用的一种事物,只不过相较于现实生活中的过滤器(课上邓老师所列举的例子:滤水器、空气净化器等等),这里的过滤器过滤的对象是客户端访问的web资源,也可以理解为一种预处理手段,对资源进行拦截后,将其中我们认为的杂质(用户自己定义的)过滤,符合条件的放行,不符合的则拦截下来。它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

 

客户端请求到达的时候,经过一次过滤器。

服务器处理完请求的时候,经过一次过滤器。

虽然经过两次过滤器,但不代表同样的代码执行了两次。

2、过滤器的作用

在客户端的请求访问后端资源之前,拦截这些请求(添加处理)。

3、Filter接口

3.1.  Filter接口是过滤器类必须实现的接口,该接口中有三个方法:

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数FilterConfig可以获得filter的初始化参数;
doFilter(ServletRequest request,ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法,方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁对象前被调用。
4、FilterChain(过滤器链)接口

在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。过滤器的执行顺序有两种。

4.1.第一种是按照过滤器的名称来执行,例如有两个过滤器分别为AFilter、BFilter,则默认先执行AFilter;

4.2.第二种是根据Filter在web.xml文件中的配置顺序来决定先调用哪个Filter,先配置的先执行。当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。FilterChain是一个接口,里面又定义了doFilter()方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。当多个过滤器进行请求和响应时,执行顺序遵循 “先进后出” 的原则。

5、代码实例

以下代码作用为过滤UTF-8编码格式。

package Filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//过滤全部内容
@WebFilter("/*")
public class Filter1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {HttpServletRequest request=(HttpServletRequest) req;HttpServletResponse response=(HttpServletResponse) resp;request.setCharacterEncoding("utf-8");response.setContentType("html/text;charset=utf-8");chain.doFilter(request,response);}@Overridepublic void destroy() {}
}


6、心得

1.过滤器用来实现通用的功能,减少代码冗余,提高可维护性;
2.一个过滤器可以配置给多个资源使用(编码过滤器);
3.一个资源也可以配置多个过滤器,按照配置顺序调用。


http://www.ppmy.cn/news/371782.html

相关文章

实验7-3-6 字符串转换成十进制整数

实验7-3-6 字符串转换成十进制整数 题目描述 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字…

醒醒吧,连新来的实习生都在进阶自动化,你还在点点点吗,聪明人都在提升自己!

5年测试老兵了,真的很迷茫,觉得自己不再提升自己,真的会被实习生替代。 很多朋友跟我吐槽,说自己虽然已经工作3-4年,可工作依旧是点点点,新来的实习生用一周的时间就把工作内容学会了,他的压力…

用Arduino打造智能苹果手表,可同步提示苹果手机的消息

我想要一款智能手表,它向我展示了来自iPhone的通知,尺寸足够小,并且有可充电电池持续至少一天。我基于Arduino创建了自己的Apple手表。它是基于Arduino mini pro的智能手表,通过蓝牙连接到iPhone。USB微型端口连接到电池&#xff…

制作一款可以【记录运动历史数据】的智能呼啦圈——硬件改造篇

简介:本文将从硬件选型,原理图解析以及3D建模来完成普通呼啦圈到智能呼啦圈硬件改造。 一、概述 又是在电脑前连坐几小时的一天,和大部分上班族一样,由于工作原因没空去健身房,也抽不出多少时间进行户外锻炼&#xf…

把电梯当跑步机

逸彩城中间有个大厅,大厅的两边有上下的滚梯,早上9点多,人不是很多。 我看到一个人站在电梯上,不上也不下,我还以为电梯没有开呢。 过去一看,把我乐的,他把电梯当跑步机了。 这小伙是边上理发…

更好玩的跑步机,还有丰富课程资源,赤兔Air跑步机体验

上个月开始天气就慢慢变冷了,尤其是早晚的时候,户外的天气格外阴冷,这也成了很多朋友不去锻炼的好借口。当然了,室内也有很多健身方式可以选择,否则一冬天不健身的话,不仅会长肉,对心肺健康也不好。 要想获得更好的健身效果,专业的设备少不了,这两年室内健身的器械选择…

苹果公布穿戴设备进行跌倒检测专利,Find My技术堪称王炸

苹果公司“使用移动设备进行情境感知的跌倒检测”专利公布。该项专利的申请日期为2022年09月09日。申请公布日为2023年03月14日。发明人为S文卡泰斯瓦兰,PDH扎德,VR马伊吉,YJJ雷纳德。 根据该项专利的摘要显示,本公开涉及使用移…

从不跑步到无间断跑步1年感受

1.铭记自己跑步的意义与目的:我的跑步不是为了比赛,不是跟人比,而是为了健康更有精力的活着 2.定好一个固定时间与周期:我喜欢选择早上6:00起床好,选择跑步5公里或者慢跑40分钟,刚睡醒精力比较好, 3.准备好…