## 一、原理 ![[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方法也是如此