本文引用该作者(花开半夏)著作内容,觉得写的很好,记录一下便于回看防止失踪,更多详情请查看原作者。
同时还搜罗了其他便于理解的博文感兴趣的可以看看促进理解
拦截器,过滤器,监听器执行顺序(被拦截个人过滤器)
https://javaforall.cn/128546.html
这里是修真院后方的小教室,所有的共享句子都来源于此

【背景介绍】【知识分析】【常见问题】【解决方案】【编码实战】【思维拓展】【更多讨论】【参考文献】

从8个方面深入分析后端知识/技能,本篇分享的是:

【拦截器、过滤器、监听器分别有什么作用? 】

你好。 我是IT修真院郑州分院第十届学生,诚实纯洁善良的JAVA程序员。

今天分享给大家,修真院官网JAVA任务五、拓展思维的知识点——拦截器、过滤器、监听器分别有什么作用?

一、背景介绍

1 .过滤器

依赖于servlet容器。 虽然实现中几乎可以基于函数回调过滤所有请求,但它的缺点是在容器初始化时只调用一个过滤器实例。 使用过滤器的目的是进行在过滤器中变更字符代码等用于获取想要获取的数据的过滤器操作。 在过滤器中更改http servlet request的一些参数。 这包括低俗文字、危险文字等过滤。

2 .拦截器

依赖于web框架,在SpringMVC中依赖于SpringMVC框架。 实现中基于Java的反射是面向切片编程(AOP )的一种操作。 拦截器是基于web框架的调用,因此可以使用Spring的dependentinmultiplexing执行一些业务操作。 此外,拦截器实例可以在控制器的生命周期中多次调用。 然而,它的缺点是只能阻止控制器请求,而不能阻止直接访问静态资源等其他请求。

3 .监听器

web侦听器是servlet中的特殊类,可以帮助开发人员监视web上的特定事件。 实现javax.servlet.servletcontextlistener接口的服务器端程序,随web APP应用程序的启动而启动,只初始化一次,随web APP应用程序的停止而销毁。 主要作用是感知初始化和属性的变化,如请求、会话和应用程序。

二、知识分析

1 .拦截器的使用

在项目中使用:在实现接口的类springMVC.xml中配置

过滤器实现HandlerInterceptor或WebRequestInterceptor,并使用适当的prehandle(…)、postHandle)和afterCompletion)方法

(1) preHandle方法在处理请求之前调用。 因此,可以用这种方法执行一些预初始化操作,预处理当前请求,或者用这种方法作出一些判断以确定是否继续请求。 此方法的返回值是布尔值Boolean类型,返回false表示请求将终止,后续的Interceptor和Controller将不再运行。 如果返回值为true,则继续调用以下Interceptor pre handle方法;如果已经是最后一个interceptor,则调用当前请求的控制器方法:

)2) postHandle方法顾名思义在处理当前请求后执行,也就是在调用控制器方法后执行,但在dispatcher servlet返回视图进行渲染之前调用,因此此方法

)3)在整个请求结束后,即在DispatcherServlet渲染相应的视图后,执行afterCompletion方法。 该方法的主要作用是用于资源的整理工作。

2 .使用过滤器

在项目中使用:在实现接口的类web.xml中编写配置

过滤器只需实现javax.servlet.filter并重写dofilter(…)、init)、destroy)方法

实现doFilter方法以完成对请求或响应的过滤

实现init方法并读取过滤器的初始化参数

destroy (),在销毁过滤器时进行某些操作

3 .使用监听器

在项目中使用:在实现接口的类springMVC.xml中配置

侦听器接口主要有四种八种,可以监听请求域、会话域、应用程序域的生成、销毁和属性更改

创建监听对象:

)1) ServletContext:主要监听servletContext的创建,需要实现ServeltContextListener接口;

)2) ServletRequest:主要监听请求的创建,需要实现ServletRequestListener接口;

)3) http会话:主要需要监听会话的创建,实现http会话监听器接口

接收属性更改:

)1) ServletContext:主要需要拦截servletContext属性的修改、添加、删除,实现ServeltContextAttrbuteListener接口;

)2) servlet request :主要监听请求
t属性的更改、添加、删除, 需要实现ServletRequestAttrbuteListener接口; (3)HttpSession:主要监听session属性的更改、添加、删除,需要实现HttpSessionAttrbuteListener接口。

监听session的活化与钝化:httpSessionActivationListener主要监听了session的活化与钝化。

监听session与对象的绑定:httpSessionBindingListener监听了session与对象的绑定。

三、常见问题及解决

拦截器、过滤器、监听器的区别是什么?

1.从关注的点来说:过滤器拦截器作用域web请求,并对一些信息做相应的更改;监听器作用于系统级别的参数的监听,一般不做更改。

2.所依赖的支持来说:拦截器需要Spring的支持;过滤器、监听器需要servlet的支持。

3.应用场景的不同

(1)拦截器:拦截未登录、审计日志等;

(2)过滤器:设置字符编码、URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等;

(3)监听器:统计在线人数、清除过期session。

四、编码实战

详见视频。

五、扩展思考

1.拦截器、过滤器、监听器的执行顺序

监听器 > 过滤器 > 拦截器 > servlet执行 > 拦截器 > 过滤器 > 监听器

2.多个拦截器的执行顺序(两个)

(1)当俩个拦截器都实现放行操作时,顺序为preHandle 1,preHandle 2,postHandle 2,postHandle 1,afterCompletion 2,afterCompletion 1;

(2)当第一个拦截器preHandle返回false,也就是对其进行拦截时,第二个拦截器是完全不执行的,第一个拦截器只执行preHandle部分;

(3)当第一个拦截器preHandle返回true,第二个拦截器preHandle返回false,顺序为preHandle 1,preHandle 2 ,afterCompletion 1。

3.多个过滤器的执行顺序

web服务器根据Filter在web.xml中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法,在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第二个filter,如果没有,则调用目标资源。

4.多个监听器的执行顺序

一个webServlet里面若有多个监听器的话,顺序是按照加载的顺序来加载和注册的这些servlet监听器的。

七、更多讨论

1.怎样使用自定义注解实现拦截器?

首先需要定义一个自定义的注解

@Target(ElementType.METHOD )

@Retention(RetentionPolicy.RUNTIME)

public @interface AccessRequired {

}

这里的ElementType.METHOD 表示的是对方法有效

RetentionPolicy.RUNTIME

一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解

然后在编写自己的拦截器,web.xml文件中也需要配置

最后在需要拦截的方法上标上自定义注解,表示需要拦截这个方法。

2.未登录或者非vip的话,可以试看10分钟怎么解决 ?

将视频分段,前十分钟是一个请求,之后再次请求,拦截后边这个请求

3.拦截器与过滤器的区别 :

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

(2)拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

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

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

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

java过滤器原理,拦截器,过滤器,监听器 区别及执行顺序相关推荐

  1. 过滤器、拦截器、监听器的区别与使用

    一.拦截器与过滤器的区别 过滤器 (Filter) 过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法 ...

  2. java ssh过滤器_SSH中的过滤器,拦截器,监听器的一些基本认识

    今天被一个朋友问起在SSH的项目中,过滤器.拦截器.监听器都分别是什么,又都是干什么用的.结合目前学习到的和自己应用的体会,大概有以下几个方面. 1.过滤器:顾名思义就是过滤请求内容的,所谓的过滤就是 ...

  3. 排队器拦截_过滤器(Filter)和拦截器(Interceptor)的执行顺序和区别

    首先建立一个SpringBoot工程,增加一个IndexController供测试使用. @Controller public class IndexController { @GetMapping( ...

  4. 过滤器和拦截器有什么区别?

    过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种"工 ...

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

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

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

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

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

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

  8. springboot中的过滤器、拦截器、监听器整合使用

    文章目录 controller层 过滤器 拦截器 拦截器介绍 使用拦截器 监听器 监听器介绍 使用监听器 修改启动类 controller层 用于测试 @RestController public c ...

  9. 【过滤器和拦截器有什么区别】

    过滤器(Filter)和拦截器(Interceptor)都是常见的Web开发中用于处理请求和响应的中间件. 主要区别在于: 范围不同: 过滤器是基于 Servlet 规范的,作用于 Servlet 容 ...

最新文章

  1. web中常见乱码问题详解
  2. Pyinstaller封装exe-TypeError: expected str, bytes or os.PathLike object, not NoneType
  3. 【转】SVM入门(一)SVM的八股简介
  4. php 跟踪邮件,php – 电子邮件跟踪 – GMail
  5. html page背景图片,html – Fullpage.js背景图片
  6. python两个 list 获取交集,并集,差集的方法
  7. CA服务器的安装和学习.
  8. 前端使用 geetest 行为验证 web-部署教程
  9. Java NIO之缓冲区Buffer
  10. 12步让你的web1.0变成web2.0
  11. 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
  12. switch在pc上动态调试(系统:12.0.1|AMS0.19.1|E)
  13. 一文理解 Windows 身份验证原理
  14. H3C无线网络优化指导——经验之谈
  15. 微信小程序+SpringBoot实现校园快递代收平台
  16. Prometheus监控系列一 | 安装部署及配置
  17. 《50个教育法:我把三个儿子送入了斯坦福》书中的精髓:了解教育的本质,以言传身教、耐心引导的教育方式培养孩子成才。
  18. 如何破解PDF文档不能打印?
  19. IDEA java出现无效的源发行版14解决方案
  20. 6-16 猫和老鼠有多重分数 30

热门文章

  1. 2019/4/2UPC团队训练题解(A,B,E,G,I,K,L)加补题(C,D)
  2. ftp读取服务器文件是否存在,java读取ftp服务器文件是否存在
  3. 三星玄龙骑士电竞显示器Neo G9: 全面提升游戏体验的电竞显示器
  4. Python语法之集合
  5. 数学家哥德尔(Kurt Godel)的成长之路
  6. 华为GVRP实验配置
  7. 男生学网络新媒体还是计算机好,男生专业有哪几个?最适合男生的6大专业
  8. python画小猪佩奇代码
  9. 销售额下降分析,通用思路
  10. [附源码]Java计算机毕业设计SSM邦友茶行茶叶销售管理