You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
## 一、原理
|
|
|
|
|
![[Snipaste_2023-02-13_19-41-22.png]]
|
|
|
|
|
### 1.Server
|
|
|
|
|
tomcat 作为一个servlet容器,其最顶层容器叫做**Server**,一个tomcat只有一个Server。Server中包含至少一个**Service**用于具体提供服务。
|
|
|
|
|
Service主要包含Connectors和Container,Connectors用于处理连接并提供Socket与request、response转换。Container用于封装和管理Servlet以及处理request请求。
|
|
|
|
|
Service只有一个Container,但可以有多个Connectors(一个服务可以有多个连接,如http、https连接,也可以提供相同协议不同端口的连接)
|
|
|
|
|
|
|
|
|
|
### 2.Catalina
|
|
|
|
|
Catalina用于管理Server,它提供了三个方法load、start、stop用于管理服务器生命周期
|
|
|
|
|
+ load方法用于根据conf/server.xml文件创建Server并调用Server的init方法进行初始化
|
|
|
|
|
+ start方法用于启动服务器、stop方法用于停止服务器。分别在内部分别调用了Server的start和stop方法,会按照容器的结构逐层调用相应方法,比如,Server的start方法中会调用所有Service中的start方法,Service中的start方法又会调用所有包含的Connectors和Container的start方法。
|
|
|
|
|
+ await方法直接调用了Server的await方法,这个方法的作用是进入一个循环,让主线程不会退出
|
|
|
|
|
|
|
|
|
|
### 3.Bootstrap
|
|
|
|
|
Bootstrap的作用类似一个CatalinaAdaptor,具体处理过程还是使用Catalina来完成,这么做的好处是可以把启动的入口和具体的管理类分开,从而可以很方便地创建出多种启动方式,每种启动方式只需要写一个相应的CatalinaAdaptor即可。Bootstrap是tomcat的入口,启动tomcat就是调用Bootstrap的main方法。
|
|
|
|
|
|
|
|
|
|
### 4.启动流程图
|
|
|
|
|
![[Snipaste_2023-02-13_20-13-01.png]]
|