拦截器与过滤器的区别

拦截器与过滤器的区别文章目录一、二者理解过滤器(Filter)拦截器(Interceptor)二、拦截器与过滤器的区别区别:三、拦截器与过滤器的触发时机拦截器与过滤器触发时机不一样四、使用场景五、图解一、二者理解过滤器(Filter)过滤器,是在javaweb中将你传入的request、response提前过滤掉一些信息,或者提前设置一些参数。然后再传入Servlet或Struts2的action进行业务逻…

大家好,又见面了,我是你们的朋友全栈君。

一、二者理解

过滤器(Filter)

过滤器,是在java web中将你传入的request、response提前过滤掉一些信息,或者提前设置一些参数。然后再传入Servlet或Struts2的 action进行业务逻辑处理。比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入Servlet或Struts2的action前统一设置字符集,或者去除掉一些非法字符。

拦截器(Interceptor)

拦截器,是面向切面编程(AOP,Aspect Oriented Program)的。就是在你的Service或者一个方法前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

通俗理解:
(1)过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(理解:就是一堆字母中取一个B)
(2)拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。(理解:就是一堆字母中,干预它,通过验证的少点,顺便干点别的东西)

二、拦截器与过滤器的区别

区别:

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

三、拦截器与过滤器的触发时机

拦截器与过滤器触发时机不一样

过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

过滤器包裹servlet,servlet包裹住拦截器

四、使用场景

SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如hibernate,在进入处理器打开Session,在完成后关闭Session。

五、图解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160974.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SEO优化网站教程百度_人员优化流程

    SEO优化网站教程百度_人员优化流程一准备1、心态长时间,不断学习。学习建站、基础代码、SEO全过程、实际操作并成功。2、价值与优势流量=价值。SEO是获得客户的技能,通过引流产生价值。①客户更精准,客户是主动的;②成本低、排名稳定、关键词有可扩展性。3、SEO工作①PC站优化:网站架构、页面关系、代码优化、链接推送等;WAP优化:继承PC站的优化成果,进行代码优化、移动适配;②内容发布:管理原创内容、转载内容、用户内容的更新频率与数量;③数据分析:关注收录量、收录率、展现量。④做日志分析,对服务器/网站进行监

    2022年9月18日
    4
  • IntelliJ IDEA 2021.5.2激活码【在线注册码/序列号/破解码】

    IntelliJ IDEA 2021.5.2激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    66
  • MySQL 获得当前日期时间 函数「建议收藏」

    MySQL 获得当前日期时间 函数「建议收藏」MySQL获得当前日期时间函数获得当前日期+时间(date+time)函数:now()mysql>selectnow();+———————+|now()|+———————+|2008-08-0822:20:46|+———————+获得当前日期+时间(date+time)函数:sysdate()sysdate()日期时间函数跟now()类似,不同之处.

    2022年10月5日
    2
  • 数据库习题及答案5

    数据库习题及答案5模拟测验1一、1 2 3 4 5 6 7 8 9 10A D C c D A C A A C一、选择题(在每个小题四个备选答案中选出一个正确答案,填在题末的括号中)(本大题共10小题,每小题2分,总计20分)()是位于用户与操作系统之间的一层数据管理软件,它属于系统软件,它为用户或应用程序提供访问数据库的方法。数据库在建立、使用和维护时由其统一管理、统一控制。A.DBMSB.DBC.DBSD.DBA下列四项中,不属于SQL2005实用程序的是()。A.对象资源管理器B.查询分析.

    2025年6月9日
    4
  • IDEA 2019.3.4激活码 licences key is in_通用破解码

    IDEA 2019.3.4激活码 licences key is in_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    591
  • php取得json_decode中的值,php json decode-获取值[通俗易懂]

    php取得json_decode中的值,php json decode-获取值[通俗易懂]正如Danp已经说过的,返回的JSON包含在函数调用中(由jsoncallback=json)你不能完全摆脱这个,但是,只是用AreaSearch?jsoncallback=&lat=41.1131514&lng=-74.0437521至少删除json在字符串的开头,您可以通过以下方式除去括号:$json=trim(trim($json),”();”);给予:{items:[…

    2022年7月17日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号