欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb三大组件之一 —— Filter

程序员文章站 2022-03-10 14:24:26
...

目录

1. 简介
2. 快速入门
3. 执行流程
4. 生命周期
5. 两种配置方式
6. 配置详解
7. 过滤器链(配置多个过滤器)

1. 简介

在 javax.servlet 包中。当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:一般用于完成通用的操作。如:登录验证,统一编码处理、敏感字符过滤等

2. 快速入门

  1. 定义一个类,实现接口Filter
  2. 实现Filter接口方法
  3. 配置拦截路径(访问什么资源,过滤器生效)
    • 两种配置方式
      1. web.xml配置
      2. 注解配置(常用)

3. 执行流程

  1. 执行过滤器
  2. 执行放行后的资源,如jsp、servlet等
  3. 回来执行过滤器放行代码下边定义的代码

4. 生命周期

  1. init:服务器启动后,会创建Filter对象,调用init。只执行一次。作用:用于加载资源。
  2. doFilter:每一次请求被拦截的资源时,执行。
  3. destroy:服务器关闭后,Filter对象被销毁,只执行一次。如果服务器正常关闭,则执行destory。反之不执行。作用:一般用于释放资源。

5. 两种配置方式

方式一:web.xml配置方式

<filter>
    <filter-name>demo2</filter-name>
    <!--Filter全类名-->
    <filter-class>cn.web.Filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
    <filter-name>demo2</filter-name>
    <!--url-pattern,表示拦截路径。访问所有的资源都会执行demo2的Filter-->
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

方式二:注解配置,只能作用在类上,保留到运行时

@WebFilter(value = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)

6. 配置详解

拦截路径的配置

  1. 具体的资源路径:如:"/index.jsp"只有访问index.jsp资源时,过滤器才会被执行。
  2. 拦截目录:如:"/user/*访问/user下的所有资源时,过滤器都会被执行。
  3. 拦截后缀名:如: "*.jsp"访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:如: "/*"访问任意资源,过滤器都会被执行

拦截方式的配置:资源被访问的方式

  1. 注解配置:设置 dispatcherTypes 属性,值是一种枚举,有五种取值
    1. FORWARD:转发访问资源
      比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.FORWARD) 只有转发访问index.jsp时,该过滤器才会被执行
    2. INCLUDE:包含访问资源
    3. REQUEST:默认值。客户端(浏览器)直接请求资源
      比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.REQUEST) 客户端直接请求index.jsp时,过滤器才会被执行
    4. ASYNC:异步访问资源
    5. ERROR:错误跳转资源(例如index页面配置的错误页面)

注意:
如**解,浏览器直接发送请求或者转发访问index.jsp,过滤器都会被执行:

@WebFilter(value = "/index.jsp", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})

如**解,并且定一个Servlet转发到index.jsp。那么:在浏览器中访问这个servlet,过滤器会执行2次!!

@WebFilter(value = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}) 
  1. web.xml配置:设置标签即可, 也有5个属性,同注解配置的5个参数。

7. 过滤器链(配置多个过滤器)

执行顺序:

如果有2个过滤器,过滤器1和过滤器1,执行顺序如下:

  1. 过滤器1
  2. 过滤器2
  3. 资源执行
  4. 过滤器2
  5. 过滤器1

过滤器执行先后的规则:

  1. 注解配置:按照类名的字符串比较规则比较,值小的过滤器先执行!
    如:AFilter 和 BFilter。那么:AFilter先执行,BFilter后执行。
  2. web.xml配置:标签定义在前面的,先执行。
相关标签: Filter