zoukankan      html  css  js  c++  java
  • 过滤器与拦截器的区别和联系

    一、概述

    1、过滤器
    依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。

    2、拦截器
    依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

    过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。这就是过滤器做的事情。

    拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这就是拦截器做的事情。

    二、拦截器和过滤器的区别与关系

    1、拦截器是基于java的反射机制,而过滤器是基于函数回调。
    2、拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
    3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
    5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,在拦截器里注入一个service,可以调用业务逻辑。


    拦截器与过滤器的关系

    如上图所示:过滤器包裹住servlet,servlet包裹住拦截器。
    过滤器触发时机:过滤器是在请求进入容器后,在请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。


    三、过滤器和拦截器的执行逻辑


    四、参考博文

    (1) https://www.cnblogs.com/panxuejun/p/7715917.html
    (2) https://www.jianshu.com/p/7bd0cad17f23
    (3) https://zhuanlan.zhihu.com/p/69060111

  • 相关阅读:
    hdu1418 欧拉公式
    hdu1215七夕节 筛选法求公因子和
    hdu1215 The area
    hdu1005Number Sequence
    hdu1021 数学题 并不是说难,而是数学题那种简单朴素的思想get不到
    Mongo第三个参数的用法
    js 显示刚刚上传的图片 (onchange事件)
    在linux中安装memcache服务器
    jQuery 倒计时
    PHP获取文章发布时间
  • 原文地址:https://www.cnblogs.com/jasonboren/p/13290317.html
Copyright © 2011-2022 走看看