欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Springboot3.3.5 启动流程之 tomcat启动流程介绍

Springboot3.3.5 启动流程之 tomcat启动流程介绍

2025/5/4 9:47:53 来源:https://blog.csdn.net/sun_star1chen/article/details/143744974  浏览:    关键词:Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程(源码分析) 中讲到 应用上下文(applicationContext)刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server.
在这里插入图片描述

本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。

首先,通过 ServletWebServerApplicationContext 的方法 getWebServerFactory 获取当前配置的唯一的 ServletWebServerFactory(它的实现有三个:JettyServletWebServerFactoryTomcatServletWebServerFactoryUndertowServletWebServerFactory), 本示例中是 TomcatServletWebServerFactory
在这里插入图片描述

第二步,直接通过 TomcatServletWebServerFactory 的方法获取 getWebServer 启动好的 tomcat 。
getWebServer方法中首先创建 一个 tomcat, 剩下的就是对tomcat 的配置。
在这里插入图片描述

prepareContext

prepareContext 的核心功能就是配置 TomcatEmbeddedContextTomcatEmbeddedContext 通过 Host 和 tomcat 建立关系:
在这里插入图片描述
在这里插入图片描述

prepareContext 函数关键代码:

protected void prepareContext(Host host, ServletContextInitializer[] initializers) {File documentRoot = getValidDocumentRoot();TomcatEmbeddedContext context = new TomcatEmbeddedContext();...context.addLifecycleListener(new FixContextListener());...WebappLoader loader = new WebappLoader();loader.setLoaderInstance(new TomcatEmbeddedWebappClassLoader(parentClassLoader));...if (isRegisterDefaultServlet()) {addDefaultServlet(context);}if (shouldRegisterJspServlet()) {addJspServlet(context);addJasperInitializer(context);}context.addLifecycleListener(new StaticResourceConfigurer(context));host.addChild(context);configureContext(context, initializersToUse);postProcessContext(context);}
getTomcatWebServer

方法 getTomcatWebServer 中启动了 tomcat:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
start 方法执行完后, tomcat 就启动好(此时不接收用户请求)。
在这里插入图片描述

最后,整理一份 Spring boot 内嵌(embedded )tomcat 启动主要流程图(不可深究 😊 ):
请添加图片描述

Springboot 内嵌(embedded )tomcat 启动流程到此就介绍完了, 希望对各位小伙伴有所帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词