从Spring-Boot开始深入理解Spring系列(七)——Spring-Boot使用servlets、filter、listener、interceptor

本文详细介绍了Spring-Boot中servlet、filter、listener和interceptor的基础概念、对比、原理及实战应用。servlet是服务器端应用程序,filter用于预处理和后处理请求,listener监听事件操作,interceptor则是动态拦截action调用的对象。文中通过对比和深入理解,探讨了它们的工作原理、生命周期和执行顺序,提供了示例代码和应用场景。
摘要由CSDN通过智能技术生成

基础概念理解

servlet

Servlet 是一种运行 服务器端 的 java 应用程序,具有 独立于平台和协议 的特性,并且可以动态的生成 web 页面,它工作在 客户端请求 与 服务器响应 的中间层。
扩展认知:同时servelet也是一种JavaEE的技术规范和标准

filter

Filter 又称为过滤器,对 用户请求 进行 预处理,接着将请求交给 Servlet 进行 处理 并 生成响应,最后 Filter 再对 服务器响应 进行 后处理。Filter 是可以复用的代码片段,常用来转换 HTTP 请求、响应 和 头信息。Filter 不像 Servlet,它不能产生 响应,而是只 修改 对某一资源的 请求 或者 响应。

listener

Listener 可以监听 web 服务器中某一个 事件操作,并触发注册的 回调函数。通俗的语言就是在 application,session,request 三个对象 创建/消亡 或者 增删改 属性时,自动执行代码的功能组件。

interceptor

Java 里的拦截器是动态拦截 action 调用的对象。它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种可以提取 action 中可重用部分的方式。
类似 面向切面编程 中的 切面 和 通知,我们通过 动态代理 对一个 service() 方法添加 通知 进行功能增强。比如说在方法执行前进行 初始化处理,在方法执行后进行 后置处理。

对比

servlet和filter的关系

servlet技术规范中,定义了filter技术,并提供了接口
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

filter和listener和interceptor的对比
在这里插入图片描述
interceptor和aop的关系

aop是一种编程思想和理念,java中的拦截器是AOP思想的一种简单应用,相当于阉割版的AOP。
aop框架实现了aop的思想,例如SpringAOP、jbossAOP、aspectJ等,并且都用到了反射、JDK的动态代理/静态代理技术/cglib字节码动态生成,最终通过代理的方式通过反射调用目标类的方法
而各大主流框架所实现的拦截器,相当于是一个简化版的AOP框架,例如:mybatis的插件、structs2的拦截器、SpringMVC的拦截器。(当然,你也可以定义和实现自己的拦截器。并且很容易基于这些框架的基础之上,定义一个自己的拦截器。甚至,你可以完全自己手工实现一个简版的拦截器。)

interceptor 和 filter的关系

从本质上理解:

  • 都是一种拦截方式,都能够做预处理和后处理。但,相比于Filter, 只是框架中的Interceptor的产生作用的时间和位置、以及拦截的范围不一样
  • 都是AOP思想的一种简单实现

从使用上来讲,filter能对所有的web请求,起作用,功能更加强大。而interceptor只能对action起作用。

深入理解:

原理详解

servlet

一、Servlet生命周期分为三个阶段:
1、初始化阶段,调用init()方法
2、响应客户请求阶段,调用service()方法
3、终止阶段,调用destroy()方法
二、Servlet初始化阶段,在下列时刻Servlet容器装载Servlet
1、Servlet容器启动时自动装载某些Servlet
2、在Servlet容器启动后,客户首次向Servlet发送请求
3、Servlet类文件被更新后,重新装载Servlet。
三、Servlet接收和响应客户请求的过程
1、首先客户发送一个请求。
2、Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service()方法对请求进行响应。
3、service()方法中,对请求的方式进行了匹配,选择调用doGet,doPost等这些方法
4、在doGet、doPost等方法中调用逻辑层的方法,实现对客户的响应

注:
在Servlet接口和GenericServlet类中是没有doGet、doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值