拦截器和过滤器的区别

过滤器和拦截器的区别:
首先关于文件目录要注意的地方:
把jsp文件放在WEB-INF目录下其实是:
为了保证系统的安全性,web应用的内容结构中,把所有的静态内容放在web-content目录下。把所有的动态内容(.jsp)放在WEB-INF目录下的/views/目录下,放在/WEB-INF/views/目录下的jsp是**不能通过浏览器的文件夹地址url直接访问***的。只能通过mvc的controller(控制器)进行的跳转。

①拦截器是基于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之前。

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支持的,


转载博客https://www.cnblogs.com/panxuejun/p/7715917.html

一个实例验证的博客基于springmvc添加链接描述

Java过滤器与拦截器区别与执行先后关系相关推荐

  1. JAVA过滤器以及拦截器的基本介绍以及使用

    JAVA过滤器以及拦截器的使用介绍 一 过滤器 1.1 过滤器简单介绍 JAVA过滤器能够对目标资源的请求和响应进行截取,对目标资源的请求和响应进行预处理,然后交给下一个过滤器或servlet处理. ...

  2. Java 过滤器与拦截器的区别

    什么是过滤器(Filter) 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然后再传入Servlet或Struts2的 action ...

  3. java过滤器原理,拦截器,过滤器,监听器 区别及执行顺序

    本文引用该作者(花开半夏)著作内容,觉得写的很好,记录一下便于回看防止失踪,更多详情请查看原作者. 同时还搜罗了其他便于理解的博文感兴趣的可以看看促进理解 拦截器,过滤器,监听器执行顺序(被拦截个人过 ...

  4. java过滤器和拦截器的使用及其区别

    1.过滤器: 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数 ...

  5. 聊聊过滤器与拦截器区别

    开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 1. 过滤器(Filter) Servlet 中的过滤器 Filter 实现了 javax.s ...

  6. Java过滤器与拦截器的区别(一文搞懂)

    Hey,我是寅贝勒,后端开发一枚

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

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

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

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

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

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

最新文章

  1. 帧布局 (FrameLayout)
  2. python测试udp端口_Linux系统的ECS实例中TCP/UDP端口测试及验证方法说明
  3. 【最贴心】C++字符串转换(stoi;stol;stoul;stoll;stoull;stof;stod;stold)
  4. 前端性能——数据持久化
  5. 机器学习系统:设计与实现 计算图
  6. intel ssd toolbox 绿色单文件_你想要的大容量来了!影驰擎GA-E 16TB SSD上手:速度喜人-SSD,固态 ——快科技(驱动之家旗下媒体)-...
  7. Spring注入方式及用到的注解 -----@Component,@Service,@Controller,@Repository
  8. Docker 开启镜像加速 (网易和阿里)
  9. 微信小程序:使用阿里icon图标
  10. Kindle 文言文 古汉语 字典
  11. Scrapy(爬虫)中文手册
  12. esp8266 python 74hc595_十九 ,ESP32 74HC595 的使用
  13. vue 实现验证码、刷新以及校验验证码输入是否准确
  14. 定时计数程序c语言,MCS-51系列单片机C语言编程定时/计数器程序模板
  15. 商城-商品规格管理-商品规格参数管理
  16. 磁盘IO遇到瓶颈时内存Cache的策略
  17. vue如何动态获取数据改变背景颜色和字体颜色以及获取图片
  18. OFDM学习笔记(六)(峰均值问题)
  19. 南理工校外调剂计算机有消息,提醒!这些学校已经开启预调剂了!
  20. Git 上传忽略文件设置 .ignore exclude

热门文章

  1. TCP和UDP------报文格式
  2. 在前端培训机构怎么系统学习前端知识
  3. 大数据专业人士的前5大Hadoop课程
  4. 输入框内禁止输入特殊字符
  5. JAVA透视相机安卓,nx studio下载官方版-尼康nx studio软件v1.0.0 免费版 - 极光下载站...
  6. 吊打 “微信” ,直接锤爆!
  7. 编程初学者入门训练-基础语法(15题|C语言)
  8. 西南石油大学与成都深度智谷科技达成校企合作
  9. RC4加密算法C++实现
  10. 英语题目作业(30)