java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java拦截器、过滤器和监听器区别

Java拦截器、过滤器和监听器的区别与作用详解

作者:Java皇帝

Java 拦截器、过滤器和监听器是在 Java Web 开发中常用的组件,它们各有特点和用途,下面将分别介绍它们的区别和作用,并提供具体的代码示例,需要的朋友可以参考下

一、定义与区别

它们的主要区别如下:

组件基于技术拦截范围生命周期管理
拦截器反射机制(AOP)框架中的方法调用(如 Spring)由框架管理
过滤器Servlet 容器客户端请求和服务器响应由 Servlet 容器管理
监听器事件监听机制应用程序事件(如会话创建)由 Servlet 容器管理

二、具体用途与作用

1. 拦截器

代码示例

import org.springframework.web.servlet.HandlerInterceptor;

public class MyInterceptor implements HandlerInterceptor {
    // 在请求处理之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("请求处理前执行");
        return true; // 返回 false 可以阻止请求继续处理
    }

    // 在请求处理之后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("请求处理后执行");
    }

    // 在整个请求完成之后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("请求处理完成执行");
    }
}

在 Spring 配置文件中注册拦截器:

<mvc:interceptors>
    <bean class="com.example.MyInterceptor"/>
</mvc:interceptors>

2. 过滤器

代码示例

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter {
    // 过滤器初始化
    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("过滤器初始化");
    }

    // 拦截请求和响应
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        System.out.println("请求前处理");
        chain.doFilter(request, response); // 放行请求
        System.out.println("响应后处理");
    }

    // 过滤器销毁
    @Override
    public void destroy() {
        System.out.println("过滤器销毁");
    }
}

在 web.xml 中配置过滤器:

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. 监听器

代码示例

import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;

public class MyListener implements HttpSessionListener {
    private static int onlineCount = 0;

    // 会话创建时触发
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        onlineCount++;
        System.out.println("会话创建,当前在线人数:" + onlineCount);
    }

    // 会话销毁时触发
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        onlineCount--;
        System.out.println("会话销毁,当前在线人数:" + onlineCount);
    }
}

在 web.xml 中配置监听器:

<listener>
    <listener-class>com.example.MyListener</listener-class>
</listener>

三、总结

根据实际需求选择合适的组件,可以更好地组织代码和提高开发效率。

到此这篇关于Java拦截器、过滤器和监听器的区别与作用详解的文章就介绍到这了,更多相关Java拦截器、过滤器和监听器区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文