Spring Boot 嵌入式Servlet容器启动原理

【Spring Boot】配置嵌入式Servlet容器及启动原理 SpringBoot配置嵌入式Servlet容器定制和修改Servlet容器相关配置全局配置文件编写WebServerFactoryCustomizer注册Servlet三大组件注册Servlet注册Filter注册ListenerSpringBoot注册DispatcherServlet切换嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 定制和修改Servlet容器相关配置 可以通过全局配置文件或者自己编写WebServerFactoryCustomiz 阅读详情

1,Spring Boot 应用启动运行run方法

2,refreshContext(context);Spring Boot刷新IOC容器【创建IOC容器对象,并初始化容器,创建容器中的每一个组件】;如果是web应用创建一个web的ioc容器:AnnotationConfigEmbeddedWebApplicationContext,否则创建一个默认的容器:AnnotationConfigApplicationContext

3,refresh(context);刷新刚才创建好的ioc容器;

public void refresh() throws BeansException, IllegalStateException {
   synchronized (this.startupShutdownMonitor) {
      // Prepare this context for refreshing.
      prepareRefresh();

      // Tell the subclass to refresh the internal bean factory.
      ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

      // Prepare the bean factory for use in this context.
      prepareBeanFactory(beanFactory);

      try {
         // Allows post-processing of the bean factory in context subclasses.
         postProcessBeanFactory(beanFactory);

         // Invoke factory processors registered as beans in the context.
         invokeBeanFactoryPostProcessors(beanFactory);

         // Register bean processors that intercept bean creation.
         registerBeanPostProcessors(beanFactory);

         // Initialize message source for this context.
         initMessageSource();

         // Initialize event multicaster for this context.
         initApplicationEventMulticaster();

         // Initialize other special beans in specific context subclasses.
         onRefresh();

         // Check for listener beans and register them.
         registerListeners();

         // Instantiate all remaining (non-lazy-init) singletons.
         finishBeanFactoryInitialization(beanFactory);

         // Last step: publish corresponding event.
         finishRefresh();
      }

      catch (BeansException ex) {
         if (logger.isWarnEnabled()) {
            logger.warn("Exception encountered during context initialization - " +
                  "cancelling refresh attempt: " + ex);
         }

         // Destroy already created singletons to avoid dangling resources.
         destroyBeans();

         // Reset 'active' flag.
         cancelRefresh(ex);

         // Propagate exception to caller.
         throw ex;
      }

      finally {
         // Reset common introspection caches in Spring's core, since we
         // might not ever need metadata for singleton beans anymore...
         resetCommonCaches();
      }
   }
}

4,onRefresh():web的ioc容器重写了onRefresh方法

5,web的ioc容器会创建嵌入式的 Servlet 容器:createEmbeddedServletContainer();

6,获取嵌入式的 Servlet 容器工厂:

EmbeddedServletContainerFactory containerFactory = this.getEmbeddedServletContainerFactory();

          从ioc容器中获取 EmbeddedServletContainerFactory 组件;TomcatEmbeddedServletContainerFactory 创建对象,后置处理器发现是这个对象,就获取所有的定制器来先定制Servlet容器的相关配置;

7,使用容器工厂获取嵌入式的 Servlet 容器:

this.embeddedServletContainer = containerFactory.getEmbeddedServletContainer(new ServletContextInitializer[]{this.getSelfInitializer()});

8,嵌入式的 Servlet 容器创建对象并启动 Servlet 容器:(IOC容器启动创建嵌入式的 Servlet 容器 )

          先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来;

 

可以结合 Spring Boot 中嵌入式 Servlet 容器自动配置原理 浏览。

深入解析Apollo Lattice Planner:自动驾驶轨迹规划的核心算法与实践 本文深入解析了百度Apollo自动驾驶平台中的核心轨迹规划算法——Lattice Planner。文章详细阐述了其作为车辆“即时决策者”的工作原理,通过“采样-评估”的六步流程(Frenet坐标转换、状态采样、轨迹生成、硬约束过滤、代价函数打分及决策平滑),在复杂路况下实时规划出安全、舒适、高效的行驶轨迹。该算法是自动驾驶实现智能决策与精准控制的关键技术。 阅读详情

相关推荐

2023东华大学机试OJ进阶版1-81题

先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。

m0_49263811的博客 2794

SpringBoot 如何使用 Servlet 容器

Servlet 容器是指能够运行 Servlet 和 JSP 的 Web 服务器。它可以接收 HTTP 请求并将其转发到相应的 Servlet 或 JSP 进行处理,然后将响应发送回客户端。常见的 Servlet 容器包括 Tomcat、Jetty、Undertow 等。SpringBoot 提供了一个内嵌的 Servlet 容器,它可以让我们在不需要安装和配置外部 Servlet 容器的情况下,直接运行我们的 Web 应用程序。

it_xushixiong的博客 1580

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 259

SpringBoot——嵌入式 Servlet容器_servlet 容器怎么配置

由于SpringBoot默认是以 jar包的方式启动嵌入的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。注册三大组件的方式如下:【1】通过注册自定义的Servlet。【2】通过 FilterRegistrationBean 注册拦截器 Filter。

2401_85015500的博客 1119

手把手实战:快速构建合同智能审查Agent

配置“模型供应商”,选择 “OpenAI-API-compatible”,输入申请到的 “API Key” 和 “URL” 后点击“保存”,如下图示例完成 “AlayaNew/DeepSeek-R1。至此,我们完成了合同智能审核Agent的构建,我们也可以在Dify中把这个智能体发布为API服务,这样企业其它应用如OA就可以通过API集成,在原合同流程中实现智能审核工作。该节点“输入变量”中,配置从“开始”节点中获取上传的文件,输出变量就是合同的内容,配置如下图。接下来我们开始创建智能体。

weixin_46880696的博客 4403

【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track

**AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。

zwhszdx的博客 958

Spring Boot 之 Servlet容器 配置和启动流程

Spring Boot 之 Servlet 容器配置和启动流程。

bluemysky的博客 2552

PostgreSQL+PostGIS空间数据入库实战:从矢量栅格到GeoServer发布全流程

本文详细介绍了将矢量与栅格空间数据导入PostgreSQL并利用PostGIS扩展进行管理的完整流程。内容涵盖环境搭建、使用shp2pgsql和raster2pgsql工具进行数据入库、基础空间查询验证,以及最终通过GeoServer发布为地图服务的实战步骤,为构建空间数据平台提供清晰指引。

weixin_29268267的博客 289

SpringBoot内置servlet容器分析

springboot内置Tomcat依赖图 如上图所示Tomcat在spring-boot-starter-web中自动引入 如何修改内置Tomcat属性 如果是正常的Tomcat容器可以通过在conf/web.xml、conf/server.xml文件来修改配置,但内置Tomcat并没有这两个文件,那么如何修改呢? 通过看官方文档知道可以通过server.port属性更改Tomcat端口,由我...

KevinDai007的博客 2594

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 227

【Python_PySide6学习笔记(二十四)】菜单栏QMenuBar类的基本用法

此篇文章中介绍 PySide6 中 QMenuBar 类的基本用法,包括"创建菜单栏"、"创建一级菜单"、"创建二级菜单"等,会持续更新,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 1623

Spring boot中嵌入式Servlet容器的配置和启动原理

以下分析基于Springboot2.0以上版本,1.X版本跟2.0以上版本源码差异性较大 嵌入式Servlet容器的自动配置原理流程如下: SpringBoot 根据的依赖信息(默认是tomcat),创建对应的WebServerFactoryCustomizer(定制器,用来定制一些属性,默认为tomcat 所以就是定制tomcat的一些属性); WebServerFactoryCustomizerBeanPostProcessor(web工厂定制器的后置处理器)获取所有类型为web服务工厂定制器的组件(

湟同学你好的博客 567

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

servlet容器_Spring Boot学习04嵌入式Servlet容器启动原理

注:看完这一篇再回头看上一篇就会理解了上一篇文章解释了嵌入式Servlet容器的默认配置和修改配置的原理,但其前提条件是创建嵌入式Servlet容器工厂。下面就进行debug解释嵌入式Servlet容器是怎么启动的。1、来到ServletWebServerFactoryConfiguration类给组件TomcatServletWebServerFactory打上断点。再来到TomcatServl...

weixin_39608479的博客 67

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spring boot 嵌入式Servlet容器启动原理

1.)SpringBoot应用启动运行run方法 2.、refreshContext(context);SpringBoot刷新IOC容器【创建IOC容器对象,并初始化容器,创建容器中的每一个组件】;如果是web应用创建**AnnotationConfigEmbeddedWebApplicationContext**,否则:**AnnotationConfigApplicationContext** 3)、refresh(context);**刷新刚才...

CB_Beginner的博客 156

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Spring Boot】(20)、Spring Boot嵌入式Servlet容器启动原理

过程&原理:    1)、Spring Boot应用启动运行run方法:public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext...

caychen的博客 1216

SpringBoot嵌入式Servlet容器启动原理

嵌入式Servlet容器启动原理 前面我们总结了Spring Boot中嵌入式Servlet容器自动配置原理,也提到了Spring Boot2.0版本中使用ServletWebServerFactoryConfiguration替换了EmbeddedServletContainerAutoConfiguration,那么什么时候创建嵌入式的Servlet容器工厂以及什么时候获取嵌入式的Servlet容器并启动Tomcat呢?我们进入到ServletWebServerFactoryConfiguration中

jqdelove的博客 269

ing boot中嵌入式Servlet容器的配置和启动原理

ing boot中嵌入式Servlet容器的配置和启动原理 湟同学你好 2020-11-23 14:49:44 69 收藏 1 分类专栏: Java 学习小结 文章标签: tomcat spring boot java 版权 以下分析基于Springboot2.0以上版本,1.X版本跟2.0以上版本源码差异性较大 嵌入式Servlet容器的自动配置原理流程如下: SpringBoot 根据的依赖信息(默认是tomcat),创建对应的WebServerFactoryCustomizer(定制器,用来定制一

weixin_52416367的博客 232

springboot学习之旅05-Spring Boot 2.0.2 版本嵌入式Servlet容器自动配置及启动原理分析

作者:mujun_ 链接:https://www.jianshu.com/p/017a7f40efff 来源:简书 Spring Boot 2.0.2 版本的嵌入式Servlet容器自动配置是通过WebServerFactoryCustomizer定制器来定制的,而在Spring Boot 1.x 版本中我们是通过EmbeddedServletContainerCustomizer嵌入式的Serv...

qq_38009397的博客 296

Spring Boot 自动配置servlet容器原理

以tomcat为例: 嵌入式Servlet容器自动配置: //org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration @Configuration @ConditionalOnWebApplication @EnableConfiguration...

sakuragio的博客 393

配置嵌入式servlet容器

springboot默认是用的Tomcat作为嵌入式的servlet容器; 问题? 之前: 外置的Tomcat需要在外面Tomcat的conf的server.xml,webxml..配置文件进行修改 现在如何修改? 在配置文件.properties或者.yml 修改和server有关的配置, server.xx 能否支持其他的, 编写一个EmbeddedServletContainerCustomizer:嵌入式servlet容器的定制器;来修改servlet容器的配置 发现在Spring Bo

qq_42058441的博客 973

Spring Boot 使用外置的 Servlet 容器&启动原理

嵌入式 Servlet 容器:应用打成可执行的jar包 优点:简单,便携 缺点:默认不支持JSP,优化定制比较复杂(使用定制器【ServerProperties、自定义EmbeddedServletContainerCustomizer】,自己编写嵌入式Servlet容器的创建工厂【EmbeddedServletContainerFactory】 ); 外置的Servle...

Java_Glory的博客 309

springboot嵌入式servlet容器

EmbeddedServletContainerFactory: 嵌入式servlet容器工厂。实现如下 JettyEmbeddedServletContainerFactory TomcatEmbeddedServletContainerFactory UndertowEmbeddedServletContainerFactory EmbeddedServletContainer: 嵌入式的Servlet容器。实现如下 JettyEmbeddedServletContainer Tomca.

头皮发麻 558

Spring Boot Web开发(四)

1、配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器; 1)、如何定制和修改Servlet容器的相关配置; 1、修改和server有关的配置(ServerProperties【也是WebServerFactoryCustomizer】); ```properties server.port=8081 server.context-pa...

ls_wifi的博客 238

SpringBoot源码学习系列之嵌入式Servlet容器

从自动配置类里,我们并不能很明确地理解自动配置是怎么运行的,只看重关键的一些信息点,比如注册了Tomcat的ServletWebServer工厂的定制器类,方法是tomcatServletWebServerFactoryCustomizer,还有一个后置处理类BeanPostProcessorsRegistrar,后置处理是Spring源码里是很关键的,所以这里可以继续点一下TomcatServletWebServerFactoryCustomizer,Tomcat的webServer工厂定制器类。

2501_90222539的博客 492
上一篇: Spring Boot 中嵌入式 Servlet 容器自动配置原理
下一篇: Spring Boot 创建Packaging为War包的应用并启动
Java_Glory
博客等级 码龄8年 66粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值