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

面试的时候突然被问了这么个问题  本来知道点啥的 脑子一热 啥也没说出来
总结一下 以下内容均摘自网络 但是 读完之后 应该会对它们有更清晰的认识。
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,一经查实,立即删除!

相关文章

linux查看命令类型,查看linux命令类型

LINUX 虚拟机克隆与网络配置虚拟机克隆后,启动之后发现网卡没有启动.发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” 解决方法 ...Hibernate之mappedByHibernate之mappedBy 摘要: 一.mappedBy单向关系不需要设置该属性,双向关系必须设…

WCF Rest Service

VS2010——新建项目——联机模板——WCF REST Service Template 40(CS) url路由控制&#xff1a;实现/Service1访问Service1类定义的服务----------Web.config<system.webServer> <modules runAllManagedModulesForAllRequests"true"> <add n…

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

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

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

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

IEnumerable.EachTSource(FuncTSource, TSource predicate) 逐个更改列表成员的值

/// <summary> /// 逐个对象执行predicate并获得返回值 /// </summary> /// <typeparam name"TSource"></typeparam> /// <param name"source"></param> /// <param name"…

王嘉廉佳话

叶 烨 王嘉廉创办冠群电脑&#xff0c;打入幸福100家&#xff0c;成为雅虎杨致远之前北美华人首富。王嘉廉八岁时随父母从上海移民美国&#xff0c;年青时就读皇后学院数学系&#xff0c;有时为二毛五午歺费发愁&#xff0c;但他从没打算打工靠苦力挣钱。 王嘉廉功课一般&#…

SQLServer XML操作

declare x xml,y xmlset x<item><title>姓名 </title></item> select x.query(/item/title)select x.query(/item/title).value(/,nvarchar(100))select D.x.value(./title[1],nvarchar(100)) from x.nodes(/*) as D(x);查询结果&#xff1a; <tit…

0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中&#xff0c;实现Runnable创建多条线程&#xff0c;输出中的结果中会有错误&#xff0c;比如一张票卖了两次&#xff0c;有的票没卖的情况&#xff0c;因为线程对象被多条线程访问&#xff0c;一条线…

我的.Net+SQLServer更新设计

一、备份 备份程序、数据库&#xff08;非常重要&#xff09; 二、更新程序 发布Web/Winform程序&#xff0c;将发布文件夹中需要更新的文件发布到服务器上&#xff0c;这里配置文件如果有修改应该单 独修改&#xff0c;否则不应更新配置文件。 三、更新数据库架构 可以通过VS2…

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

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

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

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

js 保留两位小数(四舍五入)

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。 intA.toFixed(2)

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

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

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

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

c语言函数大全 chm,【oeasy丨c语言丨函数】C语言库函数使用大全CHM版

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼函数名: arc功 能: 画一弧线用 法: void far arc(int x, int y, int stangle, int endangle, int radius);程序例:#include #include #include #include int main(void){/* request auto detection */int gdriver DETECT, gmode, …

VS.NET 编译出来的DLL,XML注释(Sumarry 注释)输出

项目属性——生成——输出中选中xml文档文件——生成即可