tomcat系统架构及实现二

tomcat的启动流程

我们通过Tomcat的/bin目录下的脚本startup.sh来启动Tomcat,通过如下流程图来了解一下。
avatar
Tomcat本质上是一个Java程序,因此startup.sh脚本会启动一个JVM来运行Tomcat的启动类Bootstrap。Bootstrap的主要任务是初始化Tomcat 的类加载器,并且创建Catalina。Catalina是一个启动类,它通过解析server.xml、创建相应的组件,并调用Server的start方法。Server 组件的职责就是管理 Service 组件,它会负责调用Service的start方法。Service 组件的职责就是管理连接器和顶层容器 Engine,因此它会调用连接器和 Engine 的 start 方法。

Catalina

Catalina 的主要任务就是创建 Server,它不是直接 new 一个 Server 实例就完事了,而是 需要解析 server.xml,把在 server.xml 里配置的各种组件一一创建出来,接着调用 Server 组件的 init 方法和 start 方法,这样整个 Tomcat 就启动起来了。作为“管理者”, Catalina 还需要处理各种“异常”情况,比如当我们通过“Ctrl + C”关闭 Tomcat 时, Tomcat 将如何优雅的停止并且清理资源呢?因此 Catalina 在 JVM 中注册一个“关闭钩 子”。