filter过滤器_JavaWeb之 Filter(过滤器)

FIlter作用

过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

FIlter实现步骤

1.创建AFilter类实现javax.servlet.Filter接口

2.添加@WebFilter("/*")注解或者添加web.xml配置

<

3.已经完成了

4.@WebFilter参数说明

484d6c9e63dd5db7902a23250414be75.png

编写简单一个Filter

package 

FIlter说明

Filter是单例的!void init(FilterConfig)
创建之后,马上执行;Filter会在服务器启动时就创建!
FilterConfig-->与ServletConfig相似
  • 获取初始化参数:getInitParameter()
  • 获取过滤器名称:getFilterName()
  • 获取appliction:getServletContext()

void destory()
销毁之前执行!在服务器关闭时销毁void doFilter(ServletRequest,ServletResponse,FilterChain)
每次过滤时都会执行
FilterChain

  • doFilter(ServletRequest, ServletResponse):放行!
    执行目标资源就相当于调用了目标Servlet的service()方法!,或是执行下一个过滤器!如果没有下一个过滤器那么执行的是目标资源,如果有,那么就执行下一个过滤器!

多个过滤器执行顺序

1.<filter-mapping>的配置顺序决定了过滤器的执行顺序!

2.过滤时遵守先进先出

3d762a16f8d15a5cbc3e8019b8f922ff.png

过滤器的N种拦截方式

<

应用场景

执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行,只是在目标资源执行之前做一些准备工作
通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用
在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理

设置目标资源

/:所有资源/xx/xx/ :xx/xx/下的所有资源
/aaa/bbb/ccc/Servlet:具体AServlet

案例

案例一【分ip统计网站的访问次数】

分析

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了。
我们这个过滤器不做拦截操作!因为我们只是用来做统计的。
用什么东西来装载统计的数据。Map<String,Integer>
整个网站只需要一个Map即可!
Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并只在到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!)
Map需要在Filter中用来保存数据
Map需要在页面使用,打印Map中的数据

代码实现

Listener

package 

Filter

package 

jsp

<%

效果

b508e192bebec39af487c21609cb73f6.png


image.png

案例二【粗粒度权限过滤】

只有文字描述步骤

游客、会员、管理员三个粒度

1.创建一个Fileter,过滤会员下的资源访问,这是保安1号 ,doFilter里检查session中权限标记,第一道检查工序,不是管理员=> 放行,第二道检查工序,不是会员=> 打回到登录/注册页面,如果是会员就放行!

2.创建一个Fileter,过滤管理员下的资源访问,这是保安2号 ,doFilter里检查session中权限标记,查看是不是管理员,不是管理员=>打回到登录/注册页面,如果是管理员就放行!

案例三【解决全站字符乱码(POST和GET中文编码问题)】

工具类

package 

只要配置了这个过滤器 即可使用

<

案例四【页面静态化 改日补充】

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

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

相关文章

mysql python连接时、指定的ip地址被转接了_pythonmysql.connector模块使用了错误的IP地址...

我在使用python时遇到了一个问题mysql.connector脚本中的模块。当我从脚本运行连接到运行mysql v8的docker容器时&#xff0c;它试图连接到错误的IP地址。下面是示例函数&#xff1a;import mysql.connectordef connect():db mysql.connector.connect(host"172.17.0.2&qu…

css两张图片怎么合在一起_web前端入门到实战:纯CSS实现两个球相交的粘粘效果...

这是一个纯粹利用CSS所做出来的效果&#xff0c;这个效果说穿了就是一个图像处理的原理&#xff0c;做法跟Photoshop里头的几乎一模一样&#xff0c;只是一个用图层和色版来制作&#xff0c;一个则是用CSS&#xff08;把div当成图层思考就好了&#xff09;。从PhotoShop开始一开…

java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译

Java 9 引入了 aot 编译方式&#xff0c;能够将 class 文件直接编译成可执行二进制文件。目前 Java 9 的 early access 版本已经提供了编译工具&#xff0c;让我们来看看它的功能吧。注意&#xff1a;按照 JEP 295 描述&#xff0c;目前版本的 AOT&#xff0c;仅支持 64 位 Lin…

mysql semisync 恢复_mysql半同步复制(semi_sync_replication)搭建及使用

mysql半同步复制(semi_sync_replication)搭建及使用google为mysql开发了一个补丁一个基于半同步的补丁&#xff0c;应用与mysql5.0。回来mysql打上了该补丁&#xff0c;并在5.5版本中使用。半同步复制的理念是什么呢&#xff1f;在数据库更改操作执行前&#xff0c;确保更改操作…

python怎么做回归分析_如何在Python中进行二维回归分析?

这是使用scipy.optimize.curve_fit拟合表面的示例Python代码,它使原始数据生成3D散点图,对错误进行3D散点图绘制,绘制表面图和轮廓图.更改它以使用您自己的数据和功能,您应该已完成. import numpy, scipy import scipy.optimize import matplotlib from mpl_toolkits.mplot3d i…

友元关系可以继承_私生子也有继承权!非婚生子女的继承关系如何认定?

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供…

mysql100多个字段如何优化_MySQL 调优/优化的 100 个建议

MySQL是一个强大的开源数据库。随着MySQL上的应用越来越多&#xff0c;MySQL逐渐遇到了瓶颈。这里提供 101 条优化 MySQL 的建议。有些技巧适合特定的安装环境&#xff0c;但是思路是相通的。我已经将它们分成了几类以帮助你理解。MySQL监控MySQL服务器硬件和OS(操作系统)调优&…

python时间序列预测不连续怎么办_python – 不连续的时间序列在x轴上绘制日期

我获得了几个月的数据,但在几个月之间缺失了.如果我将整个数据集绘制在一个绘图中(其间有很多空白空间),这看起来很奇怪. 我写了一个小例子脚本来展示它是如何工作的(基于&#xff1a; Python/Matplotlib – Is there a way to make a discontinuous axis?) 问题&#xff1a;我…

普罗米修斯监控java项目_java学到什么程度可以出去实习?

把基础的知识学完&#xff0c;然后再学个框架&#xff0c;比如常见的SSH&#xff0c;SSM之类的&#xff0c;自己能用这个框架做个简单的项目&#xff0c;就可以了简单的来说就是把下方的视频教程学完就可以找工作了&#xff08;需要完整的资料可以找up&#xff09;Java零基础初…

mysql中 唯一约束的关键字是_mysql的约束

在mysql设计表中,有个概念叫做约束什么是约束约束英文&#xff1a;constraint约束实际上就是表中数据的限制条件约束种类mysql的约束大概分为以下几种:非空约束(not null)唯一性约束(unique)主键约束(primary key) PK外键约束(foreign key) FK检查约束(目前MySQL不支持、Oracle…

python 容器类型_Python容器类型公共方法总结

以下公共方法支持列表&#xff0c;元组&#xff0c;字典&#xff0c;字符串。 内置函数 Python 包含了以下内置函数&#xff1a; 函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 max(item) 返回容器中元素最大值 如果是字典&#xff0c;只针对…

叉乘点乘混合运算公式_小学36年级必须掌握的数学公式和概念口诀,替孩子收藏一下!...

小学数学需要记住的知识点还是比较多的&#xff0c;看到这些知识点&#xff0c;很多孩子都觉得枯燥&#xff0c;不愿意用心去记。如果我们把一种新的、有趣的记忆方法教给孩子&#xff0c;孩子也会变得有兴趣&#xff0c;因为兴趣是最好的老师。一、20以内进位加法看大数&#…

python图像数独_Python图像识别+KNN求解数独的实现

Python-opencvKNN求解数独最近一直在玩数独&#xff0c;突发奇想实现图像识别求解数独&#xff0c;输入到输出平均需要0.5s。整体思路大概就是识别出图中数字生成list&#xff0c;然后求解。输入输出demo数独采用的是微软自带的Microsoft sudoku软件随便截取的图像&#xff0c;…

上位机与1200组态步骤_西门子1200的HSC的应用实例!

高速计数器寻址CPU 将每个高速计数器的测量值&#xff0c;存储在输入过程映像区内&#xff0c;数据类型为 32 位双整型有符号数&#xff0c;用户可以在设备组态中修改这些存储地址&#xff0c;在程序中可直接访问这些地址&#xff0c;但由于过程映像区受扫描周期影响&#xff0…

cmd代码表白_手把手教你把Python代码转成exe

【文末有福利】很多刚入门的盆友都有疑惑怎么把Python代码转成可执行的exe&#xff1f;&#xff0c;这里行哥统一解决一下这个问题1.在cmd里安装pyintsaller包2.在cmd里输入打包成exe的命令3.问题总结4. pyintsaller --help5. end1.在cmd里安装pyintsaller包第一步安装将Python…

searchview 点击后被覆盖_03实战Jacoco统计代码覆盖

本篇内容主要介绍&#xff1a;在gradle项目中添加jacoco来了解工程的代码覆盖情况。自动化的统计代码覆盖情况&#xff0c;有助于将焦点问题可视化&#xff0c;从而决定什么时候采取什么动作进行改进。Jacoco可以方面的添加在测试执结束&#xff0c;进行代码覆盖率的统计。如果…

电脑功耗软件_台式电脑配置详解!

近期有许多做设计的朋友问我&#xff0c;怎么配一台工作用的电脑&#xff0c;今天就给大家介绍一下电脑的各个组成部分。电脑核心配置&#xff0c;一般指CPU、主板、显卡三大件&#xff0c;一般笔记本电脑不需要考虑主板&#xff0c;只需考虑CPU和显卡两大件。1.CPU的选择现在的…

docker mysql优势_前端使用docker有什么优势呢?

那么如果使用docker有什么优势呢&#xff1f;你觉得docker没啥用&#xff0c;自然是因为你没遇到这样的场景&#xff0c;所以就算强行上了docker&#xff0c;也会觉得非常别扭。想了想前端用docker好像确实不是非常必要&#xff0c;npm build以后出来一堆静态文件&#xff0c;扔…

ios python3.0编程软件_ios编程软件-7款学习Python编程的iPhone/iPad应用

Python部落组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发 Python是一种极受欢迎的编程语言&#xff0c;无论你是为机器人还是树霉派编码&#xff0c;都可以使用Python&#xff0e;想学习这门语言&#xff1f;这&#xff17;个APP会对你有帮助&#xff1a; Pythonista 3: 这…

spring定时器突然不执行了_非标自动化设备之PLC定时器的时间和程序扫描周期

扫描周期是PLC本身执行指令时的周转时间。PLC执行指令按梯形图是从左向右&#xff0c;从上到下执行。每执行一遍就顺便扫描一遍所有元件状态并按指令执行相应动作。这个是需要时间吧&#xff0c;把这个时间叫扫描周期。并如此无限循环下去。当然扫描周期越短&#xff0c;PLC性能…