SpringBoot内嵌的Tomcat启动过程及其作过的工做

SpringBoot内嵌的Tomcat启动过程及其作过的工做

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其余一些公司及我的共同开发而成。因为有了Sun 的参与和支持,最新的Servlet 和JSP 规范老是能在Tomcat 中获得体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。由于Tomcat 技术先进、性能稳定,并且免费,于是深受Java 爱好者的喜好并获得了部分软件开发商的承认,成为目前比较流行的Web 应用服务器.(来源于百度百科)java

tomcat在web应用开发中是个再熟悉不过的软件了,咱们理解它是一个容器,java程序并非一个脚本语言,java代码要跑在这个容器内,咱们要使用tomcat时须要配置环境,在springBoot中,tomcat被内嵌在项目中,并不须要再去配置环境变量.web

一.Spring boot内嵌Tomcat的启动过程

先看一段springBoot项目的启动日志spring

org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:89) - Tomcat initialized with port(s): 8066 (http)  **1**

org.apache.catalina.core.StandardService.log(DirectJDKLog.java:179) - Starting service [Tomcat]  **2**

org.apache.catalina.core.StandardEngine.log(DirectJDKLog.java:179) - Starting Servlet Engine: Apache Tomcat/8.5.23 **3**

org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].log(DirectJDKLog.java:179) - Initializing Spring embedded WebApplicationContext **4**

org.springframework.web.context.ContextLoader.prepareEmbeddedWebApplicationContext(EmbeddedWebApplicationContext.java:276) - Root WebApplicationContext: initialization completed in 4704 ms **5**

1.初始化Tomcat,而且给给分配端口号(8066)apache

2.启动Tomcattomcat

3.启动tomcat引擎(显示tomcat版本,springBoot1.5.9内嵌的是tomcat/8.5.23)springboot

**4.**springBoot项目前期环境准备完成,初始化springWeb内嵌的上下文容器.服务器

**5.**RootWebSpring上下文初始化完成.app

这几步都是排在项目启动最前面的几步里,能够看出tomcat是项目启动的重要环节,初始化加载完成tomcat以后,下面开始加载项目中定义的Filter,component等等.svg

二.tomcat启动后,在项目中都作了那些工做

tomcat做为一个web容器,咱们在请求调用接口的时候都是使用TCP连接达到通信的目的,tomcat提供了不少顶层的接口来实如今实际中的应用.spring-boot

经过网上的了解,知道了Tomcat主要的接口有:

·Server、Service、Container、Connector、Lifecycle、Executor、Engine、Host、Context、Wrapper、Value以及他们之间的关系。

在咱们前面看到了spring项目启动tomcat的大体过程,这个Tomcat启动的过程大概是作了这么几件事:

Tomcat启动过程能够简化为3个步骤:

1)初始化守护进程,其实就是初始化类加载器

2)加载相关配置文件,初始化几个主要的顶层接口实例,简单了说,就是服务器初始化。

3)启动那些有生命周期的顶层实例,监听用户请求,简单了说,就是启动服务器。

这里的监听用户请求其实就是监听tomcat在初始化时候分配的端口(8066);

1.初始化类加载器


这是Tomcat官方文档中介绍的整个加载过程

2.服务器初始化


这里也是官方提供的加载过程,过程比较繁琐

3.服务器开启

能够经过查看StandardServer#start()来了解服务器开启的过程。

若是跟踪代码就会发现:

Catalina#start()–àStandardServer#start()–àStandardService#start()

也就是Catalina对象执行start()期间,会调用StandardServer对象的start()方法。

StandardServer对象执行start()期间,会调用Server下的全部的StandardService对象的start()。