欢迎光临散文网 会员登陆 & 注册

Spring Boot教程 | 袁庭新老师带你极速掌握Spring Boot整合Servlet三大组件

2023-11-06 18:23 作者:袁庭新  | 我要投稿

01 Servlet三大组件

不知道各位小伙伴,是否还记得Servlet、Filter、Listener三大组件的知识点?如果你忘记了,赶紧翻开你的小本本复习回顾一下吧。今天袁老师会给大家介绍如何在Spring Boot中整合Servlet三大组件,快来看看吧。

我们在进行Servlet开发时,通常首先自定义Servlet、Filter、Listener三大组件,然后在文件web.xm中进行配置。而Spring Boot使用的是内嵌式Servlet容器,并没有提供外部配置文件web.xml,那么Spring Boot又该如何整合Servlet的相关组件呢?其实Spring Boot给我们提供了组件注册和路径扫描两种方式,来整合Servlet三大组件。

在Spring Boot中,当我们使用组件注册方式整合内嵌Servlet容器的Servlet、Filter、Listener三大组件时,只需将这些自定义组件通过ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean类注册到容器中即可。

接下来我们就来看看具体的代码实现吧。

02 组件注册方式整合Servlet

1.创建自定义Servlet类。在chapter05项目中的com.cy.servletComponent包中,我们创建一个继承了HttpServlet的类MySevlet。

2.创建Servlet组件配置类。在项目com.cy.config包中,我们可以创建一个Servlet组件配置类ServletConfig,用来对Servlet相关组件进行注册。

3.启动项目进行测试。项目启动成功后,在浏览器上访问http://localhost:8080/myServlet查看数据显示。

03 使用组件注册方式整合Filter

1.创建自定义Filter类。我们可以在com.cy.servletComponent包下创建一个类MyFilter。

2.向Servlet组件配置类注册自定义Filter类。打开之前创建的Servlet组件配置类ServletConfig,将该自定义Filter类使用组件注册方式进行注册。

3.请求测试。项目启动成功后,在浏览器上访问http://localhost:8080/myFilter查看控制台打印效果(这里由于我们没有编写对应路径的请求处理方法,所以浏览器会现404错误页面,这里重点关注控制台即可)。

4.控制台会输出如下结果:

04 使用组件注册方式整合Listener

1.创建自定义Listener类。我们可以在com.cy.servletComponent包下创建一个类MyListener。

2.向Servlet组件配置类注册自定义Listener类。我们可以打开之前创建的Servlet组件配置类ServletConfig,将该自定义Listener类使用组件注册方式进行注册。

需要说明的是,Servlet容器提供了很多Listener接口,例如ServletRequestListener、HttpSessionListener、ServletContextListener 等,我们在自定义Listener类时要根据自身需求选择实现对应接口即可。

3.执行效果。完成自定义Listener组件注册后启动项目,项目启动成功后查看控制台打印效果。

单击IDEA工具控制台左侧的[Exit]按钮,就可以关闭当前项目。注意,如果我们直接单击红色按钮会强制关闭程序,浏览器就无法打印关闭监听信息,再次查看控制台打印效果。

将自定义的Servlet组件配置类ServletConfig全部注释并重启项目后,自定义的Servlet、Filter、Listener组件仍然生效。出现这种情况的主要原因是:嵌入式Servlet容器对Servlet、Filter、Listener组件进行了自动化识别和配置,而自定义的Servlet、Filter、Listener都继承/实现了对应的类/接口,同时自定义的Servlet、Filter、Listener组件都使用了@Component注解,这些组件会被自动扫描为Spring组件。

使用ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean组件组装配置的根本目的是对一些请求路径和参数进行初始化设置和组装。假设没有组件注册类,那么自定义Servlet虽然生效,但无法确定是哪个访问路径生效。自定义的Filter会对所有的请求都进行过滤,不会出现选择性过滤的情况。而自定义的Listener则没有太大影响,因为定制该组件基本不需要设置什么参数。

05 路径扫描整合Servlet三大组件

在Spring Boot中,使用路径扫描的方式整合内嵌式Servlet 容器的Seviet Fiter 、Lste三大组件时,首先需要在自定义组件上分别添加WebSevle. @WebFiter和Weblistene注解进行声明,并配置相关注解属性,然后在项目主程序启动类上使用@SerletComponentScan 注解开启组件扫描即可。

5.1 使用路径扫描方式整合

为了简化操作,在上小节自定义组件的基础上,我们使用路径扫描的方式来实现Servlet容器的Servlet、Filter、Listener三大组件的整合。

为了避免与之前编写的使用组件注册的方式相互干扰,先将之前自定义的Servlet组件配置类ServletConfig全部注释掉,同时注释掉自定义Servlet、Filter、Listener三大组件类上的@Component注解。

注释掉自定义MyServlet组件类上的@Component注解,在MyServlet组件中使用@WebServlet注解声明并配置相关属性。

注释掉自定义MyListener组件类上的@Component注解,在MyListener组件中使用@WebListener注解声明并配置相关属性。

使用相关注解配置好自定义三大组件后,需在项目主程序启动类上添加@ServletComponentScan注解,开启基于注解方式的Servlet组件扫描支持。

5.2 效果测试

启动项目,项目启动成功后查看控制台打印效果。

然后我们在浏览器上访问http://localhost:8080/annotationServlet进行测试。

接着在浏览器上访问http://localhost:8080/annotationMyFilter查看控制台打印效果。

单击IDEA工具控制台左侧的[Exit]按钮关闭当前项目,再次查看控制台打印效果。

06 回顾总结

关于Spring Boot整合Servlet三大组件,袁老师就给大家分享完了。首先,袁老师给大家介绍了SpringBoot框架整合Servlet、Filter和Listener三大核心组件;然后介绍了通过SpringBoot路径扫描整合Servlet三大组件的实现方式;最后我们通过功能测试验证是否整合成功。

关于Spring Boot整合Servlet三大组件的内容,袁老师就给大家介绍到这里了,你学会了吗?关注「袁庭新」,干货天天都不断!


Spring Boot教程 | 袁庭新老师带你极速掌握Spring Boot整合Servlet三大组件的评论 (共 条)

分享到微博请遵守国家法律