过滤器和拦截器的区别:

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

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

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

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

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

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

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

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

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

拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,

触发时机

触发时机

触发时机

有个专业词语叫触发时机

有个专业词语叫触发时机

有个专业词语叫触发时机

1.过滤器和拦截器触发时机不一样:

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

1.过滤器和拦截器触发时间和地点不一样:

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

1.过滤器和拦截器触发时间和地点不一样:

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

总结:过滤器包裹住servlet,servlet包裹住拦截器。

如下图所示:

2.过滤器的触发时机是容器后,servlet之前,所以过滤器的doFilter(

ServletRequest request, ServletResponse response, FilterChain chain

)的入参是ServletRequest ,而不是httpservletrequest。因为过滤器是在httpservlet之前。

2.过滤器的触发时机是容器后,servlet之前,所以过滤器的doFilter(

ServletRequest request, ServletResponse response, FilterChain chain

)的入参是ServletRequest ,而不是httpservletrequest。因为过滤器是在httpservlet之前。

10.过滤器

@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);这个方法中进行的。

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

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

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

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

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

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下去就得出了结论。

4.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

5.,SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

6.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

7.还有,拦截器是spring容器的,是spring支持的,

7.还有,拦截器是spring容器的,是spring支持的,

7.还有,拦截器是spring容器的,是spring支持的,

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

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

java拦截器和过滤器的区别_拦截器和过滤器的区别相关推荐

  1. 点乘和叉乘的区别_关于延时和混响的区别与专用延时器与混响器的调控技巧

    关于延时和混响的区别与专用延时器与混响器的调控技巧延时器与混响器是模拟室内声场声音信号特性的专用设备.在录音节目制作中,延时器和混响器可以在模拟的艺术声场中传递时间.空间.方位.距离等重要信息,并且可 ...

  2. iVMS-4200 Vs区别_高中和大学的这些区别虽鲜为人知,却字字有据,句句真实

    学有方法,考有技巧,优学优考策略致力于学与考的最优结合,助力学子考入理想大学! 终于到了上大学的年纪,身边的小伙伴都走上了各奔前程的路,你也不例外吧,在一个人的路上越走越远.或许这个时候的你才慢慢的懂 ...

  3. 智能擦窗机器人的社会意义_擦窗机器人的现状与应用分析

    龙源期刊网 http://www.qikan.com.cn 擦窗机器人的现状与应用分析 作者:卢威斌 杨家辉 方艳欣 崔昊 来源:<科学与财富> 2018 年第 14 期 摘 要: 擦窗户 ...

  4. Java字节流和字符流的优缺点_字节流与字符流的区别用字节流好还是用字符流好?...

    字节流: (A)FileOutputStream(File name) 创建一个文件输出流,向指定的 File 对象输出数据. (B)FileOutputStream(FileDescriptor) ...

  5. java 对象和实例有什么区别_对象和实例之间的区别

    " 类别"一词来自" 分类"(将类别放入其中的" 类别"),现在我们都听说" 类别"就像一个蓝图,但这到底是什么意思?这 ...

  6. java 协程线程的区别_线程和协程的区别的通俗说明

    表面上看协程和线程似乎是同一个东西,能达到的效果也相同,但是在底层的实现上却有着非常大的区别,在服务器端的绝大部分应用中,协程要比线程节省资源的多. 通俗易懂的讲,线程是操作系统的资源,当java程序 ...

  7. java中成员变量和全局变量的区别_成员变量与全局变量的区别

    全局变量:也叫成员变量,是指在类中定义的变量:它在整个类中都有效 全局变量又可分为:类变量和实例变量 1.类变量:又叫静态变量  用static修饰  它可以直接用类名调用  也可以用对象调用   而 ...

  8. java继承和接口的区别_继承和实现接口的区别

    1,java类可以一次继承多个接口,用implements 接口1,接口2 2,如果是接口继承接口的话也可以用extends,接口是多继承的,java类才是单继承 3,接口继承接口可以不实现父接口中的 ...

  9. java集群和分布式 区别_集群和分布式的区别?

    集群和分布式有什么区别? 分布式系统: 分布式系统(distributed system)是建立在网络之上的软件系统.正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性.因此,网络和分布式系统 ...

  10. java https http 区别_关于HTTP和HTTPS的区别

    前言: 在URL前加https://前缀表明是用SSL加密的.你的电脑与服务器之间收发的信息传输将更加安,Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和 ...

最新文章

  1. JavaFX打包工具(javafxpackager)
  2. 从零开始学习html(七)CSS样式基本知识
  3. 静态代理和JDK动态代理
  4. LoadRunner本机录制http协议程序遇到的问题以及解决方法
  5. pmtk3怎样离线安装
  6. 飞思卡尔imx7 html5,i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor...
  7. python建模大赛算法_Python数据分析kaggle-Titanic+天池-工业蒸汽量预测建模算法
  8. iPhone至少还要三年才能使用苹果自研5G调制解调器
  9. Java俩个小球碰撞的代码_java实现小球碰撞功能
  10. 利用InVEST模型的生境质量模块计算生境质量
  11. 人生之路1.20代码 第五部分
  12. 疯狂模渲大师体验版安装教程|效果图设计师怎么安装并注册3dmax疯狂模渲大师体验版?
  13. Multiprocessing 学会多进程 (莫烦 Python 教程)笔记-4-进程池pool
  14. 宏宇社:国外lead入门教程(一)lead联盟常见收款工具
  15. 日本XREA空间使用教程
  16. 使用JBE(Java Bytecode Editor)修改Java字节码
  17. GB/T 10707 橡胶燃烧性能
  18. Win10任务栏软件图标变成白色如何解决?
  19. 【操作系统基础】操作系统核心概述
  20. python如何计算复利_复利到底怎么计算?

热门文章

  1. springboot整合lua脚本
  2. 联想电脑尺寸在哪里看_联想笔记本电脑型号查看方式、含义介绍【图文教程】...
  3. 数字信号处理(matlab版)(第3版) pdf,数字信号处理-(第3版)-(MATLAB版)
  4. php和jsp有什么区别,php和jsp之间的区别是什么
  5. C++编写COM组件 ATL工程
  6. LintCode #4. 丑数 II
  7. 论文3 VScodetexliveSumatraPDF打造完美书写论文工具
  8. linux下sybase创建数据库,sybase数据库环境搭建教程(多图教程)
  9. sybase linux下创建备份服务器,Sybase数据库备份方案
  10. Codeblocks下载安装使用教程