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

This file contains ambiguous Unicode characters!

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和ContainerConnectors用于处理连接并提供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::startstop方法也是如此