Cheug's Blog

当前位置:网站首页 / JAVA / 正文

Filter过滤器

2019-08-01 / JAVA / 1100 次围观 / 0 次吐槽 /

过滤器介绍

  1. Filter是servlet2.3后增加的一个新功能

  2. Servlet规范中三个技术 Servlet Listener Filter

   3.在javaEE中定义了一个接口javax.servlet.Filter来描述过滤器

   4.通过Filter可以拦截访问web资源的请求与响应操作

   5.web开发通过Filter技术,对web服务器管理的所有web资源:例如jsp,servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能,例如实现url级别的权限访问控制,过滤敏感词汇,压缩响应信息等一些高级功能。


Filter API介绍

Filter 是javax.servlet包下的一个接口主要有以下三个方法

J7M$YIK)EDTLZHZF_F$2TAH.png

Filter的使用

创建一个类实现javax.servlet.Filter接口并实现方法

image.png

image.png

注意:chain.doFilter(request,response);是放行访问资源,如果不写,则无法访问到资源

FilterChain功能介绍

        FilterChain是servlet容器开发人员提供的对象,它提供了某一资源的已过滤请求调用链的视图。

过滤器使用FilterChain调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源

Filter链

        多个Filter对同一个资源进行了拦截,那么当我们在开始的Filter中执行chain.doFilter(request,response)时,是访问下一个Filter,直到最后一个Filter执行时,它后面没有了Filter,才会访问web资源。

多个Filter的访问顺序问题

如果有多个Filter形成Filter链,那么它们的执行顺序取决于<filter-mapping>在web.xml文件中配置的先后顺序。

过滤器生命周期

        当服务器启动,会创建Filter对象,并调用init方法,只调用一次。

        当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法。

        当服务器关闭时,会调用Filter的destroy方法来进行销毁操作。

FilterConfig介绍

        在Filter中的init方法上有一个参数叫FilterConfig是Filter的配置对象,它的作用:

            1.获取Filter的名称

            2.获取初始化参数

            3.获取ServletContext对象

FilterConfig常用API

image.png

获取web.xml中配置的Filter初始化参数

image.png

image.png

Filter配置详解

Filter基本配置格式介绍

  <filter>
  	<filter-name>Filter名称</filter-name>
  	<filter-class>Filter类全名</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>Filter名称</filter-name>
  	<url-pattern>映射路径</url-pattern>
  </filter-mapping>


url-pattern配置

        1.完全匹配

                    要求必须以“/”开始

        2.目录匹配

                    要求必须以“/”开始,以*结束

        3.扩展名匹配

                    不能以“/”开始,以*.xxx结束


servlet-name配置

        针对于servlet拦截的配置<servlet-name>配置

        在filter中它的配置项上有一个标签

        <servlet-name>它用于设置当前filter拦截哪一个servlet

        是通过servlet的name来确定的


dispatcher配置

        可以取的值有 request  forward error include 

        它的作用是:当以什么方式去访问web资源时,进行拦截操作。

        1.reques 当是从浏览器直接访问资源,或者重定向到某个资源时进行拦截方式配置的   它也是默认值

        2.forward它描述的是请求转发的拦截方式配置

        3.error 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用,除此之外,过滤器不会被调用。

        4.include 如果目标资源是通过requestdispatchar的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

image.png


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.