servlet/filter/listener/interceptor过滤器、监听器、拦截器区分

因为之前一直分不清过滤器和拦截器的区别,所以有了两者差不多的错觉,因此在这里总结下servlet/filter/listener/interceptor过滤器、监听器、拦截器。

在此之前先简单回顾下servlet:

概述:servlet是一种运行服务器端的java应用程序,它工作在客户端请求与服务器响应的中间层。

主要作用:在于交互式地浏览和修改数据,生成动态 Web 内容。

访问流程:

1,客户端发送请求至服务器端; 
2,服务器将请求信息发送至 Servlet; 
3,Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求; 
4, 服务器将响应返回给客户端。

filter:

概述:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者              修改从某一的响应。

主要的用途:过滤字符编码、做一些业务逻辑判断等。

工作原理:就是只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置                      编 码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初                    始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。

访问流程 :
1、在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
2、根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
3、在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
4、根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

总体来说:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

listener:

概述:从字面上可以看出listener主要用来监听的,通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是            在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。它也是随web应用的启动而启动,只            初始化一次,随web应用的停止而销毁。

主要作用: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。 举个例子,spring 的总监听器 会在服务器                       启动的时候实例化我们配置的bean对象。

interceptor :

首先强调下:interceptor不属于java web所提供的基本功能

概述:它在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用,用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入            某些操作。比如在你调用一个方法前打印一个字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常                的时候做业务逻辑的操作。

拦截器是基于web框架的调用,在SpringMVC中就是依赖于SpringMVC框架,可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用,但是需要注意的是它对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

对上述总结下:

servlet用来进行基本的web内容的提供;

Filter在服务器和功能之间提供一些公共性质的功能,依赖于Servlet;

listener则是提供了一些运行环境中的动态交互的基础功能

(备注:servlet、filter、listener在web.xml 的加载顺序是:context-param -> listener -> filter -> servlet )——>理发师顺序)

interceptor的面向切面编程,本质是解决程序层面的需求,而不是架构层面的问题。 依赖于框架;

最后说说filter和Interceptor的区别:

拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调;

过滤器只能在请求的前后使用,而拦截器可以详细到每个方法。

Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用

在功能上来讲Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比如登录不登录之类)

而从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活;

原文地址:https://www.cnblogs.com/zzjlxy-225223/p/11263345.html

时间: 2025-01-19 22:42:10

servlet/filter/listener/interceptor过滤器、监听器、拦截器区分的相关文章

servlet/filter/listener/interceptor区别与联系(转)

由于最近两个月工作比较清闲,个人也比较"上进",利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现为什么struts1要用servlet,而struts2要用filter呢?一时又发现,servlet和filter有什么区别呢?于是看了看web.xml,一时又发现,咦,servlet.filter.listener?还有个interceptor?对于这几个概念,本应是初学者就掌握的东东了,可惜本人基础学的不好,只能是现在补课.于是就有了这篇

servlet & filter & listener & interceptor

1.servlet url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面.它主要用来在业务处理之前进行控制. 2.filter url传来之后,检查之后,可保持原来的流程继续向下执行. filter可用来进行字符编码的过滤,检测用户是否登陆,禁止页面缓存等 3.servlet 与 filter 都是针对url之类的,而listener是针对对象的操作的.如: session的创建,Spring整合Struts,为Struts的action注入属性,web应用定时任务的实现,在线人数

servlet/filter/listener/interceptor区别与联系

由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现为什么struts1要用servlet,而struts2要用filter呢?一时又发现,servlet和filter有什么区别呢?于是看了看web.xml,一时又发现,咦,servlet.filter.listener?还有个interceptor?对于这几个概念,本应是初学者就掌握的东东了,可惜本人基础学的不好,只能是现在补课.于是就有了这篇博客. 慢

【转】servlet/filter/listener/interceptor区别与联系

原文:https://www.cnblogs.com/doit8791/p/4209442.html 一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server.此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API.Servlet 的主要功能在

JavaWeb过滤器.监听器.拦截器-?原理&区别

1.拦截器是基于java的反射机制,过滤器是基于函数回调 2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器3.拦截器只能对action请求起作用,过滤器则可以对几乎所有的请求起作用 4.拦截器可以访问action上下文.值栈里的对象,而过滤器不能 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,

过滤器、拦截器、SpringAop

过滤器: 过滤器是servlet提供的API,需要实现javax.servlet.Filter接口.过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletResponse response),并对请求响应做出的过滤操作,比如设置字符编码.鉴权操作. 过滤器方法的入参有request,response,FilterChain,其中FilterChain是过滤器链,使用比较简单,而request,response则关联到请求流程,因此可以对请求参数做过滤和修

关于过滤器,拦截器,监听器

链接:https://www.zhihu.com/question/35225845 过滤器(Filter): 过滤器换一种表达就是预处理(pre processing)或者后处理(post processing),你说到的依赖于servlet容器,我觉得这是狭隘层次上的定义,你用米进行煮饭前要做什么,要用水先对米进行清洗,浸泡一下,这就是预处理:你榨完果汁后是直接喝吗,不,还要用筛子将果渣过滤掉,这就是后处理,对数据进行预处理或者后处理就是过滤器要做的工作,常见的应用有将请求中的数据进行转码,

过滤器、拦截器、监听器

原文:https://www.zhihu.com/question/35225845/answer/61876681 从设计模式的角度分析它们的不同. 过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西.定义这些要求的工具,就是过滤器. 拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情. 监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程

【java web】过滤器、拦截器、监听器的区别

一.对比: 1.1 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用. ④拦截器可以访问action上下文.值栈里的对象,而过滤器不能访问. ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次. ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注