Filter如何工作

作者: 紫霞等了至尊宝五百年 | 来源:发表于2017-12-14 21:51 被阅读32次

在 web.xml 文件中通过<filter>和<filter-mapping>标签组合对编写的filter类进行注册,并设置它所能拦截的资源

实际上,Filter可以完成与Serlvlet一样的工作,甚至比Servlet使用起来更加灵活,因为它除了提供了request和response对象外,还提供了一个FiterChain链对象,他可以让我们更加灵活地控制请求的流转.


Filter相关的类结构图

在Tomcat中,FilterConfig和FilterChain的实现类分别是从ApplicationFilterConfig和ApplcationFIterChian,而Fitler
的实现类由用户自定义,只要实现了FIlter接口中定义的三个接口即可,这三个接口与在Servlet中的类似.只不过还有一个AlllicationFilterChain类,此类可以将多个Filter串联成链.
详细看下Filter中的三个接口方法

  • init<FilterConfig>:初始化接口,在用户自定义的Filter初始化时被调用,它与Servlet的init方法作用一致,FilterCongfig与ServletConfig也类似,除了都能取到容器的环境类ServletContext对象之外,还能获取在<filter>下配置的<init-param>参数值
  • doFilter(ServletRequest,ServResponse,FilterChain):在每个用户的请求进来时都会调用此方法,并在Servlet的service方法前被调用,而FilterChjain就代表当前的整个请求链,所以通过调用doFilter可以将请求继续传递下去.若想拦截此请求,可不调用doFilter,那么该请求就直接反悔了,所以Filter是一种责任链设计模式.
  • destroy:当Filter对象被销毁时,该方法被调用.注意:当Web容器调用该方法后,容器就会再调用一次doFilter方法.

Filter类的核心哈市传递的FilterChain对象,该对象保存了到最终Servlet对象的所有Filter对象,这些对象都保存在ApplicationFilterChain对象的filters数组中.在FilterChain链上每执行一个Filter对象,数组的当前计数加一,直到计数等于数组的长度,当FilterChain上所有的Filter对象执行完成后,就会执行最终的Servl.所以在ApplicationFilterChain对象中会持有Servle对象的引用


Filter执行时序图

相关文章

  • Filter如何工作

    在 web.xml 文件中通过标签组合对编写的filter类进行...

  • Java Web之Filter

    本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...

  • Python高阶函数filter的用法

    filter在英语里的意思正是过滤,那我们看看在Python3中filter如何使用?下面是filter函数的__...

  • css如何将网页页面置灰?

    涉及到知识点:filter属性、grayscale(100%)函数、filter: gray;、 如何将网页整体置...

  • Filter 过滤器

    Filter过滤器 是什么 Filter过滤器 有什么用 拦截 数据处理 统一控制 Filter过滤器 如何用 使...

  • Filter过滤器源码解析与使用

    Filter类使用介绍 Filter类如何使用 Filter是一个抽象的类,在使用方面上你可以选择匿名类声明,也可...

  • Java三大器之过滤器(Filter)的工作原理和代码演示

    课程地址:Java三大器之过滤器(Filter)的工作原理和代码演示 一、Filter简介 Filter也称之为过...

  • 图文并茂,卡曼滤波

    ​卡尔曼滤波是如何工作? 看图说话! 我务必向大家介绍卡尔曼滤波器(Kalman Filter),因为它之所能, ...

  • Zuul 介绍

    Zuul是Netflix提供一个网管服务。 Zuul是如何工作 Zuul是一些连续filter的集合。Zuul f...

  • Spring Boot filter

    在Spring Boot中自定义filter 本文我们将会讲解如何在Spring Boot中自定义filter并指...

网友评论

    本文标题:Filter如何工作

    本文链接:https://www.haomeiwen.com/subject/lqmlwxtx.html