1 过滤器介绍

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

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

@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...");    }

2 拦截器介绍

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆;

@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...")]之间执行。

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

3 过滤器和拦截器区别

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

过滤器和拦截器的区别:

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

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

      拦截器是spring容器的,是spring支持的。

触发时机

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

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

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

ServletRequest request, ServletResponse response, FilterChain chain

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

过滤器和拦截器流程

最后来看看书本定义:

filter过滤器_web容器的过滤器Filter和拦截器Inteceptor的区别相关推荐

  1. Filter(过滤器) 和 interceptor(拦截器)的区别

    Filter(过滤器) 和 interceptor(拦截器)的区别 1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容 ...

  2. 过滤器(Filter)和拦截器(Interceptor)的区别

    来自:http://www.cnblogs.com/luoyun/archive/2013/01/04/2844274.html 过滤器(Filter)和拦截器(Interceptor)的区别 Fil ...

  3. 过滤器(Filter)与拦截器(Interceptor )区别(转)

    原文地址:https://www.cnblogs.com/junzi2099/p/8022058.html#_labelTop 原文地址:https://www.cnblogs.com/junzi20 ...

  4. 一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了

    周末有个小伙伴加我微信,向我请教了一个问题:老哥,「过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊?」 听到题目我的第一感觉就是:「简单」! 毕竟这两种工具开发中用到的频 ...

  5. tomcat 拦截指定url_一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了

    点击" 程序员内点事 "关注,选择" 设置星标 " 坚持学习,好文每日送达! 周末有个小伙伴加我微信,向我请教了一个问题:老哥,「过滤器 (Filter) 和 ...

  6. 过滤器 和 拦截器 6个区别,别再傻傻分不清了

    周末有个小伙伴加我微信,向我请教了一个问题:老哥,过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊? 听到题目我的第一感觉就是:简单! 毕竟这两种工具开发中用到的频率都相当 ...

  7. 拦截器和过滤器区别_新手能看懂的(Interceptor)和(Filter)区别与使用!

    一.拦截器与过滤器 我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,AOP不是一种具体的技术,而是一种 ...

  8. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

  9. 拦截器(Inteceptor),过滤器(Filter),切面(Aspect)处理HttpServiceReqeust请求

    1.拦截器 java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可 ...

最新文章

  1. 微生物组助手——最易学的扩增子、宏基因组分析流程
  2. 虚拟服务器nodejs项目部署打包,nodejs+express搭建服务器及vue项目部署打包
  3. MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
  4. docker -v 覆盖了容器中的文件_springboot配合maven打成可执行jar,构建镜像部署到docker容器中...
  5. 我们并没有觉得MapReduce速度慢,直到Spark出现
  6. dlut-KFQ概率上机2
  7. 一个好的销售团队需具备的4个特点
  8. 微软公布Netgear 固件严重漏洞详情,可盗取用户身份并攻陷系统
  9. Bailian2884 Problem III【入门】
  10. 83)PHP,配置文件功能
  11. centos7恢复mysql数据库_centos7 mysql数据库的安装与使用
  12. sudo rpm安装时$USER是root
  13. Ubuntu上安装ns2-2.34
  14. 移动硬盘上安装Windows 10系统
  15. 记录自己在厦门两年来的面试经历--完结篇
  16. matlab 方位角 经纬度,经纬度转方位角matlab程序
  17. 华为云×奇点云 | 828 B2B企业节,一起成就好生意
  18. 委托代理问题------The principal-agent problem
  19. 怎么看自己的操作系统?
  20. 保险业的5项CX预测

热门文章

  1. 简易自动电阻测试仪_开始自动测试您的网站的简单方法
  2. Java 树的构造算法
  3. golang 所有进程休眠_Golang-进程无故消失?
  4. 万字长文,一篇文章带你入门Python
  5. 这十个不常见但却十分实用的Python库,你知道几个?
  6. 那些年我们一起写过的Python爬虫
  7. 互斥锁(python 版)
  8. Python私有化与poperty方法
  9. 零基础入门深度学习(7) - 递归神经网络
  10. 主成分分析(PCA)-最大方差解释