一、拦截器与过滤器的区别总结

1. 原理不同:拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2. 依赖容器:拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

3. 作用范围:拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4. 访问权限:拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

5. 作用次数:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

核心区别是两者关注点不一样:过滤器关注web请求;拦截器关注方法调用。

什么是action?action可以理解为一次请求,在程序中初学者可以把它理解为一个后缀名为.action的请求路径。

二、过滤器和拦截器执行顺序

容器初始化时执行过滤器。过滤器之间执行顺序按注册顺序

拦截器是请求时出发,容器初始化时不会被执行。拦截器之间顺序是按注册顺序

三、应用场景总结:

拦截器:

Controller日志打印、限流操作、访问权限验证、统一参数校验、登录

过滤器:

编码过滤器、以及源码中给出的应用实例如下

1) Authentication Filters 鉴权

2) Logging and Auditing Filters 日志和审计

3) Image conversion Filters 图像转换

4) Data compression Filters 数据压缩

5) Encryption Filters 加密

6) Tokenizing Filters 令牌

7) Filters that trigger resource access events 资源访问事件触发

8) XSL/T filters

9) Mime-type chain Filter

四、什么是拦截器

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

拦截器最早始于Struct2中,后面在SpringMVC也有大量运用。在Webwork(即Structs2框架)文档的解释:拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

五、拦截器的实现原理

大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。

六、什么是过滤器

过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:

①以常规的方式调用资源(即调用servlet或JSP页面)。

②利用修改过的请求信息调用资源。

③调用资源,但在发送响应到客户机前对其进行修改。

④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

七、Servlet过滤器的基本原理

在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。

过滤器跟拦截器的区别相关推荐

  1. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  2. struts2 过滤器和拦截器的区别和使用

    struts2 过滤器和拦截器的区别和使用 java web 过滤器和拦截器的区别和使用  1.1 什么是拦截器:      拦截器,在AOP(Aspect-Oriented Programming) ...

  3. AOP--Filter使用,过滤器和拦截器的区别

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式,Spring中的AOP也是封 ...

  4. Springboot过滤器和拦截器的区别

    上两篇文章我们介绍了过滤器Filter和拦截器Intercepter,其功能都是对请求进行拦截并对请求过滤,本篇文章就介绍一下两者的区别 1. 过滤器和拦截器的区别 过滤器和拦截器触发时机不一样,过滤 ...

  5. Spring过滤器和拦截器的区别

    Spring过滤器和拦截器的区别 两者的作用 过滤器: 是在javaweb中,你传入的request.response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts ...

  6. Java 过滤器与拦截器的区别

    什么是过滤器(Filter) 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然后再传入Servlet或Struts2的 action ...

  7. 过滤器和拦截器的区别和执行顺序

    一.两者的区别 1.拦截器 java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同 ...

  8. java web 过滤器跟拦截器的区别和使用

    2019独角兽企业重金招聘Python工程师标准>>> 1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Progr ...

  9. SpringMVC中过滤器和拦截器的区别

    文章目录 1.引言 2.共同点 3.区别 3.1.拦截器 3.2.过滤器 4.具体实现 4.1.拦截器 4.1.1.拦截实现方式 4.1.2.拦截实现 4.2.过滤器 4.2.1.过滤器实现方式 4. ...

最新文章

  1. MySQL数据库中的内置函数
  2. 录制元素基于smartgwt框架项目如何开展自动化(一)
  3. canvas绘制圆形
  4. 接口文档示例_在示例中使用Android中的Work Manager
  5. sdut-1158 C语言实验——两个数最大
  6. 工作流技术杂谈 --- 2008
  7. LISP标注路线桩号_CAD插件标桩号的AutoLISP程序语言求解释并译成中文,谢谢
  8. 我发现很多人嘴里喊着要赚钱
  9. [转]Git:如何在项目提交历史中查找已删除的文件?
  10. python画彩色螺旋线_Python turtle 绘制彩色螺旋线
  11. MATLAB不能打字,电脑不能打字怎么办?电脑打字打不出来解决方法汇总
  12. win7重装的坑:启动分区不存在 使用分区工具修正
  13. 测试阶段划分为哪几个阶段?
  14. Atollic TrueSTDIO下修改STM32L475VE的变量分配地址
  15. 一步一步教你写股票走势图——分时图二(自定义xy轴)
  16. [转载]C#中IndexOf的使用
  17. Windows8开发指南(16)开发基于Windows8的第一个metro界面C++程序
  18. 2019原创考研数学 基础过关660题 数学一
  19. AM5728开发深度学习之安装 caffe-jacinto
  20. 十分钟带你玩转人工智能——调用百度AI接口实现文字转语音

热门文章

  1. 树莓派ssh连接问题
  2. TCP/IP总结(4)TCP 之3次握手
  3. 数据结构--队列(链表实现)
  4. 异常:javax.servlet.jsp.PageContext cannot be resolved to a type
  5. 基于Redis的单点登录
  6. Golang和Ethereum中的big.Int
  7. MoeCTF 2021Re部分------baby_bc
  8. 【开源】WeChatRobot+WeChatHelper 制作自己的微信机器人
  9. 2、HTML嵌入CSS样式(四种方法)
  10. 1.21 Lambda表达式