一、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页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:

  1. 以常规的方式调用资源(即,调用servlet或JSP页面)。
  2. 利用修改过的请求信息调用资源。
  3. 调用资源,但在发送响应到客户机前对其进行修改。
  4. 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

二、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过滤器的生命周期和工作原理相关推荐

  1. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  2. servlet工作原理_Servlet 生命周期、工作原理

    Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Ser ...

  3. Servlet 生命周期、工作原理

    摘自:http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.htm Servllet 生命周期:Servlet 加载--->实例化-- ...

  4. Servlet的生命周期和工作原理

    原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法         ...

  5. Filter过滤器的生命周期

    提起来生命周期,不难想出,就是从被创建到别销毁,是的,在Filter过滤器中就是这样的简单三步,首先是init创建,只执行一个,用于加载资源,然后doFilter处理过滤,每一次请求被拦截资源时会执行 ...

  6. 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例

    文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...

  7. 教你理解微信小程序的生命周期和运行原理

    写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...

  8. 04_过滤器Filter_04_Filter生命周期

    [Filter生命周期] [init(FilterConfig filterConfig) throws ServletException] *和Servlet程序类似,Filter的创建和销毁由we ...

  9. Servlet生命周期、工作步骤

    Servlet的生命周期分为五个阶段:加载,创建,初始化,处理客户请求,卸载. 另外简单说下Servlet工作步骤. 加载 创建 初始化 处理客户请求 卸载 加载:容器通过类加载器使用Servlet类 ...

最新文章

  1. AJAX框架构成设计,基于Ajax的Web框架设计与实现
  2. pytorch 入门(二) cnn 手写数字识别
  3. Windows 钩子的使用
  4. zigbee bind, ZDO_RegisterForZDOMsg, zcl_registerForMsg
  5. 树莓派:挂载网络存储网络硬盘
  6. 深入理解JavaScript系列(32):设计模式之观察者模式
  7. JavaScript生成指定范围内的随机数
  8. Hive insert into小文件问题
  9. 20172329《程序设计与数据结构》实验一:线性结构实验报告
  10. pandas dataframe 如何把带有千位分隔符的字符串转化为浮点数
  11. lol最克制诺手的英雄_LOL“英雄恐惧症”,当你上单遇到诺手时,你会用什么英雄对线...
  12. 网易云音乐api、QQ音乐api、黑马电商api、小说api、漫画api接口
  13. SVM-支持向量机算法概述
  14. matlab信号探测,雷达信号检测matlab程序
  15. php比较asc,php小技巧之过滤ascii控制字符
  16. iPhone13再现粉屏问题,同时出现闪退/卡顿/重启?
  17. org.testng.TestNGException: TestNG by default disables loading DTD from unsecured Urls.问题解决
  18. ToolBar 修改菜单字体和颜色
  19. 1. 大型网站架构演化
  20. Type-challenges题目(第三部分)

热门文章

  1. CPU Cache 高速缓存
  2. 分类又叫类目或者类别
  3. 用友t3找不到sql服务器,用友T3登录界面服务器那一行是空白的?
  4. 错误 101 (net::ERR_CONNECTION_RESET):连接已重置。
  5. 【opencv】(11) 背景建模,帧差法、混合高斯模型,实战:行人检测,附python完整代码和数据集
  6. 龙教版微型计算机系统,2017龙教版七年级信息技术教案.doc
  7. 保险企业如何做好个人信息保护
  8. codeblocks使用教程
  9. 软件工程:“银弹”论
  10. 服务器 交换机的维护,华为交换机系统维护与调试命令