7.1 Tomcat的顶层结构及启动过程

系列文章为阅读《看透spring mvc源代码分析与实践》的笔记

7.1.1 Tomcat的顶层结构

  • Tomcat 最顶层的的容器是 Server,代表整个服务器。一个 Tomcat 只有一个Server。一个Server可以有多个 Service。
  • Service 可以有多个Connector,但只有一个 Container。
  • Connector用于处理连接相关的的事情,并提供 Socket 和 request、
    response的转换。
  • Container用于封装和管理Servlet
7.1 Tomcat的顶层结构及启动过程_第1张图片

Tomcat的 Server 由 org.apache.statup.Catalina 来管理,Catalina是Tomcat的管理类。Server的init、start和stop方法会按容器的结构逐层调用相应的方法。

  • load方法:根据conf/server.xml 文件创建Server并调用Server的init方法进行初始化。
  • start方法:用于启动服务器,并调用了Server的start方法。
  • stop方法:用于停止服务器,并调用了Server的stop方法。
  • await方法:直接调用了Server的await方法,让主线程不会退出。

7.1.2 Bootstrap 的启动过程

Tomcat的入口main方法在Bootstrap中。Bootstrap的设计使用了适配器模式,把启动的入口类具体的管理类进行分离
Bootstrap 的 main 方法:

  • 新建 Bootstrap,并执行init方法初始化
  • 处理main传入的args,如果参数为空,默认执行 start 命令。对 start 命令的处理调用了三个方法,Bootstrap通过反射调用Catalina对应的方法进行处理 。
7.1 Tomcat的顶层结构及启动过程_第2张图片
7.1 Tomcat的顶层结构及启动过程_第3张图片
Bootstrap main方法

7.1.3 Catalina 的启动过程

Catalina 的启动主要是通过调用上面提到的三个方法完成的。

setAwait方法:设置等待标志

setAwait用于设置Server启动后是否进入等待状态的标志。

setAwait 方法

load方法:创建Server并初始化

load方法根据conf/server.xml创建了 Server 对象,并赋值操作给 server 属性,然后调用了Server的init方法。


7.1 Tomcat的顶层结构及启动过程_第4张图片
load 方法

start方法:调用Server的start启动服务器

Catalina 的 start 方法主要调用了Server的start方法启动服务器,并根据await属性判断是否让程序进入等待状态。

7.1.4 Server的启动过程

Server 的默认实现是 org.apache.catalina.core.StandardServer,StandardServer 继承自 LifecycleMBeanBase,LifecycleMBeanBase又继承自 LifecycleBase。 init 和 start 方法就定义在 LifecycleBase 中,LifecycleBase 里的init和start方法又调用initInternal和startInternal方法,这两个方法都是模板方法有子类实现。所以 StandardServer 执行 init 和 start 方法会调用自己的 initInternal 和 startInternal 方法。
同时 init 和 start 方法分别循环调用了每个Service的 init 和 start 方法。

7.1.5 Service 的启动过程

Service 的默认实现是org.apache.catalina.core.StandarService,StandarService 也继承自 LifecycleMBeanBase 类,所以 init 和 start 方法最终也会调用自己的 initInternal 和 startInternal 方法。initInternal 和 startInternal 主要调用下面的 init 和 start方法:

  • container 和 connector 在之前有介绍不再重复。
  • mapperListener是Mapper的监听器,可以监听 container 容器的变化
  • executor 是用在 connector 中管理线程的线程池。
7.1 Tomcat的顶层结构及启动过程_第5张图片
Tomcat 顶层组件启动时序图

你可能感兴趣的:(7.1 Tomcat的顶层结构及启动过程)