Java过滤器与SpringMVC拦截器之间的关系与区别[通俗易懂]

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能

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

       今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能少走些弯路)。

 

  过滤器和拦截器的区别:

  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

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

  写了点测试代码,顺便整理一下思路,搞清楚这几者之间的顺序:

  1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("before...");
        chain.doFilter(request, response);
        System.out.println("after...");
    }
 

  chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。

  2.拦截器是被包裹在过滤器之中的。

 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
 

  a.preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在 [System.out.println(“before…”)][chain.doFilter(request, response)]之间执行。

  b.preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。

  c.afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)][System.out.println(“after…”)]之间执行。

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

  

Java过滤器与SpringMVC拦截器之间的关系与区别[通俗易懂]

 

  总结:拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。

  我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器接口的适配器类HandlerInterceptorAdapter,继承这个类然后重写一下需要用到的方法就行了,可以少几行代码,这种方式Java中很多地方都有体现。

以上部分是摘自神一样存在的博客,参考了一下这个帖子:http://haohaoxuexi.iteye.com/blog/1750680

大家还可以参考一下这个电子书的截图:

Java过滤器与SpringMVC拦截器之间的关系与区别[通俗易懂]

 

 

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128590.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • EVE模拟器使用说明

    EVE模拟器使用说明本着分享和共同学习的态度,希望能给有需要的人带来帮助。 转载于:https://blog.51cto.com/dashu666/1971728

  • Django(9)url指定默认参数「建议收藏」

    Django(9)url指定默认参数「建议收藏」前言当我们访问网页的时候,后台返回列表中有n条数据,此时我们会使用分页,比如一页只展示10条,但是我们访问第一页的时候大多数情况下,都会给url一个默认值,访问的时候直接展示第一页数据案例我们的

  • javaclasscastexception Scala_java unchecked cast object to T

    javaclasscastexception Scala_java unchecked cast object to T在处理JSON时将一个JSONArray强转成List,在线上环境运行正常,但是换了一个环境就出现ClassCastException这个异常。编译时这个强转不会报错,但是运行时却可能出现异常。所以在对对象进行强制转换的时候一定要加以小心,想好实际的对象类型是什么,可不可以强转。

  • 苹果套路直播计算机隐藏版,套路计算器app,套路计算器隐藏官网版app预约 v1.0 – 浏览器家园…

    苹果套路直播计算机隐藏版,套路计算器app,套路计算器隐藏官网版app预约 v1.0 – 浏览器家园…套路计算器隐藏官网版app软件是一款最新人气计算器玩法,大家可以在这里发现非常多有趣的玩法,超级适合大家进行整蛊以及活跃气氛适应的,计算器里面会有各种好玩有趣的公式,帮你计算出各种想要的问题回答,非常类似于星座方面的玩法,说不定可以帮你解决你心中的各种问题疑问,如果你想尝试的话,就赶紧下载体验吧。套路计算器隐藏官网版app软件特色:1、玩法非常简单,输入自己的想要提的问题,就可以自动算出结果!2、…

  • Windows server WSUS补丁服务器搭建

    写在前面关于微软Windows操作系统补丁更新,针对于客户生产环境补丁更新,为了安全起见不得不建议搭建相应的补丁服务器,利用自动或者手动更新指定服务器的最新补丁。借用闲暇时间做相应的总结,方便后期工作中参考。搭建条件首先安装相应的.NET环境,IIS环境, 存放补丁包,需要充裕的磁盘空间。搭建过程首先下载Wsus3.0的安装文件,这里给出简体中文版的下载地址,…

  • 吉木萨尔县文化旅游策划案——天山圣地,武侠之都!「建议收藏」

    吉木萨尔县文化旅游策划案——天山圣地,武侠之都!「建议收藏」吉木萨尔县文化旅游策划案——天山圣地,武侠之都!熊大寻旅游策划公司/文2011年熊大寻旅游策划公司受邀对新疆吉木萨尔县进行旅游策划和规划,我们的核心策略是:吉木萨尔有空前的历史性机会——天山旅游并没有真正做起来!天山旅游仅限于天池,每年几十万游客跟天山的品牌严重不匹配。天山旅游目前仅限于自然景观,天山厚重的历史文化呢?到哪里领略?到哪里体验?天山历史文化的中心和重心在哪里?吉木萨尔!新疆旅游…

发表回复

您的电子邮箱地址不会被公开。

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