Java过滤器与拦截器区别与执行先后关系
拦截器和过滤器的区别
过滤器和拦截器的区别:
首先关于文件目录要注意的地方:
把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过滤器与拦截器区别与执行先后关系相关推荐
- JAVA过滤器以及拦截器的基本介绍以及使用
JAVA过滤器以及拦截器的使用介绍 一 过滤器 1.1 过滤器简单介绍 JAVA过滤器能够对目标资源的请求和响应进行截取,对目标资源的请求和响应进行预处理,然后交给下一个过滤器或servlet处理. ...
- Java 过滤器与拦截器的区别
什么是过滤器(Filter) 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然后再传入Servlet或Struts2的 action ...
- java过滤器原理,拦截器,过滤器,监听器 区别及执行顺序
本文引用该作者(花开半夏)著作内容,觉得写的很好,记录一下便于回看防止失踪,更多详情请查看原作者. 同时还搜罗了其他便于理解的博文感兴趣的可以看看促进理解 拦截器,过滤器,监听器执行顺序(被拦截个人过 ...
- java过滤器和拦截器的使用及其区别
1.过滤器: 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数 ...
- 聊聊过滤器与拦截器区别
开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 1. 过滤器(Filter) Servlet 中的过滤器 Filter 实现了 javax.s ...
- Java过滤器与拦截器的区别(一文搞懂)
Hey,我是寅贝勒,后端开发一枚
- 一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了
周末有个小伙伴加我微信,向我请教了一个问题:老哥,「过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊?」 听到题目我的第一感觉就是:「简单」! 毕竟这两种工具开发中用到的频 ...
- tomcat 拦截指定url_一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了
点击" 程序员内点事 "关注,选择" 设置星标 " 坚持学习,好文每日送达! 周末有个小伙伴加我微信,向我请教了一个问题:老哥,「过滤器 (Filter) 和 ...
- 过滤器 和 拦截器 6个区别,别再傻傻分不清了
周末有个小伙伴加我微信,向我请教了一个问题:老哥,过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊? 听到题目我的第一感觉就是:简单! 毕竟这两种工具开发中用到的频率都相当 ...
最新文章
- 帧布局 (FrameLayout)
- python测试udp端口_Linux系统的ECS实例中TCP/UDP端口测试及验证方法说明
- 【最贴心】C++字符串转换(stoi;stol;stoul;stoll;stoull;stof;stod;stold)
- 前端性能——数据持久化
- 机器学习系统:设计与实现 计算图
- intel ssd toolbox 绿色单文件_你想要的大容量来了!影驰擎GA-E 16TB SSD上手:速度喜人-SSD,固态 ——快科技(驱动之家旗下媒体)-...
- Spring注入方式及用到的注解 -----@Component,@Service,@Controller,@Repository
- Docker 开启镜像加速 (网易和阿里)
- 微信小程序:使用阿里icon图标
- Kindle 文言文 古汉语 字典
- Scrapy(爬虫)中文手册
- esp8266 python 74hc595_十九 ,ESP32 74HC595 的使用
- vue 实现验证码、刷新以及校验验证码输入是否准确
- 定时计数程序c语言,MCS-51系列单片机C语言编程定时/计数器程序模板
- 商城-商品规格管理-商品规格参数管理
- 磁盘IO遇到瓶颈时内存Cache的策略
- vue如何动态获取数据改变背景颜色和字体颜色以及获取图片
- OFDM学习笔记(六)(峰均值问题)
- 南理工校外调剂计算机有消息,提醒!这些学校已经开启预调剂了!
- Git 上传忽略文件设置 .ignore exclude