Skip to content

作用:拦截请求,对请求进行预处理,然后将请求转发给目标资源

实现方式

  1. 编写一个类实现Filter接口
  2. 重写Filter接口中的方法
  3. 在web.xml中配置过滤器
  4. 注解配置过滤器

重写Filter接口中的方法

java
import javax.servlet.*;

// 实现接口
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // 初始化方法,在web服务器启动时执行,执行一次
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
        // 过滤方法,每次请求时执行,执行多次
    }

    @Override
    public void destroy() {
        // 销毁方法,在web服务器关闭时执行,执行一次
    }
}

其中doFilter里面的参数是:

  1. ServletRequest servletRequest:请求对象
  2. ServletResponse servletResponse:响应对象
  3. FilterChain filterChain:过滤器链对象

在完成过滤操作后,使用chain对象的doFilter()方法将执行权交给下一个过滤器,如果没有下一个过滤器,则将执行权交给目标资源

在web.xml中配置过滤器

xml
<filter>
    <filter-name>过滤器名称</filter-name>
    <filter-class>过滤器类的全名</filter-class>
    <init-param>
        <param-name>初始化参数的名称</param-name>
        <param-value>初始化参数的值</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>过滤器名称</filter-name>
    <url-pattern>过滤器的访问路径</url-pattern>
    <dispatcher>过滤器拦截方式</dispatcher>
</filter-mapping>

四种拦截方式

xml
<dispatcher>REQUEST</dispatcher> 默认的!      //拦截直接请求方式
<dispatcher>FORWARD</dispatcher>             //拦截请求转发方式
<dispatcher>INCLUDE</dispatcher>              //拦截请求包含方式
<dispatcher>ERROR</dispatcher>                //拦截错误转发方式
<dispatcher>ASYNC</dispatcher>                //拦截异步方式

注解配置过滤器

java
// 实现接口
// 使用注解
@WebFilter(filterName = "过滤器名称", urlPatterns = "过滤器的访问路径")
public class MyFilter implements Filter {
    // ...
}