Javaweb基础之Filter

大家好,这里是教授.F

引入:

        为什么需要过滤器???我们在访问一个项目的时候,常常有很多页面,如果没有过滤器,则我们需要在用户访问一个页面的时候,都要进行一个校验,这样就非常代码就很冗余。

工作机制:

        

细节:

        1.Filter的配置跟servlet非常相似,因为Filter也是被tomcat管理和维护的

        2.

在 web.xml 配置过滤器
<!--filter 标签用于配置一个 Filter 过滤器-->
<filter>
<!-- filter 别名-->
<filter-name>ManageFilter</filter-name>
<!-- filter 类全路径-->
<filter-class>com.hspedu.servlet.ManageFilter</filter-class>
</filter>
<filter-mapping>
<!-- filter 别名 -->
<filter-name>ManageFilter</filter-name>
<!-- 老韩解读(重要)
1. url-pattern 配置拦截路径 /manage/*
2. 第 1 个 / 被服务器解析为:http://ip:port/工程路径/
3. /manage/* 表示:http://ip:port/工程路径/manage/* 所有资源请求都经过该过滤器
-->
<url-pattern>/manage/*</url-pattern>
</filter-mapping>

 上面的第三点说到的所有的资源请求都经过该过滤器。这个怎么理解???

        如果我们登录一个页面的时候,还没进行登录验证就显示出该内容,这样显然不行,所以我们把内容放在一个指定的地方(例如上面说的,放在manage中),这样只有在登录后,在能显示出manage的内容。看下面的图片:

我们使用路径定位来操作。内容只放在manage中。这样就能保证:如果没有登录,是不能看到mangae的内容的。

        3.在每次调用Filter时,Filter中的doFilter()就会被调用

        4.在销毁Filter时,Filter中的destroy()就会被调用

        5.每次启动tomcat的时候,Filter会自动被调用

url-pattern:

生命周期:

        1.filter在web项目启动时,有tomcat来创建filter实例,只会创建一个

        2.会调用filter默认的无参构造器,同时会调用init方法,只会调用一次

        3.在创建filter实例时,同时会创建一个filterConfig对象,并通过init方法传入

        4.通过FilterConfig对象,程序员可以获取该filter的相关配置信息

        5.当一个http请求和该filter的url-patter匹配时,就会调用deFilter方法                                                
        6.在调用doFilter方法时,tomcat会同时创建servletRequest 和 servletResponse

                和 Filter Chain对象,并通过doFilter传入

        7.如果后面的请求目标资源(jsp,servlet)会 使用到request 和 response ,那么会继续传递

FilterConfig():

        

1. FilterConfig 是 Filter 过滤器的配置类

2. Tomcat 每次创建 Filter 的时候,也会创建一个 FilterConfig 对象,这里包含了Filter 配置文件的配置信息。

3. FilterConfig 对象作用是获取 filter 过滤器的配置内容

过滤器链:

        FilterChain: 在处理某些复杂业务时,一个过滤器不够,可以设计多个过滤器共同完成过滤任务,形成过滤器链。

        注意:过滤器链的执行顺序跟在web.xml配置的顺序一样

FilterChain 注意事项和细节:

        1. 多个 filter 和目标资源在一次 http 请求,在同一个线程中

        2. 当一个请求 url 和 filter 的 url-pattern 匹配时, 才会被执行, 如果有多个匹配上,就会顺序执行,形成一个 filter 调用链(底层可以使用一个数据结构搞定)

         3. 多个 filter 共同执行时,因为是一次 http 请求, 使用同一个request 对象

        4. 多个 filter 执行顺序,和 web.xml 配置顺序保持一致.

        5. chain.doFilter(req, resp)方法 将执行下一个过滤器的 doFilter 方法, 如果后面没有过滤器,则执行目标资源。

         6. 小结:注意执行过滤器链时, 顺序是(用前面的案例分析) Http请求-> A 过滤器dofilter()-> A 过滤器前置代码 -> A 过滤器 chain.doFilter() -> B 过滤器dofilter() -> B 过滤器前置代码 -> B过滤器 chain.doFilter() -> 目标文件 -> B过滤器后置代码-> A过滤器后置代码->返回给浏览器页面/数据

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

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

相关文章

OrangePi AIpro 快速上手初体验——接口、样例和目标检测

​ 一、 开发板简介 OrangePi AIpro开发板是香橙派联合华为精心打造的高性能 AI 开发板&#xff0c;其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算&#xff0c;可…

合约之间调用-如何实现函数静态调用?

合约之间的函数调用 EOA&#xff0c;external owned account&#xff0c;外部账号&#xff0c;例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条 合约间调用过程 调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合…

母亲的爱与妻子的爱,同为“爱“。不同感受!

母亲的爱与妻子的爱&#xff0c;虽然都是一个女人给予男人的爱&#xff0c;却有着本质的不同&#xff01; 天下父母对儿女的爱大多相同。在母亲眼中&#xff0c;儿女无论是多大年龄&#xff0c;无论你是否长大成人&#xff0c;也无论你做多大的官&#xff0c;有多么大的成就&am…

【深度学习】吸烟行为检测软件系统

往期文章列表&#xff1a; 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学…

KDD 2024|基于隐空间因果推断的微服务系统根因定位

简介&#xff1a;本文介绍了由清华大学、南开大学、eBay、微软、中国科学院计算机网络信息中心等单位共同合作的论文《基于隐空间因果推断的受限可观测性场景的微服务系统根因定位》。该论文已被KDD 2024会议录用。 论文标题&#xff1a;Microservice Root Cause Analysis Wit…

数据与结构——红黑树

目录 红黑树的概念 性质 结点的定义 插入 验证 查找 删除 红黑树与AVL树的比较 红黑树的概念 红黑树是一种自平衡二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff0c;其每个节点带有颜色属性&#xff0c;可以是红色或黑色。红黑树通过约束节点颜色…

盲盒小程序开发,为市场带来的新机遇

近年来&#xff0c;盲盒市场一直处于热门行业中&#xff0c;发展非常快速。在互联网的支持下&#xff0c;也衍生出了线上盲盒小程序&#xff0c;实现了线上线下双发展的态势。 盲盒小程序作为一种新的盲盒购物方式&#xff0c;受到了盲盒消费者的喜爱&#xff0c;为盲盒行业的…

Matlab 结构光相移法(单频多相)

文章目录 一、简介1、基于点的测距2、基于条纹的测距二、条纹编码2.1 二进制编码2.2相移法三、实现代码参考文献一、简介 在介绍相移法之前,我们需要先了解一下为啥会有相移法,了解了其来龙去脉,则更容易去应用它。 1、基于点的测距 首先我们从点的测距开始,这有点类似于立…

香港优才计划找中介是否是智商税,靠谱中介又该如何找?

关于香港优才计划的申请&#xff0c;找中介帮助还是自己DIY&#xff0c;网络上充斥的声音太多&#xff0c;对不了解的人来说&#xff0c;难以抉择的同时还怕上当受骗。 这其中很容易误导人的关键在于——信息差&#xff01; 今天这篇文章的目的就是想让大家看清一些中介和DIY…

2024-05-29 blue-VH-driver-对外接口的并行调用-设计与思考

摘要: VH的driver的对外接口, 要做到可以并行&#xff0c;也就是两个不同的线程&#xff0c;分别调用&#xff0c;不能互相阻塞。 本文记录对其的思考和设计。 上下文: 2024-05-28 blue-VH-driver-需求分析及问题分析-CSDN博客 2024-05-27 blue-vh-问题点-CSDN博客 2024-05…

【开发利器】使用OpenCV算子工作流高效开发

学习《人工智能应用软件开发》&#xff0c;学会所有OpenCV技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; OpenCV实验大师Python SDK 基于OpenCV实验大师v1.02版本提供的Python SDK 实现工作流导出与第三方应用集…

革新风暴来袭:报事报修系统小程序如何重塑报事报修体验?

随着数字化、智能化的发展&#xff0c;已经应用在我们日常生活和工作的方方面面。那么&#xff0c;你还在为物业报修而头疼吗&#xff1f;想象一下&#xff0c;家里的水管突然爆裂&#xff0c;你急忙联系物业&#xff0c;时常面临物业电话忙音、接听后才进行登记繁琐的报修单、…

Sytem.getenv的作用和意义介绍

Sytem.getenv的作用和意义介绍&#xff01;在实际的项目开发中&#xff0c;我们经常需要获取一些系统自身的环境变量&#xff0c;为此&#xff0c;java官方提供的这个系统环境变量&#xff0c;自带了一个方法&#xff0c;就可以直接拿到系统的环境变量值了。 下面是一个简单的…

一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)

随着摩尔定律的逐渐放缓&#xff0c;传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性&#xff0c;为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块&#xff0c;极大地提高了资源的利用率和系统的综合性能。 FPGA…

Python 之微信指数小程序数据抓取

Fiddler安装和设置 安装 Fiddler 安装包可以从这里获取&#xff0c;如果失效了可以自己网上找一个安装。 链接&#xff1a;https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取码&#xff1a;1znv 然后就是点击安装就好了&#xff0c;没什么好多说的。 启用…

NoSQL是什么?NoSQL数据库存在SQL注入攻击?

一、NoSQL是什么&#xff1f; NoSQL&#xff08;Not Only SQL&#xff09;是一种非关系型数据库的概念。与传统的关系型数据库不同&#xff0c;NoSQL数据库使用不同的数据模型来存储和检索数据。NOSQL数据库通常更适合处理大规模的非结构化和半结构化数据&#xff0c;且能够…

赛事赞助|威波力赞助2024年首届中国大学生跳绳锦标赛

2024年5月26日由厦门威波力品牌赞助的“2024年首届中国大学生跳绳锦标赛”在上海财经大学体育馆圆满落幕。作为本次大赛的赞助方之一&#xff0c;威波力为比赛全程提供支持&#xff0c;与大家一起见证了一场场精彩纷呈的比赛。 此次比赛&#xff0c;昆明学院的李中芸&#xff0…

【YOLOv5/v7改进系列】引入AKConv——即插即用的卷积块

一、导言 介绍了一种名为AKConv&#xff08;Alterable Kernel Convolution&#xff09;的新型卷积操作&#xff0c;旨在解决标准卷积操作存在的两个根本性问题。首先&#xff0c;标准卷积操作受限于局部窗口&#xff0c;无法捕获来自其他位置的信息&#xff0c;且其采样形状固…

【Java SE】 String、StringBuff和StringBuilder

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 字符串不可变性1.1 设计不可变1.2 修改字符串创建新对象1.3 为什么字符串不可变1.4 String类设计不可变的…