JavaWeb之Filter过滤器

概念

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

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

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

使用

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

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

JavaWeb之Filter过滤器_第1张图片
JavaWeb之Filter过滤器_第2张图片

注:其中 指定该 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 拦截的顺序和  配置的顺序有关,靠前的先被调用

⑶ public void destroy() 

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

2、Filter 代码执行顺序

JavaWeb之Filter过滤器_第3张图片

Dispatcher 

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

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

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

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

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

配置方法如下:

JavaWeb之Filter过滤器_第4张图片

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

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

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

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

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

字符编码过滤器

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

JavaWeb之Filter过滤器_第5张图片



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

你可能感兴趣的:(JavaWeb之Filter过滤器)