Java过滤器与SpringMVC拦截器

一.过滤器和拦截器区别:

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

2 过滤器是servlet规范规定的只能用于web程序中,而拦截器是在spring容器中它不依赖servlet容器

3 过滤器可以拦截几乎所有的请求(包含对静态资源的请求),而拦截器只拦截action请求(不拦截静态资源请求)。

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

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

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

7 拦截器是被包裹在过滤器之中

 

二.过滤器与拦截器执行顺序

SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的,大致画了个图:其实非常好测试,自己写一个过滤器,一个拦截器,然后在这些方法中都加个断点或者打印日志,一路F8下去就得出了结论。

 

三. 过滤器和拦截器的总结

1、过滤器(Filter):所谓过滤器顾名思义是用来过滤的Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求这一点,是拦截器无法做到的

2、监听器(Listener):Java的监听器,也是系统级别的监听。监听器随web应用的启动而启动。Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理。监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数。又比如struts2可以用监听来启动。Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

3、拦截器(Interceptor)java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间 动态生成字节码。拦截器 是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行 ,同时也提供了一种可以提取Action中 可重用部分代码 的方式。在AOP中,拦截器用于 在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在配置文件即xml,文件里声明一段的那个东西。

四.Java过滤器与SpringMVC拦截器原理与代码实现

参考下面两篇文章:

Java三大器之拦截器(Interceptor)的实现原理及代码demo:  https://blog.csdn.net/reggergdsg/article/details/52962774

Java三大器之过滤器(Filter)的实现原理及代码demo:  https://blog.csdn.net/reggergdsg/article/details/52821502

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值