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.mzph.cn/pingmian/18951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心智能体平台:快来创建你的Java学习小助理,全方位辅助学习

文章目录 一、文心智能体平台1.1平台介绍1.2智能体介绍 二、智能体创建三、体验与总结 一、文心智能体平台 文心智能体平台是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类…

3D模型三角面转四角面操作指南---模大狮模型网

在3D建模的过程中&#xff0c;三角面(Triangles)和四角面(Quads)是两种常见的多边形类型。虽然三角面在渲染速度和计算效率上有其优势&#xff0c;但四角面在模型编辑和纹理映射上通常更为方便。因此&#xff0c;将三角面转换为四角面是建模过程中常见的需求。 一、选择合适的建…

【数值计算方法】雅可比解线性方程

废话少说&#xff0c;直接上干货。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define MaxSize 100 double A[MaxSize][MaxSize]; //系数矩阵 double B[MaxSize]; //系数矩阵 double C[MaxSize][MaxSize]; //去对角线矩阵 double …

window自动启动bat文件

开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0c;可选择所需用户&#xff0c;点击应用&#xff0c;输入远程的密码即可 开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0…

web题解 Easy_SQLi or 雏形系统 (解题方法思想)

1.Easy_SQLi 1&#xff09;打开题目环境&#xff0c;如下是一个类似弱密码的格式&#xff0c;但是它又说是sql&#xff0c;还是按sql注入来 2&#xff09;.这里我尝试判断它的注入类型&#xff0c;但是一只不对&#xff0c;我便想着用万能密码试试&#xff0c;怎料直接登录成功…

STL库--priority_queue

目录 priority_queue定义 prority_queue容器内元素的访问 priority_queue()常用函数实例解析 priority_queue内元素优先级的设置 priority_queue的常见用途 priority_queue又称为优先队列&#xff0c;其底层是用堆来进行实现的。在优先队列中&#xff0c;队首元素一定是当…

全文最详细的生产管理完整方案!那些让人头疼的生产管理难题及解决方法!

什么是生产管理系统&#xff1f;为何生产管理系统在企业管理中如此重要&#xff1f;生产管理系统的核心模块包括哪些&#xff1f;为何企业在生产管理系统中常常遭遇项目信息碎片化、任务分配和跟踪困难等痛点&#xff1f;又该如何针对生产管理痛点进行优化&#xff1f; 本文40…

汽车大灯中擎耀智能控制器在车灯智能化配置下的创新与分析

随着科技的飞速发展&#xff0c;汽车工业也在不断地进行着革新。其中&#xff0c;车灯作为汽车的重要组成部分&#xff0c;其智能化配置已经成为汽车行业的一大趋势。这种趋势不仅为消费者带来了更加安全、便捷的驾驶体验&#xff0c;同时也为商家提供了丰富的商业机会。汽车工…

「异步魔法:Python数据库交互的革命」(二)

哈喽&#xff0c;我是阿佑&#xff0c;上篇文章带领了大家跨入的异步魔法的大门——Python数据库交互&#xff0c;一场魔法与技术的奇幻之旅&#xff01; 从基础概念到DB-API&#xff0c;再到ORM的高级魔法&#xff0c;我们一步步揭开了数据库操作的神秘面纱。SQLAlchemy和Djan…

【2024最新华为OD-C卷试题汇总】披萨大作战 (100分) - 支持在线评测+三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…

自动化测试实践:揭秘WebSocket在接口测试中的应用

如何写接口自动化&#xff1f;这个问题&#xff0c;但凡涉足过自动化测试的人员都能娓娓道来。Requests、urlib、jmeter、curl等等&#xff0c;不在话下。那么&#xff0c;如何获取接口的url、参数、响应等信息呢&#xff1f;&#xff01;答案就更是随口而出&#xff1a;看接口…

深入学习 torch.distributions

0. 引言 前几天分几篇博文精细地讲述了《von Mises-Fisher 分布》, 以及相应的 PyTorch 实现《von Mises-Fisher Distribution (代码解析)》, 其中以 Uniform 分布为例简要介绍了 torch.distributions 包的用法. 本以为已经可以了, 但这两天看到论文 The Power Spherical dist…

microk8s 报错tls: failed to verify certificate: x509:

问题&#xff1a; ssh命令出现如下图所示 输入任何microk8s的容器命令几乎都是x509报错 kubectl get pods -ALL 原因&#xff1a; 证书过期 相关文档&#xff1a; MicroK8s - 服务和端口 Microk8S v1.24 - refresh-certs 似乎无法刷新证书 问题 #3241 规范/microk8s Git…

【Linux系统】--- Linux内核日志等级详解

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux系统】--- Linux内核日志等级详解…

小白跟做江科大32单片机之LED流水灯

1.复制下面地址新建的工程&#xff0c;改名为3-2 LED流水灯 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2213929…

Opencv图像处理技术(图像轮廓)

1图像轮廓概念&#xff1a; 图像轮廓是指图像中连续的像素边界&#xff0c;这些边界通常代表了图像中的物体或者物体的边缘。在数字图像处理中&#xff0c;轮廓是由相同像素值组成的曲线&#xff0c;它们连接相同的颜色或灰度值&#xff0c;并且具有连续性。轮廓可以用来描述和…

CAD石墨烯生成器 V1.0 渊鱼

插件介绍 CAD石墨烯生成器插件可用于在AutoCAD软件内参数化建立石墨烯几何模型。插件建立石墨烯的球棍模型&#xff0c;可控制模型的尺寸、碳原子环的尺寸、原子直径、化学键直径&#xff0c;并可控制模型的起伏形态。插件生成的实体模型可进行修改或绘图渲染&#xff0c;用于…

做视频号小店和达人对接的好,爆单少不了!

大家好&#xff0c;我是喷火龙。 目前&#xff0c;视频号是没有什么自然流量的&#xff0c;所以&#xff0c;想要出单、爆单的话&#xff0c;靠达人带货的方式才是最可靠的&#xff0c;靠达人带货是肯定要对接达人&#xff0c;并和达人沟通带货的。 下面给大家讲一讲应该怎么…

python Z-score标准化

python Z-score标准化 Zscore标准化sklearn库实现Z-score标准化手动实现Z-score标准化 Zscore标准化 Z-score标准化&#xff08;也称为标准差标准化&#xff09;是一种常见的数据标准化方法&#xff0c;它将数据集中的每个特征的值转换为一个新的尺度&#xff0c;使得转化后的…

三十五岁零基础转行成为AI大模型开发者怎么样呢?

以下从3个方面帮大家分析&#xff1a; 35岁转行会不会太晚&#xff1f;零基础学习AI大模型开发能不能学会&#xff1f;AI大模型开发行业前景如何&#xff0c;学完后能不能找到好工作&#xff1f; 一、35岁转行会不会太晚&#xff1f; 35岁正处于人生的黄金时期&#xff0c;拥…