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

面试的时候突然被问了这么个问题  本来知道点啥的 脑子一热 啥也没说出来
总结一下 以下内容均摘自网络 但是 读完之后 应该会对它们有更清晰的认识。
1.1 什么是拦截器:

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。
同时也是提供了一种可以提取action中可重用的部分的方式。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈 Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。
在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
1.2. 拦截器的实现原理:
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,
并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。
1.3 什么是过滤器
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
①以常规的方式调用资源(即,调用servlet或JSP页面)。
②利用修改过的请求信息调用资源。
③调用资源,但在发送响应到客户机前对其进行修改。
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

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

2、拦截器与过滤器的区别 :
1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的,
大致画了个图:其实非常好测试,自己写一个过滤器,一个拦截器,然后在这些方法中都加个断点,一路F8下去就得出了结论。


转载于:https://www.cnblogs.com/feiye512/p/6132272.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我是服务的执政官-服务发现和注册工具consul简介

服务发现和注册 我们有了两个服务。服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002。我们的客户端需要调用服务A和服务B,我们只需要在配置文件中写上服务A和服务B的IP地址即可。 此时,服务A的服务器负载…

什么linux系统是中文的,什么是Linux系统

Linux系统是一种类似Unix的开源和社区开发的操作系统,适用于计算机,服务器,大型机,移动设备和嵌入式设备,已成为最广泛支持的操作系统之一,接下来在文章中将为大家详细介绍什么是Linux【推荐课程&#xff1…

numpy将所有数据变为0和1_Numpy库学习

之前照着《利用python进行数据分析》学过一边,代码也跟着敲了,但是如果不用的话,印象不深,忘的特别快。所以,现在再过一遍,并且记录一下,加深印象。一、创建numpy中的多维数组对象ndarry的创建。…

win8.1 linux系统,电脑显示win8.1linux系统失效的原因及解决办法!

电脑蓝屏每次代码都不一样,有的是epoll或者workflow代码有的是错误码,会将错误进行查找,电脑蓝屏错误有些可以修复,也有错误修复不了的,出现蓝屏,最可能的原因是segmentationfault,出现的原因是…

数据丢失情况下应急之顶级数据恢复服务提供商列表

在当今的数字世界中,数据存储设备在我们的职业和个人生活中发挥着非常重要的作用。 无论是硬盘驱动器上的重要专业文档、USB 闪存驱动器上的医疗数据还是外部硬盘驱动器上的照片和视频,我们都将重要信息存储在一个或另一个数据存储设备上。我们认为数据…

jsencrypt加密同一值返回不同密文_密码学原语如何应用?解析密文同态性的妙用...

免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。小编:记得关注哦来源:微众银行区块链隐私数据在密文形式下是否依旧可以加减乘除?其背后的同态性原理…

小红帽怎样装图形化界面_纯技术篇:U盘装系统,不再多花冤枉钱

U盘装系统,顾名思义就是用U盘安装电脑的操作系统。这里小编用现在最常见的大白菜装机软件来开始教程。1、使用大白菜装机版制作大白菜U盘启动盘之前,需要准备一个存储空间大于2G的U盘。2、下载并且安装好大白菜装机版,打开安装好的大白菜装机…

北斗三号b1c频点带宽_重磅北斗星通新一代22nm北斗高精度定位芯片正式发布

11月23日,第十一届中国卫星导航年会在四川省成都市盛大召开。年会首日,北斗星通旗下企业和芯星通正式发布了最新一代全系统全频厘米级高精度GNSS芯片——和芯星云NebulasⅣ。这颗芯片代表了国内卫星导航芯片的最高水平,在厘米级高精度定位领域…

为什么人会摆高姿态_为什么感情相处中不要随意掏心掏肺?

如今已经到了十二月份,过年的时间一点一点推进,在这个冬天你这一年的感悟有多少?这一年过得还快乐吗?可能有人在这一年遇到了自己的另一半,彼此陪伴走过四季,沉浸在爱情的蜜罐里,感受荷尔蒙碰撞…

hadoop 2.7.2 + zookeeper 高可用集群部署

一.环境说明 虚拟机:vmware 11 操作系统:Ubuntu 16.04 Hadoop版本:2.7.2 Zookeeper版本:3.4.9 二.节点部署说明 三.Hosts增加配置 sudo gedit /etc/hosts wxzz-pc、wxzz-pc0、wxzz-pc1、wxzz-pc…

最全面的Android Studio使用教程【申明:来源于网络】

最全面的Android Studio使用教程【申明:来源于网络】 http://www.admin10000.com/document/5496.html 转载于:https://www.cnblogs.com/yearHeaven/p/6741388.html