(1)概述

  • 作用:当访问服务器的资源时,过滤器将请求拦截下来,完成一些特殊的操作。
  • 比如:登录验证、统一编码处理

(2)两种配置方式

注解

  • 生命周期 ``` package com.code.web.filter;

import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;

@WebFilter(“/*”) public class Filter2 implements Filter {

  1. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  2. // request请求消息增强
  3. System.out.println("浏览器的请求来了");
  4. // 放行
  5. chain.doFilter(req, resp);
  6. // response响应消息增强
  7. System.out.println("资源返回给浏览器");
  8. }
  9. @Override
  10. public void init(FilterConfig filterConfig) throws ServletException {
  11. System.out.println("init");
  12. }
  13. @Override
  14. public void destroy() {
  15. System.out.println("destroy");
  16. }

}

  1. <a name="TK3Ym"></a>
  2. #### webxml

<?xml version=”1.0” encoding=”UTF-8”?>

  1. <filter>
  2. <filter-name>demo1</filter-name>
  3. <filter-class>com.code.web.filter.Filter1</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>demo1</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>

  1. <a name="3WXCV"></a>
  2. #### 生命周期
  3. - init()
  4. - doFilter()
  5. - destroy():服务器正常关闭才会回调
  6. <a name="704aaa57"></a>
  7. #### 拦截路径
  8. - "/index":具体的资源路径
  9. - "/user/*":拦截目录
  10. - "*.jsp":后缀名拦截
  11. - "/*":拦截所有资源,jsp/html/servelt等等
  12. <a name="cUpGp"></a>
  13. #### 拦截方式
  14. - 注解属性
  15. - dispatcherTypes
  16. - REQUEST:只有浏览器直接请求资源,才会经过过滤器
  17. - FORWARD:只有转发请求资源,才会经过过滤器
  18. - INCLUDE:包含访问资源
  19. - ERROR:错误跳转
  20. - ASYNC:异步访问
  21. - dispatcherTypes支持数组

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

  1. - web配置

<?xml version=”1.0” encoding=”UTF-8”?>

demo1 com.code.web.filter.Filter1

  1. <filter-mapping>
  2. <filter-name>demo1</filter-name>
  3. <url-pattern>/*</url-pattern>
  4. <dispatcher>REQUEST</dispatcher>
  5. </filter-mapping>

```

(3)过滤器链

  • 执行顺序:如果有两个过滤器A B,先进后出
    1. 过滤器A
    2. 过滤器B
    3. 资源执行
    4. 过滤器B
    5. 过滤器A
  • 过滤器顺序
    • 注解配置:按照类名的字符串规则比较,值小的先执行
    • web.xml配置:按定义的上下顺序