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.
2.0 KiB
2.0 KiB
一、原理
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.启动流程图
5. 总结
tomcat 的结构像石榴,最外层Server(唯一实例),其中包含多个Service,每个Service包含各自的容器及连接器。具体的初始化、启停由Catalina进行管理,init()读取conf下的配置文件、start()逐层调用(Service::start---->Container::start),stop方法也是如此