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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
## 一、原理
![[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]]
### 5. 总结
tomcat 的结构像石榴, 最外层Server( 唯一实例) , 其中包含多个Service, 每个Service包含各自的容器及连接器。具体的初始化、启停由Catalina进行管理, init()读取conf下的配置文件、start()逐层调用( Service::start---->Container::start) , stop方法也是如此