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参数说明
编写简单一个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.过滤时遵守先进先出
过滤器的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
<%
效果
image.png
案例二【粗粒度权限过滤】
只有文字描述步骤
游客、会员、管理员三个粒度
1.创建一个Fileter,过滤会员下的资源访问,这是保安1号 ,doFilter里检查session中权限标记,第一道检查工序,不是管理员=> 放行,第二道检查工序,不是会员=> 打回到登录/注册页面,如果是会员就放行!
2.创建一个Fileter,过滤管理员下的资源访问,这是保安2号 ,doFilter里检查session中权限标记,查看是不是管理员,不是管理员=>打回到登录/注册页面,如果是管理员就放行!
案例三【解决全站字符乱码(POST和GET中文编码问题)】
工具类
package
只要配置了这个过滤器 即可使用
<
案例四【页面静态化 改日补充】
filter过滤器_JavaWeb之 Filter(过滤器)相关推荐
- java filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...
- java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密
自动登录问题和MD5加密 前面已经完成了Filter的自动登录,但是有问题,我们在web.xml中Filter的url-mapping中配置的规则是/*, 也就是这个网站的所有请求都拦截.这肯定不合适 ...
- javaweb过滤器_JavaWeb技术(2):SpringMVC中的Filter
Filter顾名思义就是过滤器,在JavaWeb体系中,他在服务端,卡在请求/响应与Servlet之间做一些操作: 过滤器相关的类的顶层接口如下,以下方法都由Web容器自动调用: package 你可 ...
- ITK:观察过滤器Watch A Filter
ITK:观察过滤器Watch A Filter 内容提要 C++实现代码 内容提要 本示例演示了如何观察过滤器内部发生的情况. C++实现代码 #include "itkImage.h&qu ...
- methods vue 使用过滤器_Vue.js中过滤器(filter)的使用
Vue.js 过滤器的基本使用(filter) vue中的过滤器分为两种:局部过滤器和全局过滤器 1.定义无参全局过滤器 Vue.filter('msgFormat', function(msg) { ...
- es filter过滤器_Elasticsearch 之 Filter 与 Query 有啥不同?
今天来了解下 Elasticsearch(以下简称 ES) 中的 Query 和 Filter. 在 ES 中,提供了 Query 和 Filter 两种搜索: Query Context:会对搜索进 ...
- java filter教程_Java Web Filter 过滤器学习教程(推荐)
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- Redis如何实现刷抖音不重复-布隆过滤器(Bloom Filter)
刷抖音的时候是否曾想过,我们刷过的视频很难在重复刷到那么它到底是如何实现的呢? 如果说我们每刷一个视频并且把视频id和用户的id组合成一条数据保存到数据库中每次推荐视频的时候都去数据检测是否已经刷过了 ...
- 解决方案:布隆过滤器(Bloom Filter)
解决方案:布隆过滤器(Bloom Filter) 关键词 组成(一个很长的二进制向量 + 一系列随机映射函数) 快速 且 空间效率高 的判断一个元素是否属于一个集合 redis缓存穿透(判断 数据库 ...
最新文章
- 解决margin-top没有效果
- Python趣味编程---Python也会讲笑话
- 数据结构---平衡二叉树
- TabLayout中的Tab.setCustomView左右有空隙,TabLayout下划线间隙设置,下划线长度设置
- android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...
- 通过Intel XDK编写跨平台app(二)
- mysql执行文件脚本文件_MySQL执行外部sql脚本文件的命令
- 怎样查找共享文件_计算机操作系统学习笔记(五):文件管理
- 2017二级c语言题库贴吧,2017二级c语言题库
- (ChibiOS )嵌入式操作系统 与 (OSAL)操作系统抽象层
- Hadoop常用端口号汇总
- 11种免费获取SSL证书的方式
- java 连续数字_java 如何判断数字是否连续?求大神解答
- html中搜索框提示语,请输入您要搜索的内容(自定义Win10搜索框提示语的技巧)...
- 蓝桥杯_单片机_入门基础知识(七)_DS18b20
- 服务器网卡相关知识点
- 永恒之蓝复现(win7/2008)
- 大学创业是一种什么样的体验(一)
- iOS WKUserContentController
- 2018平安科技春季校招后台开发人员面试经历
热门文章
- c语言中 d 1是啥意思,空开D/C是什么意思?终于有人把它说清楚了!
- Spring AOP两种使用方式以及如何使用解析
- Hive的使用之控制台
- mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数
- gitlab ci mysql_php-Gitlab CI:在阶段之间保留MySQL数据
- php二分查找算法时间复杂度,一个运用二分查找算法的程序的时间复杂度是什么...
- 启动activemq_「Java」 - SpringBoot amp; ActiveMQ
- [转载] python之路《第二篇》Python基本数据类型
- Java即时类| plus()方法与示例
- stack示例_C.示例中的Stack.CopyTo()方法