栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

拦截器、过滤器、监听器的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

拦截器、过滤器、监听器的区别

拦截器: 从字面意思来讲,他的功能就是进行拦截操作,Spring MVC中拦截器主要是通过 HandlerInterceptor来实现的,主要功能是拦截用户的 URL请求并进行相应的处理,比如说用来判断用户是否登录了,进行权限验证等。

实现拦截器的方式

实现 HandlerInterceptor接口实现 WebRequestInterceptor接口

实现 HandlerInterceptor接口

public class Interceptor implements HandlerInterceptor {


    
    @Override
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    
    @Override
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
    
    @Override
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

实现 WebRequestInterceptor接口

三个方法的作用和执行顺序可参考上面 HandlerInterceptor的解释

public class Interceptor implements WebRequestInterceptor {


    public void preHandle(WebRequest request) throws Exception {
        
    }

    public void postHandle(WebRequest request, ModelMap model) throws Exception {

    }

    public void afterCompletion(WebRequest request, Exception ex) throws Exception {

    }
}

过滤器: 从字面意思来讲,它就是对请求进行一个过滤,它不能产生请求,也不能进行响应。但可以用来转换HTTP请求、响应和头信息。它可以修改对某一资源的请求,或者修改某一资源的响应。

创建一个Filter的步骤

    创建Filter 处理类:

    在web.xml 文件中配置Filter 。

// 用于完成Filter的初始化。
void init(FilterConfig config):
// 用于Filter 销毁前,完成某些资源的回收。
void destroy():  
// 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。 
void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 

拦截器与过滤器的区别

    拦截器是基于Java的反射机制的,而过滤器是基于函数回调过滤器依赖与servlet容器,而拦截器不依赖与servlet容器拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用拦截器可以访问action上下文、值栈里的对象,而过滤器不能在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

监听器: 它是实现了javax.servlet.ServletContextListener接口的服务器端程序,随着Web容器的启动而启动,只加载一次,主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、就是spring容器启动的时候加载一些数据。

在javax.servlet.ServletContextListener接口中定义了2种方法:

void contextInitialized(ServletContextEvent sce) 监听器的初始化

void contextDestroyed(ServletContextEvent sce) 监听器销毁

	
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // TODO Auto-generated method stub
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub

    }

详细解释可参考:过滤器,拦截器,监听器的区别 - Rooker - 博客园 (cnblogs.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号