当前位置: 首页 > news >正文

17、嵌入式Servlet容器

文章目录

  • 1、切换嵌入式Servlet容器
    • 1.1、默认支持的webServer
    • 1.2、切换服务器
  • 2、原理
    • 2.1、ServletWebServerApplicationContext
    • 2.2、作用
    • 2.3、ServletWebServerFactoryAutoConfiguration
    • 2.4、作用
    • 2.5、ServletWebServerFactoryConfiguration 配置类
    • 2.6、web服务器工厂作用
  • 3、定制Servlet容器
    • 3.1、方式一:修改配置文件
    • 3.2、方式二:放入自定义ServletWeb容器工厂
    • 3.3、方式三:ServletWeb容器工厂定制化器


【尚硅谷】SpringBoot2零基础入门教程-讲师:雷丰阳
笔记

路还在继续,梦还在期许

1、切换嵌入式Servlet容器

1.1、默认支持的webServer

TomcatWebServer
JettyWebServer
UndertowWebServer

ServletWebServerApplicationContext 容器启动寻找ServletWebServerFactory 并引导创建服务器。

在这里插入图片描述

1.2、切换服务器

想要切换服务器,只需要导入服务器对应的场景启动器,默认服务器是web场景导入的。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions> <!--让web场景排除默认Tomcat依赖--><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<!--加入其它服务器场景-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

2、原理

创建spring boot 应用,无需在外置部署服务器,应用内置了服务器,应用启动,内置服务器就会自动启动,spring boot 默认启动的服务器就是 Tomcat。

2.1、ServletWebServerApplicationContext

位置:org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext

SpringBoot应用启动发现当前是Web应用,因为导入web场景包-导入tomcat,判断出是web应用会创建一个web版的ioc容器 ServletWebServerApplicationContext。

2.2、作用

ServletWebServerApplicationContext 会在启动的时候寻找 ServletWebServerFactory。(Servlet 的web服务器工厂—> Servlet 的web服务器)

SpringBoot底层默认有很多的WebServer工厂。

TomcatServletWebServerFactory
JettyServletWebServerFactory
UndertowServletWebServerFactory

2.3、ServletWebServerFactoryAutoConfiguration

位置:org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration

底层的一个自动配置类,ServletWebServerFactoryAutoConfiguration,用来配置WebServer工厂。

2.4、作用

@Configuration(proxyBeanMethods = false)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,ServletWebServerFactoryConfiguration.EmbeddedJetty.class,ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration {
}

ServletWebServerFactoryAutoConfiguration导入了ServletWebServerFactoryConfiguration(配置类)

2.5、ServletWebServerFactoryConfiguration 配置类

内部有三个web服务器工厂,tomcatServletWebServerFactory、JettyServletWebServerFactory、undertowServletWebServerFactory。

根据动态判断系统中到底导入了哪个Web服务器的包。(默认是web-starter导入tomcat包),容器中就有TomcatServletWebServerFactory。

2.6、web服务器工厂作用

TomcatServletWebServerFactory 创建出Tomcat服务器并启动。

TomcatWebServer 的构造器拥有初始化方法:initialize—this.tomcat.start();

内嵌服务器,就是手动把启动服务器的代码调用。(tomcat核心jar包存在)

3、定制Servlet容器

3.1、方式一:修改配置文件

修改配置文件 server.xxx

3.2、方式二:放入自定义ServletWeb容器工厂

在配置类中放入自定义 ConfigurableServletWebServerFactory

@Bean
public ConfigurableServletWebServerFactory webServerFactory(){TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();factory.setPort(9999);return factory;
}

3.3、方式三:ServletWeb容器工厂定制化器

可以后置的修改一些ServletWeb容器工厂的规则。

xxxxxCustomizer:定制化器,可以改变xxxx的默认规则

把配置文件的值和ServletWebServerFactory 进行绑定。

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {@Overridepublic void customize(ConfigurableServletWebServerFactory server) {server.setPort(9000);}}

相关文章:

17、嵌入式Servlet容器

文章目录 1、切换嵌入式Servlet容器1.1、默认支持的webServer1.2、切换服务器 2、原理2.1、ServletWebServerApplicationContext2.2、作用2.3、ServletWebServerFactoryAutoConfiguration2.4、作用2.5、ServletWebServerFactoryConfiguration 配置类2.6、web服务器工厂作用 3、…...

倾斜摄影三维模型转换3DTILTES格式遇到的常见问题

倾斜摄影三维模型转换3DTILTES格式遇到的常见问题 将倾斜摄影三维模型从OSGB格式转换为3DTILES格式时&#xff0c;常见的问题包括&#xff1a; 1、3D Tiles生成时间较长&#xff1a;由于3D Tiles是一种高效的地理数据存储格式&#xff0c;能够支持海量的空间数据呈现和查询&am…...

手机如何访问电脑文件?(iOS和Android)

可以通过手机访问电脑文件吗&#xff1f; “我需要在我的电脑上查看一个文件&#xff0c;但我现在在外面无法实际访问它。我可以通过手机访问我的电脑文件吗&#xff1f;” 答案当然是可以的&#xff0c;无论您使用的是iOS设备还是Android设备&#xff0c;您都可以通过手机…...

TI在物联网和AI边缘计算中落伍了吗?

摘要&#xff1a;本文介绍一下TI在边缘计算工作中所做的努力。 发明“人工智能”这个term的老头儿也不会想到人工智能在中国有多火。 不管是懂还是不懂&#xff0c;啥东西披上“人工智能“的面纱都能瞬间成为大项目。 学习AI 的年轻人认识NVIDIA&#xff0c;可能不太知道DSP是…...

LoadRunner参数化最佳实践:让你的性能测试更加出色!

距离上次使用loadrunnr 已经有一年多的时间了。初做测试时在项目中用过&#xff0c;后面项目中用不到&#xff0c;自己把重点放在了工具之外的东西上&#xff0c;认为性能测试不仅仅是会用工具&#xff0c;最近又想有一把好的利器毕竟可以帮助自己更好的完成性能测试工作。这算…...

软件测试工程师需要达到什么水平才能顺利拿到 20k 无压力?

最近有粉丝朋友问&#xff1a;软件测试员需要达到什么水平才能顺利拿到 20k 无压力&#xff1f; 这里写一篇文章来详细说说&#xff1a; 目录 扎实的软件测试基础知识&#xff1a;具备自动化测试经验和技能&#xff1a;熟练掌握编程语言&#xff1a;具备性能测试、安全测试、全…...

RabbitMQ-高级篇

服务异步通信-高级篇 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6S1iAs7-1681919354777)(assets/image-20210718155003157.png)] 1.消息可靠性 消息从发送&#x…...

深度学习_Learning Rate Scheduling

我们在训练模型时学习率的设置非常重要。 学习率的大小很重要。如果它太大&#xff0c;优化就会发散&#xff0c;如果它太小&#xff0c;训练时间太长&#xff0c;否则我们最终会得到次优的结果。其次&#xff0c;衰变率同样重要。如果学习率仍然很大&#xff0c;我们可能会简…...

snmp服务利用(端口:161、199、391、705、1993)

服务介绍 简单网络管理协议 是一种广泛应用于TCP/IP网络的网络管理标准协议(应用层协议),它提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来监控和管理计算机网络的标准化管理框架(方法)。目前已颁布了SNMPv1、SNMPv2c和SNMPv3三个版本,广泛应用于网…...

MyBatis(二)—— 进阶

一、详解配置文件 1.1 核心配置文件 官方建议命名为mybatis-config.xml&#xff0c;核心配置文件里可以进行如下的配置&#xff1a; <environments> 和 <environment> mybatis可以配置多套环境&#xff08;开发一套、测试一套、、、&#xff09;&#xff0c; 在…...

婚恋交友app开发中需要注意的安全问题

前言 随着移动设备的普及&#xff0c;婚恋交友app已经成为了人们生活中重要的一部分。但是&#xff0c;这些应用的开发者需要确保应用的安全性&#xff0c;以保护用户的隐私和数据免受攻击。本文将介绍在婚恋交友app开发中需要注意的安全问题。 在当今数字化时代&#xff0c;…...

相机的内参和外参介绍

注&#xff1a;以下相机内参与外参介绍除来自网络整理外全部来自于《视觉SLAM十四讲从理论到实践 第2版》中的第5讲&#xff1a;相机与图像&#xff0c;为了方便查看&#xff0c;我将每节合并到了一幅图像中 相机与摄像机区别&#xff1a;相机着重于拍摄静态图像&#x…...

Node【包】

文章目录 &#x1f31f;前言&#x1f31f;Nodejs包&#x1f31f;什么是包&#xff1f;&#x1f31f;自定义包&#x1f31f;包配置文件&#x1f31f;示例&#x1f31f;Package.json 属性说明&#x1f31f;语义化版本号&#x1f31f;package.json示例 &#x1f31f;符合CommonJS规…...

CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》

CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION 在系统设计面试中&#xff0c;有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫迪恩的说法&#xff0c;谷歌高级研究员&#xff0c;“粗略的计算是你使用结合思想实验和常见的性能数字&#xff0c;以获得良好的感觉…...

RocketMQ高级概念

一 RocketMQ核心概念 1.消息模型&#xff08;Message Model&#xff09; RocketMQ主要由 Producer、Broker、Consumer 三部分组成&#xff0c;其中Producer 负责⽣产消息&#xff0c;Consumer 负责消费消息&#xff0c;Broker 负责存储消息。Broker 在实际部署过程中对应⼀台…...

eureka注册中心和RestTemplate

eureka注册中心和restTemplate的使用说明 eureka的作用 消费者该如何获取服务提供者的具体信息 1.服务者启动时向eureka注册自己的信息 2.eureka保存这些信息 3.消费者根据服务名称向eureka拉去提供者的信息 如果有多个服务提供者&#xff0c;消费者该如何选择&#xff1f; 服…...

redis复制的设计与实现

一、复制 1.1旧版功能的实现 旧版Redis的复制功能分为 同步&#xff08;sync&#xff09;和 命令传播。 同步用于将从服务器更新至主服务器的当前状态。命令传播用于 主服务器状态变化时&#xff0c;让主从服务器状态回归一致。 1.1.1同步 当客户端向服务端发送slaveof命令…...

Docker更换国内镜像源

什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全…...

【网络编程】网络套接字,UDP,TCP套接字编程

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 特别说明&#xff1a;本文分享的代码运行结果…...

海斯坦普Gestamp EDI 需求分析

海斯坦普Gestamp&#xff08;以下简称&#xff1a;Gestamp&#xff09;是一家总部位于西班牙的全球性汽车零部件制造商&#xff0c;目前在全球23个国家拥有超过100家工厂。Gestamp的业务涵盖了车身、底盘和机电系统等多个领域&#xff0c;其产品范围包括钣金、车身结构件、车轮…...

谐波注入抑制永磁同步电机转矩脉动的复现研究

提取特定谐波注入抑制永磁同步电机转矩脉动【复现】 [1]复现文献&#xff1a;《用谐波注入抑制永磁同步电机转矩脉动_廖勇》 [2]控制思路&#xff1a;以抑制电机电流中较大的 5、7 次谐波分量为目的&#xff0c;实时提取谐波电流&#xff0c;注入谐波电压来抵消电机运行时电机电…...

**发散创新:基于Python与OpenCV的智能交通流量实时监测系统设计

发散创新&#xff1a;基于Python与OpenCV的智能交通流量实时监测系统设计与实现 在智慧城市建设不断深化的背景下&#xff0c;智能交通系统&#xff08;ITS&#xff09; 正成为城市治理现代化的重要突破口。传统的交通信号控制多依赖固定时长或人工经验判断&#xff0c;难以应对…...

2025届最火的十大AI写作工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作这个特定的场景之内&#xff0c;精确地挑选恰当的AI论文平台&#xff0c;能够极其…...

【NotebookLM 使用教程】 Slides 指令库:11套通用PPT风格Prompt(含中英文对照)

前言适合谁&#xff1a;不想从零写提示词&#xff0c;想直接套用成熟的 PPT 风格结构。你会获得什么&#xff1a;11 套通用风格指令&#xff08;英文为主&#xff0c;含中文备用&#xff09;&#xff0c;可直接粘贴到 NotebookLM Slides 的描述/自定义。建议阅读顺序&#xff1…...

Local Moondream2快速部署:VS Code Dev Container一键开发环境

Local Moondream2快速部署&#xff1a;VS Code Dev Container一键开发环境 1. 项目简介 Local Moondream2是一个基于Moondream2构建的超轻量级视觉对话Web界面。它能够让你的电脑拥有"眼睛"&#xff0c;可以对上传的图片进行详细描述、反推绘画提示词&#xff0c;或…...

实战指南:基于快马AI生成代码,快速构建并部署一个完整企业网站

今天想和大家分享一个实战经验&#xff1a;如何用InsCode(快马)平台快速搭建一个完整的企业网站。整个过程非常流畅&#xff0c;特别适合需要快速上线展示页面的场景。 项目结构规划 首先明确企业网站需要的核心页面&#xff1a;首页、关于我们、服务项目、案例展示、团队介绍、…...

Chrome for Testing:浏览器自动化测试环境构建的标准化解决方案

Chrome for Testing&#xff1a;浏览器自动化测试环境构建的标准化解决方案 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing 核心价值解析&#xff1a;为什么选择Chrome for Testing 在现代前端自动化测试体系中…...

Jedi-vim与其他Vim插件的终极兼容性指南:避免冲突的10个技巧

Jedi-vim与其他Vim插件的终极兼容性指南&#xff1a;避免冲突的10个技巧 【免费下载链接】jedi-vim Using the jedi autocompletion library for VIM. 项目地址: https://gitcode.com/gh_mirrors/je/jedi-vim Jedi-vim是Vim编辑器中最强大的Python自动补全插件之一&…...

Cursor Free VIP终极指南:彻底解决API限制,免费畅享Pro功能的完整方案

Cursor Free VIP终极指南&#xff1a;彻底解决API限制&#xff0c;免费畅享Pro功能的完整方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功…...

docker-compose部署nginx转发前端dist8080一直在服务器访问不了

在做不出来就要被老板扔出去了&#xff0c;nginx一直访问不了 转行写代码&#xff0c;使用docker部署所有组件&#xff0c;nginx一直出问题&#xff0c;有前辈帮我看看不 1、配置的nginx2、对应的nginx.conf的配置文件3、前端的dist放在/opt/sbcw/html/dist下就是访问不了&…...