美文网首页
JavaWeb之Filter过滤器

JavaWeb之Filter过滤器

作者: 指间Hrc | 来源:发表于2019-01-05 10:43 被阅读26次

    概念

    1、JavaWeb 的一个重要组件,可以对发送到 Servlet 的请求进行拦截,并对响应也进行拦截

    2、Filter 是实现了 Filter 接口的 Java 类

    3、Filter 需要在 web.xml 文件中进行配置和映射

    使用

    1、创建一个实现类,并实现于 Filter 接口

    2、在 web.xml 文件中配置并映射该 Filter

    注:其中 <url-pattern> 指定该 Filter 准备拦截哪些资源,或者从哪些 url 可以访问该 Filter 

    运行后,控制台第一次打印 init 方法,后面每次刷新都调用 doFilter 方法

    Filter 相关 API 

    1、Filter 接口

    ⑴ public void init(FilterConfig filterConfig) 

    该方法类似于 Servlet 的 init 方法,被创建时调用,且只被调用一次,该方法用于对当前的 Filter 进行初始化操作,Filter 实例是单例的,其中参数 filterConfig 类似于 Servlet 的 ServletConfig 可以在 web.xml 文件中配置当前 Filter 的初始化参数

    ⑵ public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)

    真正的 Filter 的逻辑代码都写在该方法中,每次拦截都会调用该方法。filterChain:Filter 链,多个 Filter 可以构成一个 Filter 链。

    doFilter(ServletRequest servletRequest,ServletResponse servletResponse):把请求传给 Filter 链的下一个 Filter,若当前 Filter 是 Filter 链的最后一个 Filter,则把请求传给目标 Servlet(或 JSP)

    注:多个 Filter 拦截的顺序和 <filter-mapping> 配置的顺序有关,靠前的先被调用

    ⑶ public void destroy() 

    释放当前 Filter 所占用的资源,在 Filter 被销毁之前被调用且只被调用一次

    2、Filter 代码执行顺序

    Dispatcher 

    指定过滤器所拦截的资源被 Servlet 容器调用的方式, 可以是 REQUEST,INCLUDE,FORWARD 和 ERROR 之一,默认为 REQUEST,同时可以设置多个 <dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截

    REQUEST:当用户之间访问页面时,web 容器将会调用过滤器,如果目标资源是通过 RequestDespatcher 的 include() 或 forward() 方法访问时,那么该过滤器就不会被调用。

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

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

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

    配置方法如下:

    使浏览器不缓存页面的过滤器

    在 doFilter 里面同时设置三种响应头:

    1、response.setDataHeader("Expires",-1)

    2、response.setHeader("Cache-Control","no-cache")

    3、response.setHeader("Pragma","no-cache")

    字符编码过滤器

    当页面传值出现中文乱码时,可以通过对过滤器设置编码来解决

    以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!

    相关文章

      网友评论

          本文标题:JavaWeb之Filter过滤器

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