Filter

Filter过滤器

Filter

监视器,一般用于完成通用的操作,登陆验证等.

配置

  • web.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
<filter>
<filter-name>filterDemo1</filter-name>
<filter-class>Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDemo1</filter-name>
<url-pattern>/filterServlet</url-pattern>
</filter-mapping>
  • 注解配置
1
@WebFilter("/要监视的资源路径")

快速入门

  1. 定义一个类,实现Filter接口(javax.servlet.Filter)

  2. 复写三个方法

    • doFilter()
      • 在每次拦截资源时启用.
    • init()
      • 在服务器启动时启用,仅执行一次,多用于加载资源.
    • destory()
      • 服务器关闭时,启用一次.

        改变监视器的启动时机

        启动时机:
  3. Request:只有在直接访问时,菜启用Filter

  4. ForWard:只有目标拦截资源时被转发访问的时候才启动Filter

  5. 多种启用时机,设置多个参数.

    1
    @WebFilter(dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
  • web.xml改变配置

在web.xml配置文件中,在标签下设置的值

  • 注解配置

在注解中,设置参数dispatcherTypes

过滤器的执行

过滤器的放行代码

1
filterChain.doFilter(servletRequest,servletResponse);

在过滤器启动时,放行代码的上方代码执行,然后放行,资源访问完毕后,执行放行代码的下方代码.

过滤器链(多个配置的过滤器)

在存在多个过滤器时,执行的顺序
过滤器A->过滤器B->执行资源->过滤器B->过滤器A

过滤器先后顺序

  1. web.xml文件中,定义在上面的过滤器先执行
  2. 注解配置中,按照类名比较,(逐位比较),较小的先执行.