Java中过滤器、监听器和拦截器有何本质区别?

2026-04-19 20:431阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1383个文字,预计阅读时间需要6分钟。

Java中过滤器、监听器和拦截器有何本质区别?

过滤器、监听器、拦截器概念+概念1、Servlet:Servlet是一种运行在服务器端的Java应用程序,具有独立于平台和协议的特性,可以动态生成Web页面。它工作在客户端请求与服务器响应之间,处理客户端请求并生成响应。

过滤器、监听器、拦截器概念

概念

1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,

可以动态生成web页面它工作在客户端请求与服务器响应的中间层;

2、filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求,响应和头信息。

它不能产生一个请求或者响应,它只是修改对某一资源的请求或者响应;

3、listener:监听器,通过listener可以坚挺web服务器中某一执行动作,并根据其要求作出相应的响应。

就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件;

4、interceptor:拦截器是对过滤器更加细化的应用,他不仅可以应用在service方法前后还可以应用到其他方法的前后 拦截器;

5、servlet,filter,listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts。xml中。

spring的拦截器配置到spring.xml中;

过滤器和拦截器的区别

先说最易混淆的过滤器和拦截器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

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

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

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

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

6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

过滤器、监听器、拦截器的生命周期

1、servlet

servle的生命周期开始于被装入web服务器的内存中,并在web服务终止或者重新装入servlet的时候结束;

servlet一旦被装入web服务器,一般不会从web服务器内存中删除;直到web服务器关闭;

装入:启动服务器时加载servlet的实例;

初始化:web服务器接收到请求时,或者两者之间的某个时刻启动,调用init()

调用:从第一次到以后的多次访问,都只调用doGet()或dopost)()方法;

销毁;停止服务器时调用destroy()方法,销毁实例;

2、filter

需要实现javax.servlet包的Filter接口的三个方法init(),doFilter(),destroy();

加载:启动服务器时加载过滤器的实例,并调用init()方法;

调用:每次请求的时候只调用方法doFilter()进行处理;

销毁:服务器关闭前调用destroy()方法,销毁实例;

3、listener

web.xml的加载顺序是:context-param->listener->filter->servlet

4、interceptor

加载配置文件后初始化拦截器,当有对action的请求的时候,调用interceptor方法,最后也是根据服务器停止进行销毁;

过滤器、监听器、拦截器的职责

创建并返回一个包含基于客户请求性质的动态内容的完整的html页面

创建可嵌入到现有的html页面中的一部分html页面(html片段)

读取客户端发来的隐藏数据

Java中过滤器、监听器和拦截器有何本质区别?

读取客户端发来的显示数据

与其他服务器资源(包括数据库和java的应用程序)进行通信

filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理www.localhost:8080/demo,可以看到控制台中输出如下:

这就说明了过滤器的运行是依赖于servlet容器,跟springmvc等框架并没有关系。并且,多个过滤器的执行顺序跟xml文件中定义的先后关系有关。

接着清空控制台,并访问:www.localhost:8080/demo/test,再次看控制台的输出:

从这个控制台打印输出,就可以很清晰地看到有多个拦截器和过滤器存在时的整个执行顺序了。当然,对于多个拦截器它们之间的执行顺序跟在SpringMVC的配置文件中定义的先后顺序有关。

四、总结

对于上述过滤器和拦截器的测试,可以得到如下结论:

(1)、Filter需要在web.xml中配置,依赖于Servlet;

(2)、Interceptor需要在SpringMVC中配置,依赖于框架;

(3)、Filter的执行顺序在Interceptor之前,具体的流程见下图;

(4)、两者的本质区别:拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。

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

Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

标签:区别

本文共计1383个文字,预计阅读时间需要6分钟。

Java中过滤器、监听器和拦截器有何本质区别?

过滤器、监听器、拦截器概念+概念1、Servlet:Servlet是一种运行在服务器端的Java应用程序,具有独立于平台和协议的特性,可以动态生成Web页面。它工作在客户端请求与服务器响应之间,处理客户端请求并生成响应。

过滤器、监听器、拦截器概念

概念

1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,

可以动态生成web页面它工作在客户端请求与服务器响应的中间层;

2、filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求,响应和头信息。

它不能产生一个请求或者响应,它只是修改对某一资源的请求或者响应;

3、listener:监听器,通过listener可以坚挺web服务器中某一执行动作,并根据其要求作出相应的响应。

就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件;

4、interceptor:拦截器是对过滤器更加细化的应用,他不仅可以应用在service方法前后还可以应用到其他方法的前后 拦截器;

5、servlet,filter,listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts。xml中。

spring的拦截器配置到spring.xml中;

过滤器和拦截器的区别

先说最易混淆的过滤器和拦截器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

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

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

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

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

6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

过滤器、监听器、拦截器的生命周期

1、servlet

servle的生命周期开始于被装入web服务器的内存中,并在web服务终止或者重新装入servlet的时候结束;

servlet一旦被装入web服务器,一般不会从web服务器内存中删除;直到web服务器关闭;

装入:启动服务器时加载servlet的实例;

初始化:web服务器接收到请求时,或者两者之间的某个时刻启动,调用init()

调用:从第一次到以后的多次访问,都只调用doGet()或dopost)()方法;

销毁;停止服务器时调用destroy()方法,销毁实例;

2、filter

需要实现javax.servlet包的Filter接口的三个方法init(),doFilter(),destroy();

加载:启动服务器时加载过滤器的实例,并调用init()方法;

调用:每次请求的时候只调用方法doFilter()进行处理;

销毁:服务器关闭前调用destroy()方法,销毁实例;

3、listener

web.xml的加载顺序是:context-param->listener->filter->servlet

4、interceptor

加载配置文件后初始化拦截器,当有对action的请求的时候,调用interceptor方法,最后也是根据服务器停止进行销毁;

过滤器、监听器、拦截器的职责

创建并返回一个包含基于客户请求性质的动态内容的完整的html页面

创建可嵌入到现有的html页面中的一部分html页面(html片段)

读取客户端发来的隐藏数据

Java中过滤器、监听器和拦截器有何本质区别?

读取客户端发来的显示数据

与其他服务器资源(包括数据库和java的应用程序)进行通信

filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理www.localhost:8080/demo,可以看到控制台中输出如下:

这就说明了过滤器的运行是依赖于servlet容器,跟springmvc等框架并没有关系。并且,多个过滤器的执行顺序跟xml文件中定义的先后关系有关。

接着清空控制台,并访问:www.localhost:8080/demo/test,再次看控制台的输出:

从这个控制台打印输出,就可以很清晰地看到有多个拦截器和过滤器存在时的整个执行顺序了。当然,对于多个拦截器它们之间的执行顺序跟在SpringMVC的配置文件中定义的先后顺序有关。

四、总结

对于上述过滤器和拦截器的测试,可以得到如下结论:

(1)、Filter需要在web.xml中配置,依赖于Servlet;

(2)、Interceptor需要在SpringMVC中配置,依赖于框架;

(3)、Filter的执行顺序在Interceptor之前,具体的流程见下图;

(4)、两者的本质区别:拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。

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

Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

标签:区别