JavaWeb 17.过滤器

目录

一、过滤器概述

生活举例:公司前台,停车场安保系统,地铁检票闸机

过滤器开发中应用场景

过滤器工作位置图解

Filter接口API: 

二、过滤器过滤过程图解

三、过滤器生命周期

四、过滤器链的使用 

工作流程图解

注解方式配置过滤器

XML方式配置

注解方式配置过滤器


生命的意义却似轮回

每个人都得从头寻找

唯在这寻找中才可能与前贤汇合

若在山腰止步

登峰之路岂不又被埋没?

                        —— 24.10.13

一、过滤器概述

Filter,即过滤器,是JavaEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是JavaWeb项目中最为实用的技术之一

Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口

filter的工作位置是项目中所有目标资源之前,容器在创建HtpServletRequest和

HtpServletResponse对象后,会先调用Filter的doFilter方法

Filter的doFilter方法可以控制请求是否继续,如果放行,则请求继续,如果拒绝,则请求到此为止,由过滤器本身做出响应

Filter不仅可以对请求做出过滤,也可以在目标资源做出响应前,对响应再次进行处理

Filter是GOF中责任链模式的典型案例

Filtler的常用应用包括但不限于::登录权限检查、解决网站乱码、过滤敏感字符,日志记录,性能分析.….…


生活举例:公司前台,停车场安保系统,地铁检票闸机

公司前台对来访人员进行审核,如果是游客则拒绝进入公司,如果是客户则放行,客户离开时提醒客户不要遗忘物品

停车场保安对来访车辆进行控制,如果没有车位拒绝进入,如果有车位,发放停车卡并放行,车辆离开时收取停车费

地铁验票闸机在人员进入之前检查票,没票拒绝进入,有票验票后放行,人员离开时同样验票


过滤器开发中应用场景

① 日志的记录        ② 性能的分析        ③ 乱码的处理        

④ 事务的控制        ⑤ 登录的控制        ⑥ 跨域的处理

……


过滤器工作位置图解


Filter接口API: 

初始化方法,由容器调用并传入初始配置信息 filterConfig 对象

default public void init(FilterConfig filterConfig)

过滤方法,核心方法,过滤请求,决定是否放行响应之前的其他处理等都在该方法中

public void doFilter(ServletRequest request,
 ServletResponse response, FilterChain chain)

销毁方法,容器在回收过滤器对象之前调用的方法 

default public void destroy();

二、过滤器过滤过程图解


三、过滤器生命周期

过滤器作为web项目的组件之一,和Servlet的生命周期类似,略有不同,有servlet的load-on- startup的,默认就是系统启动立刻构造。

阶段                                对应方法                                         执行时机                执行次数

创建对象                          构造器                                         web应用启动时                1

初始化方法        void init(FilterConfig filterConfig)                   构造完毕                      1

过滤请求        void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)                                每次请求                     多次

销毁                        default void destroy()                           web应用关闭时                1


四、过滤器链的使用 

一个web项目中,可以同时定义多个过滤器,多个过滤器对同一个资源进行过滤时,工作位置有先后,整体形成一个工作链,称之为过滤器链

 过器中的过滤器的顺序由 filter-mapping 顺序决定;

每个过滤器过滤的范围不同,对同一个资源来说,过过滤器中的过滤器个数可能是不同的;

如果某个Filter是使用ServletName进行匹配规则的配置,那么这个 Filter 执行的优先级要更低 


工作流程图解


注解方式配置过滤器

XML方式配置

 <!--配置filter,并为filter起别名-->
 <filter>
     <filter-name>loggingFilter</filter-name>
     <filter-class>com.atguigu.filters.LoggingFilter</filter-class>
     <!--配置filter的初始参数-->
     <init-param>
         <param-name>dateTimePattern</param-name>
         <param-value>yyyy-MM-dd HH:mm:ss</param-value>
     </init-param>
 </filter>

 <!--为别名对应的filter配置要过滤的目标资源-->
 <filter-mapping>
     <filter-name>loggingFilter</filter-name>
     <!--通过映射路径确定过滤资源-->
     <url-pattern>/servletA</url-pattern>
     <!--通过后缀名确定过滤资源-->
     <url-pattern>*.html</url-pattern>
     <!--通过servlet别名确定过滤资源-->
     <servlet-name>servletB ame</servlet-name>
 </filter-mapping

注解方式配置过滤器

@WebFilter(
    filterName = "loggingFilter",
    initParams = { @WebInitParam(name="dateTimePattern",value="yyyy-MM-dd 
HH:mm:ss")},
    urlPatterns = {"/servletA","*.html"},
    servletNames = {"servletBName"}
 )
public class LoggingFilter  implements Filter {
    /* 内部代码 略 */
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890399.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

map和set(一)

首先模拟一下key形式类 使用的结构是搜索二叉树 结点中有左孩子和右孩子 还有一个存储的值 template <class K>struct BSTnode//搜索二叉树不支持修改 中序遍历是有序的{K _key;BSTnode<K>* _left;BSTnode<K>* _right;BSTnode(const K& key):_key(key…

网络资源模板--Android Studio 实现记事本App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的记事本App 二、项目测试环境 三、项目详情 首页 显示笔记列表&#xff1a;使用 ListView 显示从数据库中查询到的笔记内容。搜索功能&#xff…

web-105linux权限提升

rsync未授权本地覆盖 Rsync 是 linux 下一款数据备份工具&#xff0c;默认开启 873 端口 https://vulhub.org/#/environments/rsync/common/ 借助 Linux 默认计划任务调用/etc/cron.hourly&#xff0c;利用 rsync 连接覆盖 前提条件就是需要知道rsync的密码或者存在未授权 -提…

Java微信支付接入(6) - API V3 Native 支付通知API

官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_5.shtml 通知规则&#xff1a;用户支付完成后&#xff0c;微信会把相关支付结果和用户信息发送给商户&#xff0c;商户需要接收处理该消息&#xff0c;并返回应答。对后台通知交互时&#xff0c…

如何解决 Vim 中的 “E212: Can‘t open file for writing“ 错误:从编辑到权限管理(sudo)

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

第十五届蓝桥杯C++B组省赛

文章目录 1.握手问题解题思路1&#xff08;组合数学&#xff09;解题思路2&#xff08;暴力枚举&#xff09; 2.小球反弹做题思路 3.好数算法思路&#xff08;暴力解法&#xff09;---不会超时 4.R格式算法思路 5.宝石组合算法思路---唯一分解定理 6.数字接龙算法思路----DFS 7…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下&#xff0c;注意&#xff1a;AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

uniapp学习(004-1 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器 源链接&#xff1a;https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idchinaFlag 国内站点预览&#xff1a;http://threehub.cn github地址: https://github.com/z2586300277/three-ce…

python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)

python异常检测 - Stochastic Outlier Selection (SOS) 前言 随机离群选择SOS算法全称stochastic outlier selection algorithm. 该算法的作者是jeroen janssens. SOS算法是一种无监督的异常检测算法. 随机离群选择SOS算法原理 随机离群选择SOS算法的输入: 特征矩阵(featu…

【代码】集合set

哈喽大家好&#xff0c;我是学霸小羊&#xff0c;今天来讲一讲集合&#xff08;set&#xff09;。 在数学上&#xff0c;集合长这样&#xff1a; 那今天就来讲一讲编程上的集合。 集合的定义&#xff1a;把一些元素按照某些规律放在一起&#xff0c;就形成了一个集合。比如说…

stm32单片机个人学习笔记10(TIM编码器接口)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

论文笔记:Template-Based Named Entity Recognition Using BART

论文来源&#xff1a;ACL 2021 Finding 论文链接&#xff1a;https://aclanthology.org/2021.findings-acl.161.pdf 论文代码&#xff1a;GitHub - Nealcly/templateNER: Source code for template-based NER 笔记仅供参考&#xff0c;撰写不易&#xff0c;请勿恶意转载抄袭…

D35【python 接口自动化学习】- python基础之输入输出与文件操作

day35 文件合并 学习日期&#xff1a;20241012 学习目标&#xff1a;输入输出与文件操作&#xfe63;-47 如何使用python合并多个文件&#xff1f; 学习笔记&#xff1a; 合并文件需求分析 合并两个文件 代码实现 # 合并两个文件 with open(demo1.txt) as f1:file_data_1f…

机器学习(10.7-10.13)(Pytorch LSTM和LSTMP的原理及其手写复现)

文章目录 摘要Abstract1 LSTM1.1 使用Pytorch LSTM1.1.1 LSTM API代码实现1.1.2 LSTMP代码实现 1.2 手写一个lstm_forward函数 实现单向LSTM的计算原理1.3 手写一个lstmp_forward函数 实现单向LSTMP的计算原理总结 摘要 LSTM是RNN的一个优秀的变种模型&#xff0c;继承了大部分…

鸿蒙--知乎评论

这里我们将采用组件化的思想进行开发 在开发中默认展示的是首页也就是 pages/Index.ets页面 这里存放的是所有页面的配置文件,类似与uniapp中的pages.json 如果我们此时要更改默认显示Zh

jmeter入门: 安装

前提&#xff1a; 安装jdk1.8&#xff0c; 并设置java_home 和path环境变量。 ​​​​​​1. download Apache JMeter - Download Apache JMeter 2. 解压jmeter包 3. 安装插件Install :: JMeter-Plugins.org 下载jar包&#xff0c;放到lib/ext目录 4. 打开jmeter &#xff0…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

解决报错:Invalid number of channels [PaErrorCode -9998]

继昨天重装了树莓派系统后&#xff0c;今天开始重新安装语音助手。在测试录音代码时遇到了报错“Invalid number of channels [PaErrorCode -9998]”&#xff0c;这是怎么回事&#xff1f; 有人说这是因为pyaudio没有安装成功造成的。于是&#xff0c;我pip3 install –upgrad…

难点:Linux 死机定位(进程虚拟地址空间耗尽)

死机定位(进程虚拟地址空间耗尽) 一、死机现象 内存富裕,但内存申请失败。 死机时打印: 怀疑是: 1、内存碎片原因导致。 2、进程虚拟地址空间耗尽导致。 3、进程资源限制导致。 二、内存碎片分析 1、理论知识:如何分析内存碎片化情况 使用 /proc/buddyinfo: /proc/…