Java中过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

Java中过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

Java中过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)三者对比

一、基础概念

1. Listener 监听器(Servlet层面,事件监听)

  • 归属:Servlet规范,属于Java‑Web原生组件,运行在Tomcat容器中。
  • 作用:监听Web容器的事件,比如对象的创建、销毁、属性新增/修改/删除,本身不拦截请求。
  • 监听对象:
    1. ServletContext(整个项目上下文)
    2. HttpSession(会话)
    3. ServletRequest(单次请求)
  • 常见用途:统计在线人数、项目启动初始化加载配置、记录会话创建销毁。
  • 执行时机:容器触发事件就执行,和请求链路可无关。
  • 实现方式:实现对应监听器接口,@WebListener注册。

2. Filter 过滤器(Servlet层面,拦截请求)

  • 归属:Servlet规范,Tomcat原生组件。
  • 作用:拦截Servlet请求,在请求到达Servlet之前做预处理,响应返回前做后处理。
  • 执行位置:在进入SpringMVC的DispatcherServlet之前
  • 用途:编码设置、跨域处理、登录校验、请求黑名单、过滤静态资源。
  • 核心方法:doFilter(ServletRequest, ServletResponse, FilterChain)