SpringBoot注册web组件

目录

前言

一、注册Servlet组件

1.1  使用SpringBoot注解加继承HttpServet类注册

1.2 通过继承HttpServet类加配置类来进行注册

二、注册Listener组件

2.1  使用SpringBoot注解和实现ServletContextListener接口注册

2.2 ServletContextListener接口和配置类来进行注册

三、注册Filter组件

3.1  使用SpringBoot注解加实现Filter接口注册

3.2 通过实现Filter接口和配置类来进行注册通过实现


前言

Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制。Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件。

  1. Servlet:Servlet是Java Web应用程序的基础,它是一个Java类,用于处理客户端请求并生成响应。Servlet可以通过注解或web.xml文件进行配置,它通常用于处理HTTP请求和响应。
  2. Filter:Filter是一个Java类,用于拦截和处理客户端请求和响应。Filter可以在请求到达Servlet之前或响应返回客户端之前执行预处理和后处理操作,例如验证用户身份、编码解码、压缩和解压缩等。
  3. Listener:Listener是一个Java类,用于监听Web应用程序中的事件,并在事件发生时执行相应的操作。Listener可以通过注解或web.xml文件进行配置,它通常用于处理应用程序启动、停止、会话创建和销毁等事件。

总之,Servlet三大组件是Java Web应用程序的核心组件,它们分别用于处理请求、拦截请求和监听事件,从而实现了一个完整的Java Web应用程序。

一、注册Servlet组件

由于SpringBoot项目没有web.xml文件,所以无法在web.xml中注册web组件,SpringBoot有自己的方式注册web组件。

1.1  使用SpringBoot注解加继承HttpServet类注册

编写servlet,首先是要添加@WebServlet注解;代码如下:

package com.example.demo.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/first")
public class FirstServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("First Servlet......");super.doGet(req, resp);}
}

启动类添加扫描Web组件用到的注解@ServletComponentScan

OK,直接运行看效果:访问:http://localhost:8080/first

是可以直接打印出来的。

1.2 通过继承HttpServet类加配置类来进行注册

ok,接下来我们讲解第二种注册方式,通过继承HttpServet类来进行注册,代码如下:

package com.example.demo.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class SecondServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Second Servlet........");super.doGet(req, resp);}
}

这里我们需要新建一个配置类,将该Servlet加载到Spring容器中,配置类代码如下

package com.example.demo.config;import com.example.demo.servlet.SecondServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ServletConfig {// ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet@Beanpublic ServletRegistrationBean getServletRegistrationBean(){// 注册Servlet组件ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());// 将Servlet组件添加访问路径bean.addUrlMappings("/second");return bean;}
}

OK,然后我们点击运行,直接访问http://localhost:8080/second 

因此说明了两种注册方式都是可用的。 

二、注册Listener组件

2.1  使用SpringBoot注解和实现ServletContextListener接口注册

原理和上面一样只不过是直接注解,无需配置类,代码如下

package com.example.demo.listener;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;@WebListener()
public class FirstListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("FirsListener.........");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {ServletContextListener.super.contextDestroyed(sce);}
}

此时如果我们直接运行项目就会打印上面那句话,接下来我们直接运行项目,看看是否打印,

说明该方法是可行的,

2.2 ServletContextListener接口和配置类来进行注册

同样我们去掉注解使用配置类注册 ,代码如下:

package com.example.demo.listener;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class SecondListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("Second Listener...........");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {ServletContextListener.super.contextDestroyed(sce);}
}

配置类代码入下:

package com.example.demo.config;import com.example.demo.listener.SecondListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ListenerConfig {// ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet@Beanpublic ServletListenerRegistrationBean getServletListenerRegistrationBean(){// 注册Listener组件ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());return bean;}
}

 然后直接运行看看结果,

OK,同样也是没有问题的。 

三、注册Filter组件

3.1  使用SpringBoot注解加实现Filter接口注册

和上面一样,代码如下:

package com.example.demo.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Scanner;//@WebFilter("/first")
public class FirstServletFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("进入First Filter");Scanner scanner = new Scanner(System.in);boolean flag = scanner.nextBoolean();while(!flag){System.out.println("要输入true才放行!!!");flag = scanner.nextBoolean();}filterChain.doFilter(servletRequest,servletResponse);scanner.close();}@Overridepublic void destroy() {Filter.super.destroy();}
}

这里访问/frist的话/我们要输入true才进行放行,看看是否成功过滤, 

OK,这里是成功了的,接下来也是一样的操作 

3.2 通过实现Filter接口和配置类来进行注册通过实现

代码如下:

package com.example.demo.filter;import javax.servlet.*;
import java.io.IOException;
import java.util.Scanner;public class SecondFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("进入Second Filter");Scanner scanner = new Scanner(System.in);boolean flag = scanner.nextBoolean();while(!flag){System.out.println("要输入true才可以放行!!!");flag = scanner.nextBoolean();}filterChain.doFilter(servletRequest,servletResponse);scanner.close();}@Overridepublic void destroy() {Filter.super.destroy();}
}

配置类代码如下:

package com.example.demo.config;import com.example.demo.filter.SecondFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {// ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet@Beanpublic FilterRegistrationBean getFilterRegistrationBean (){// 注册filter组件FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());// 添加过滤路径bean.addUrlPatterns("/second");return bean;}
}

同样这里访问/second的话/我们要输入true才进行放行,看看是否成功过滤,

OK,这里已经成功实现了!!! 

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

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

相关文章

【Spring】Spring 创建和使用

Spring 创建和使用 一. 创建 Spring 项目1. 创建⼀个 Maven 项目2. 添加 Spring 框架⽀持3. 添加启动类 二. 存储 Bean 对象1. 创建 Bean2. 将 Bean 注册到容器 三. 获取并使⽤ Bean 对象1. 创建 Spring 上下文2. 获取指定的 Bean 对象3. 使用 Bean Spring 就是⼀个包含了众多⼯…

函数

章节目录: 一、定义一个函数1.1 相关概述1.2 句式规则 二、参数传递2.1 变量类型2.2 可变与不可变2.3 传不可变对象实例2.4 传可变对象实例 三、参数3.1 必需参数3.2 关键字参数3.3 默认参数3.4 不定长参数 四、匿名函数五、强制位置参数六、结束语 一、定义一个函数…

【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点

假期第二篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现,之前记录的这一篇果然是很基础的,很多东西都讲的不够…

python复习

1.python属于解释型语言,解释器逐行解释每一句代码,然后执行 编译型语言需要由编译器生成最终可执行文件再执行 2. #单行注释""" 多行注释 """ 注释快捷键ctrl/ 3.变量是在计算机语言中能储存计算结果或表示某个数据…

Docker介绍与安装

目录 一、Docker 概述 1、什么时Docker 2、Docker的设计宗旨 4、Docker的优点 5、Docker容器和虚拟机的区别 6、 namespace的隔离(命名空间) 7、 Docker的三个核心概念 7.1 镜像 7.2 容器 7.3 仓库(Docker Hapu) 二、D…

Sentinel-2波段合成

Sentinel-2波段合成 在上一篇博客中下载了Sentinel-2数据,他有13个波段的.jp2文件,下面选取需要使用的波段进行合成。 导入了B2(蓝色)、B3(绿色)、B4(红色)、B8(近红外&…

php实战案例记录(9)一行循环不使用花括号的写法

在 PHP 中,你可以将 foreach 循环写成一行,而不使用花括号 {}。这被称为“一行循环”(Inline Loop)。 下面是将 foreach ($_GET as $key > $value) 写成一行循环的示例: foreach ($_GET as $key > $value) ech…

Ubuntu下文件的解压缩操作:常用zip和unzip

Ubuntu下文件的解\压缩 压缩一个文件夹为zip包,加参数-r: zip -r MyWeb.zip MyWeb需要排除目录里某个文件夹?例如我要去掉node_modules,以显著减小压缩包体积,此时该怎么做? zip -r MyWeb.zip ./MyWeb…

Linux--网络编程-字节序

进程间的通信: 管道、消息队列、共享内存、信号、信号量。 特点:都依赖于linux内核。 缺陷:无法多机通信。 一、网络编程: 1、地址:基于网络,ip地址端口号。 端口号作用: 一台拥有ip地址的主机…

Windows11安装MySQL8.1

安装过程中遇到任何问题均可以参考(这个博客只是单纯升级个版本和简化流程) Windows安装MySQL8教程-CSDN博客 到官网下载mysql8数据库软件 MySQL :: Download MySQL Community Server 下载完后,解压到你需要安装的文件夹 其中的配置文件内容了如下 [mysqld]# 设置3306端口po…

(c++)类和对象 下篇

目录 1.再次了解构造函数 2. Static成员 3. 友元 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 1.再次了解构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { pub…

从0开始python学习-26.selenium 强制等待、显示等待、隐式等待

目录 1. 强制等待:sleep() 2. 显示等待 3. 隐式等待 1. 强制等待 # 强制等待 from time import sleep sleep(3) 2. 显示等待 每隔一段时间不断地尝试查定位该元素如果定位到了该元素那么就返回该元素值 . 如果在规定的时间里面,没有找到&#xff0c…

前端和后端是Web开发选哪个好?

前端和后端是Web开发中的两个不同的领域,哪一种更适合学习?前景更广呢? 一、引言 Web前端开发就像装饰房间的小瓦匠,勤勤恳恳,仔仔细细,粉饰墙壁,妆点家具。会 HTML,CSS,懂点 JS。…

WARNING:tensorflow:Your input ran out of data; interrupting training. 解决方法

问题详情: WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least steps_per_epoch * epochs batches (in this case, 13800 batches). You may need to use the repeat() funct…

1.7.C++项目:仿muduo库实现并发服务器之Poller模块的设计

项目完整在: 文章目录 一、Poller模块:描述符IO事件监控模块二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、封装思想五、代码(一)框架&#…

Springboo整合Sentinel

Springboo整合Sentinel 1.启动Sentinel java -jar sentinel-dashboard-1.8.6.jar2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel) 3.引入依赖(注意版本对应) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spr…

IO学习系列之使用文件IO的接口在一个目录下,实现Linux命令“ls -l”的功能

实例要求&#xff1a;使用文件IO的接口在一个目录下&#xff0c;实现Linux命令“ls -l”的功能&#xff1b;实例分析&#xff1a;正常使用“ls -l”命令&#xff0c;会出现以下内容&#xff1a; /*- rwxrw-rw- 1 linux linux…

stm32 - 中断/定时器

stm32 - 中断/定时器 概念时钟树定时器类型基准时钟&#xff08;系统时钟&#xff09;预分频器 - 时基单元CNT计数器 - 时基单元自动重装寄存器 - 时基单元基本定时器结构通用定时器计数器模式内外时钟源选择 定时中断基本结构时序预分频器时序计数器时序 概念 时钟树 https:…

FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出)

FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出) 效果图1. 报错及解决2. xfade、xfade_opeccl 特效切换3. ffmpeg命令行详解4. 源码4.1 auto.bash4.2 geneFade.py4.3 python moviepy合并视频及音频按照(视频长度截取对应的音频在合并)4.4 命令行记录参考这…

微信小程序一对多个页面间传递数据进行通信,事件触发的实现方法

在有些场景下&#xff0c;使用组件间通信或者组件和页面间通信并不可行。比如我需要只有一个websocket实例&#xff0c;并且需要向多个页面传递我接收到的消息。 下面的方法是一个页面向其它页面&#xff08;触发事件&#xff09;传递数据&#xff0c;其它页面也可以向这个页面…