Java Web之filter、listener、Interceptor

**

1、Servlet

**
Servlet 是服务端的 Java 应用程序,用于处理HTTP请求,做出相应的响应。

在这里插入图片描述

当客户端向服务器发出HTTP请求时,首先会由服务器中的 Web 容器(如Tomcat)对请求进行路由,交给该URL对应的 Servlet 进行处理,Servlet 所要做的事情就是返回适当的内容给用户。

在这里,我顺便谈谈自己对 JSP 和 Servlet 两者关系的理解。JSP 页面实际是被转换成了 Servlet 的形式运行,也就是说,我们可以将不同的 JSP 页面视为不同的 Servlet,理论上它们中的每一个都能够对客户端请求做出响应,只不过这些 Servlet 可能会将请求转发给其它 Servlet 进行处理,进而由其它 Servlet 做出响应。

要创建自己的 Servlet,可以通过以下三种方式来实现

  1. 实现 Servlet 接口
  2. 继承 GenericServlet 类
  3. 继承 HttpServlet 类

它们的 package 分别是:javax.servlet.Servlet、javax.servlet.GenericServlet、javax.servlet.http.HttpServlet。

**

2、Filter(过滤器)

**
Filter 是介于 Web 容器和 Servlet 之间的过滤器,用于过滤未到达 Servlet 的请求或者由 Servlet 生成但还未返回响应。

在这里插入图片描述

客户端请求从 Web 容器到达 Servlet 之前,会先经过 Filter,由 Filter 对 request 的某些信息进行处理之后交给 Servlet。

同样,响应从 Servlet 传回 Web 容器之前,也会被 Filter 拦截,由 Filter 对 response 进行处理之后再交给 Web 容器。

若要创建自定义 Filter,需要实现 javax.servlet.Filter 接口。

**

3、Listener(监听器)

**

Listener 是用于监听某些特定动作的监听器。当特定动作发生时,监听该动作的监听器就会自动调用对应的方法。

在这里插入图片描述

以 HttpSessionListener 为例:

在这里插入图片描述

该 Listener 监听 session 的两种状态,即创建和销毁。当 session 被创建时,会自动调用 HttpSessionListener 的 sessionCreated() 方法,我们可以在该方法中添加一些处理逻辑。当 session 被销毁时,则会调用 sessionDestroyed() 方法。

下面是 Servlet 中的 8 个 Listener 接口,可分为三类:

第一类,ServletContext 相关接口

  1. ServletContextListener:用于监听 ServletContext 的启动和销毁。
  2. ServletContextAttributeListener:用于监听 application 范围的属性变化。

第二类,HttpSession 相关接口

  1. HttpSessionListener:用于监听 session 的创建和销毁。
  2. HttpSessionIdListener:用于监听 session 的 id 是否被更改。
  3. HttpSessionAttributeListener:用于监听 session 范围的属性变化。
  4. HttpSessionActivationListener:用于监听绑定在 HttpSession 对象中的 JavaBean 状态。
  5. HttpSessionBindingListener:用于监听对象与 session 的绑定和解绑。

第三类,ServletRequest 相关接口

  1. ServletRequestListener:用于坚挺 ServletRequest 对象的初始化和销毁。
  2. ServletRequestAttributeListener:用于监听 ServletRequest 对象的属性变化。

**

4、拦截器Interceptor(Spring MVC)

**

类似 面向切面编程 中的 切面 和 通知,我们通过 动态代理 对一个 service() 方法添加 通知 进行功能增强。比如说在方法执行前进行 初始化处理,在方法执行后进行 后置处理。拦截器 的思想和 AOP 类似,区别就是 拦截器 只能对 Controller 的 HTTP 请求进行拦截。

**

5、过滤器 VS 拦截器

**
5.1 两者的区别

  1. Filter 是基于 函数回调的,而 Interceptor 则是基于 Java 反射 和 动态代理。
  2. Filter 依赖于 Servlet 容器,而 Interceptor 不依赖于 Servlet 容器。
  3. Filter 对几乎 所有的请求 起作用,而 Interceptor 只对 Controller 对请求起作用。

5.2 执行顺序
对于自定义 Servlet 对请求分发流程:

  1. Filter 过滤请求处理;
  2. Servlet 处理请求;
  3. Filter 过滤响应处理。

对于自定义 Controller 的请求分发流程:

  1. Filter 过滤请求处理;
  2. Interceptor 拦截请求处理;
  3. 对应的 HandlerAdapter 处理请求;
  4. Interceptor 拦截响应处理(postHandle());
  5. Interceptor 的最终处理(afterCompletion());
  6. Filter 过滤响应处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abp vNext微服务框架分析

abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究。我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来说几乎是看不懂的,所以研究一番后再…

.NET Conf 2019日程(北京时间)

一年一度的 .NET Conf马上就要开始了,我将日程简易的翻译了一下,并且时间全部转换为北京时间,以方便国内.NETer.第1天 (北京时间9月24日).NET Conf 2019 基调 - Scott Hunter Mads Torgersen James Montemagno Olia Gavrysh Daniel Roth Glenn Condron Bri Achtman欢迎来到 .NE…

Hibernate基础

** 一、什么是Hibernate? **   Hibernate是一个轻量级的ORMapping框架   ORMapping原理(Object Relational Mapping) ORMapping基本对应规则: 1:类跟表相对应2:类的属性跟表的字段相对应3&#xff1…

进击的.NET 在云原生时代的蜕变

你一定看过这篇文章 《进击的 Java ,云原生时代的蜕变》, 本篇文章的灵感来自于这篇文章。北京时间9.24 就将正式发布.NET Core 3.0, 所以写下这篇文章让大家全面认识.NET Core。.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发…

Hibernate懒加载问题的5种解决方案

** 1、Hibernate基础 ** Hibernate基础,传送门 ** 2、什么是Hibernate懒加载 ** 当我们查询一个对象的时候,在默认情况下,返回的只是该对象的代理对象,当用户去使用该对象的属性时,才会向数据库再一次发出查询语…

程序员过关斩将--要想获取我的用户信息,就得按照规矩来

菜菜君,我又来啦又有什么事吗?我按照你上篇文章写的JWT的方式已经把网站认证写完了,而且效果还不错那恭喜你呀,下次面试又多了一项技能不过,现在又有一个问题,我做的系统有一个合作商想要利用我们的用户信息…

E. Surprise me!(莫比乌斯反演 + 虚树 DP)

E. Surprise me! ∑i1n∑j1nϕ(aiaj)d(i,j)设paii∑i1n∑j1nϕ(ij)d(pi,pj)∑i1n∑j1nϕ(i)ϕ(j)ϕ(gcd⁡(i,j))gcd⁡(i,j)d(pi,pj)∑d1ndϕ(d)∑i1nd∑j1ndϕ(id)ϕ(jd)d(pid,pjd)[gcd⁡(i,j)1]∑d1ndϕ(d)∑k1ndμ(k)∑i1nkd∑j1nkdϕ(ikd)ϕ(jkd)d(pikd,pjkd)Tkd∑T1n(∑i1n…

Hibernate 的缓存机制

** 1、Hibernate 应用程序中按照缓存的范围,可以将缓存分为三类 ** (1.1)事务范围缓存(单Session,即一级缓存) 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存。缓存的生命周期依…

.NET分布式大规模计算利器-Orleans(一)

写在前面Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式。我在2015年下半年开始应用Orleans,当时公司的交易系统采用的架构就是基于Orl…

从单机应用到微服务,用户认证走几步?

用户认证指在用户访问服务的时候确认用户的身份,受限于HTTP无状态的特性,应用开发者需要自行实现用户认证相关功能。通常是用户登录时服务端生成通行证返回给客户端,客户端在接下来的请求中携带通行证,然后服务端通过校验该通行证…

编写优雅代码,从挖掉恶心的if/else 开始

背景长话短说, 作为开发人员经常需要根据条件灵活查询数据库,不管你是用rawsql 还是EFCore, 以下类似伪代码大家都可能遇到:特别是在大数据产品或者物联网产品中,字段甚多;if/else 写到死,一边写…

.NET Conf 2019 大会上发布.NET Core 3.0

北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开。多功能性是.Net Core 成为我们的生活一部分的最好解释。如果您是Web开发人员还是想开发桌面或移动应用程序,如果您是游戏…

Spring AOP实现原理

先说结论: Spring AOP采用的是JDK动态代理 CGLIB动态代理模式。当当前类为接口的实现时,采用JDK动态代理,否则用CGLIB、 1、AOP 的存在价值 在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成&#xff0c…

微软推出Python免费在线教程视频

开源中国曾报道过最近微软针对 Python 初学者,推出了一套免费的教程视频。这套视频名为 Python for Beginners,该在线教学视频由微软高级项目经理 Christopher Harrison、以及微软 AI Gaming 的商业开发经理 Susan Ibach 共同讲解,在课程中加…

推荐neter常用优秀开源项目系列之一

.net社区有很多优秀的开源项目,我们今天先推荐6个开源项目;1.MassTransitMassTransit 是一个自由、开源、轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序。MassTransit在现有消息传输上提供了一组广泛的功能, 从而使开发人员能够友好地使用基于…

聊聊高并发下库存加减那些事儿——“异步扣减库存”

聊聊高并发下库存加减那些事儿不定期福利发放哦聊聊高并发下库存加减那些事儿背景一般在日常开发中经常会遇到打折促销,秒杀活动,就如拼多多最近的4999抢券买爱疯11促销活动,毕竟谁的钱也不是大风刮来的,有秒杀有促销必定带来大量…

什么是MVC

什么是MVC? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面&#xf…

SpringMVC 、Struts的区别

先说结论:目前Spring MVC已经一统江山,Struts正在被抛弃 1、Spring MVC原理 Spring 体系: Spring MVC工作流程图 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获&#x…

基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理

说明:.NET Core版本为:2.2 AdminLTE版本为:2.4.18 Bootstrap版本为:3.4.1 font-awesome版本为:4.7.01、新建项目:AdminLteDemo,添加区域Admin 在Areas/Admin/Views文件夹添加文件并分别添加如下代码:_ViewImports.cshtmladdTagHel…

Spring boot——起步依赖

一、起步依赖 1、是什么 本质上是一个Maven项目对象模型(Project Object Model, POM), 定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 比如: spring-boot-dependencies^ spring-boot-pare…