Filter过滤器的生命周期和工作原理
一、Filter是什么?
Filter:过滤器,它需要实现javax.servlet.Filter接口。Filter是过滤器,与拦截器不同。过滤器是先于与之相关的Servlet和JSP运行在服务器上。
通过配置web.xml文件声明它过滤的路径:
<filter> <filter-name>XXXFilter</filter-name> <filter-class> com.XXX.XXXFilter</filter-class>
</filter> <filter-mapping> <filter-name>XXXFilter</filter-name> <url-pattern>*.action</url-pattern>
</filter-mapping>
过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
- 以常规的方式调用资源(即,调用servlet或JSP页面)。
- 利用修改过的请求信息调用资源。
- 调用资源,但在发送响应到客户机前对其进行修改。
- 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
二、Filter的生命周期
程序启动调用Filter的init()方法(永远只调用一次),程序停止调用Filter的destroy()方法(永远只调用一次),doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,不管第几次,都在调用doGet(),doPost()方法之前)。
三、Servlet中过滤器的工作原理
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。
四、过滤器与拦截器的不同之处
既然之前提到了拦截器,那么我们来说说过滤器与拦截器有何不同:
Filter | interceptor | |
---|---|---|
多个的执行顺序 | 根据filter mapping配置的先后顺序 | 按照配置的顺序,但是可以通过order控制顺序 |
规范 | 在Servlet规范中定义的,是Servlet容器支持的 | Spring容器内的,是Spring框架支持的。 |
使用范围 | 只能用于Web程序中 | 既可以用于Web程序,也可以用于Application、Swing程序中。 |
深度 | Filter在只在Servlet前后起作用 | 拦截器能够深入到方法前后、异常抛出前后等 |
总结:两者的本质区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。
参考:
1.Listener,Filter,Servlet执行顺序和生命周期
2.filter过滤器 和拦截器的区别
Filter过滤器的生命周期和工作原理相关推荐
- Servlet生命周期与工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- servlet工作原理_Servlet 生命周期、工作原理
Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Ser ...
- Servlet 生命周期、工作原理
摘自:http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.htm Servllet 生命周期:Servlet 加载--->实例化-- ...
- Servlet的生命周期和工作原理
原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法 ...
- Filter过滤器的生命周期
提起来生命周期,不难想出,就是从被创建到别销毁,是的,在Filter过滤器中就是这样的简单三步,首先是init创建,只执行一个,用于加载资源,然后doFilter处理过滤,每一次请求被拦截资源时会执行 ...
- 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例
文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...
- 教你理解微信小程序的生命周期和运行原理
写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...
- 04_过滤器Filter_04_Filter生命周期
[Filter生命周期] [init(FilterConfig filterConfig) throws ServletException] *和Servlet程序类似,Filter的创建和销毁由we ...
- Servlet生命周期、工作步骤
Servlet的生命周期分为五个阶段:加载,创建,初始化,处理客户请求,卸载. 另外简单说下Servlet工作步骤. 加载 创建 初始化 处理客户请求 卸载 加载:容器通过类加载器使用Servlet类 ...
最新文章
- AJAX框架构成设计,基于Ajax的Web框架设计与实现
- pytorch 入门(二) cnn 手写数字识别
- Windows 钩子的使用
- zigbee bind, ZDO_RegisterForZDOMsg, zcl_registerForMsg
- 树莓派:挂载网络存储网络硬盘
- 深入理解JavaScript系列(32):设计模式之观察者模式
- JavaScript生成指定范围内的随机数
- Hive insert into小文件问题
- 20172329《程序设计与数据结构》实验一:线性结构实验报告
- pandas dataframe 如何把带有千位分隔符的字符串转化为浮点数
- lol最克制诺手的英雄_LOL“英雄恐惧症”,当你上单遇到诺手时,你会用什么英雄对线...
- 网易云音乐api、QQ音乐api、黑马电商api、小说api、漫画api接口
- SVM-支持向量机算法概述
- matlab信号探测,雷达信号检测matlab程序
- php比较asc,php小技巧之过滤ascii控制字符
- iPhone13再现粉屏问题,同时出现闪退/卡顿/重启?
- org.testng.TestNGException: TestNG by default disables loading DTD from unsecured Urls.问题解决
- ToolBar 修改菜单字体和颜色
- 1. 大型网站架构演化
- Type-challenges题目(第三部分)
热门文章
- CPU Cache 高速缓存
- 分类又叫类目或者类别
- 用友t3找不到sql服务器,用友T3登录界面服务器那一行是空白的?
- 错误 101 (net::ERR_CONNECTION_RESET):连接已重置。
- 【opencv】(11) 背景建模,帧差法、混合高斯模型,实战:行人检测,附python完整代码和数据集
- 龙教版微型计算机系统,2017龙教版七年级信息技术教案.doc
- 保险企业如何做好个人信息保护
- codeblocks使用教程
- 软件工程:“银弹”论
- 服务器 交换机的维护,华为交换机系统维护与调试命令