首先了解什么是过滤器什么是拦截器

①过滤器(Filter)

过滤器通过直接实现Filter接口实现,也可以通过@WebFilter注解实现特定的URL拦截

在Filter接口中定义了三个方法:

  • init():在容器初始化调动过滤器时使用,在Filter整个生命周期中只会被调用一次
  • doFilter():容器每一次请求都会调用该方法,进行实际的业务处理
  • destroy():容器销毁时调用该方法,也就是停止web工程的时候

②拦截器 (Interceptor)

拦截器是链式调用的,通过HandlerInterceptor接口来实现的,一个请求可以触发多个拦截器,其中也包含三个方法

  • preHandle() :这个方法将在请求处理之前进行调用。注意:如果该方法的返回值为false ,将视为当前请求结束,不仅自身的拦截器会失效,还会导致其他的拦截器也不再执行。
  • postHandle():只有在 preHandle() 方法返回值为true 时才会执行。会在Controller 中的方法调用之后,DispatcherServlet 返回渲染视图之前被调用。 有意思的是:postHandle() 方法被调用的顺序跟 preHandle() 是相反的,先声明的拦截器 preHandle() 方法先执行,而postHandle()方法反而会后执行。
  • afterCompletion():只有在 preHandle() 方法返回值为true 时才会执行。在整个请求结束之后, DispatcherServlet 渲染了对应的视图之后执行。

拦截器和过滤器都体现了AOP编程的思想,但他们的区别如下:

①实现原理不同
过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。
②使用范围不同
过滤器Filter 的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。
而拦截器 它是一个Spring组件,并由Spring容器管理,并不依赖Tomcat等容器,是可以单独使用的。不仅能应用在web程序中,也可以用于Application、Swing等程序中。
③触发时机不同
过滤器Filter是在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后。拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的,Controller 中渲染了对应的视图之后请求结束。

④拦截请求的范围不同

对同一个请求,过滤器执行了2次,而拦截器只执行一次。因为过滤器几乎可以对所有进入容器的请求起作用,而拦截器只会对Controller中请求或访问static目录下的资源请求起作用。

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

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

⑤注入Bean情况不同

拦截器可以获取IOC容器中的各个bean,而过滤器就不行

在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑

⑥控制执行顺序不同
过滤器用@Order注解控制执行顺序,通过@Order控制过滤器的级别,值越小级别越高越先执行。拦截器默认的执行顺序,就是它的注册顺序,也可以通过Order手动设置控制,值越小越先执行

拦截器和过滤器有什么区别?相关推荐

  1. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

  2. java 拦截器和过滤器的区别

    介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...

  3. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  4. struts2中拦截器和过滤器的比较

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

  5. 【SpringMVC】拦截器和过滤器

    拦截器: 拦截器是springmvc中的一种,需要实现HandlerInterceptor接口. 拦截器和过滤器类似,功能方向侧重点不同. 过滤器是用来过滤器请求参数,设置编码字符集等工作. 拦截器是 ...

  6. 关于SSM框架设置拦截器和过滤器

    我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...

  7. SpringBoot 拦截器和过滤器

    拦截器和过滤器 时光飞逝,最近也是很忙,但是忙到最后发现在自己并没有太多的成长 工作 学习 生活 没想到成长是不经意间的,像是被 推着,让你身不由己 午休时间,写写博客,也是保留一些自己的时间和空间 ...

  8. 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别

    转自:https://www.cnblogs.com/shangc/p/5939708.html 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别.其主要区别为以下几点: 1)拦截器是基于 ...

  9. springboot拦截器和过滤器的区别与使用

    拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查.日志记录等,不同的是: 适用范围不同:filter是servle ...

最新文章

  1. 资深首席架构师眼中的架构应该是怎样的?【转】
  2. CSS基础——position位置属性
  3. bzoj 3572 [Hnoi2014]世界树——虚树
  4. 无法安装声卡及MODEM驱动
  5. ##连接符和#符的使用
  6. python atm作业详解_Python学习day5作业-ATM和购物商城
  7. 计算机网络基础大学教材,《计算机网络技术及应用——大学计算机基础教育规划教材》低价购书_教材教辅考试_孔网...
  8. 【codevs1316NOIP2012PJ】文化之旅,无题
  9. bootstrap表单拖拽生成器插件_web前端常用插件、工具类库汇总,新手必收藏!!!...
  10. python文件实时同步_pyinotify模块实时文件同步
  11. BiquadFilterNode
  12. HDOJ 3507 Print Article(DP + 斜率优化)
  13. 计算机第二章测试题及答案,计算机组成原理第二章练习题及答案
  14. nginx/tengine限制流量如何配置
  15. 联想笔记本上Ubuntu无线网卡问题
  16. qt开发之获取鼠标的相对位置和绝对位置
  17. 2018年android常用的框架介绍
  18. 骨龄仪存储卡损坏处理方案
  19. 图片循环滚动代码(无缝滚动)
  20. 2021年全球电主轴市场销售额达到了14亿美元,预计2028年将达到21亿美元

热门文章

  1. ES PS TS 流的区别
  2. 传说中的5G iPhone真的来了?!
  3. 【简单搜索02】生日蛋糕
  4. 【励志】我的研究生三年-公子龙
  5. Android手机获取QQ闪照的方法
  6. 使用js实现二级联动表
  7. 现货黄金白银的短线技巧
  8. P2320 [HNOI2006]鬼谷子的钱袋
  9. 解决:win10 休眠项消失,无法使用休眠 powercfg /h /size 50 连到系统上的设备没有发挥作用
  10. 虚拟机连接ftp服务器,虚拟机链接ftp服务器