Tomcat源码解读

141 阅读2分钟

tomcat顶层架构

image-20200623143939324

Server

服务器的意思,代表整个tomcat服务器,一个Tomcat就只有一个Server

image-20200623144405244

在整个Tomcat中,我们讲的都是一个抽象,抽象在源码中都是接口 具体实现一般都是“StandardXXX”。MBeanRegistration这个类是完成JMX的功能,就是我们俗称的监控管理功能,之前我们讲的使用jconsole查看Tomcat也就是通过JMX玩的

StandardServer的类图如上图所示,除了实现Server接口还需要继承LifeCycLe,这样的好处是生命周期统一接口LifeCycle吧所有的启动 停止 关闭都放在一起统一管理。

Service

Server中的一个逻辑功能层,一个Server包含多个Service

image-20200623145129650

Service中请求监听和请求处理分为两个模块,

  • connector:负责监听请求
  • Container:负责处理请求

一个Service可能有多个Connector但是只有一个Container

image-20200623145406564

Connector

称作连接器,是Service的核心组件之一,一个Service可能会有多个Connnector,主要负责客户连接请求

image-20200623145550014

Connector使用ProtocolHanlder来处理请求,其中包含了三个组件

  • Endpoint:用于底层的Socket网络连接
  • Processor:将EndPoint接收到的Socket封装称Request
  • Adpeter:充当适配将Request转化为HttpServletRequest交给Container处理

Container

Service的另一个核心组件,按照层级有Engine,Host,Context,Wrapper四种,其主要执行业务逻辑

image-20200623145921646
  • Engine:引擎,只有一个。定义一个名为Catalina的引擎
  • Host:站点,虚拟主机,一个Engine包含多个Host的设计使得,一个服务器的实力可以承担多个域名的服务,是很灵活的设计。
  • Context:一个应用,默认配置下,wabapps下面的每个目录机会一个应用
  • Wrapper:一个Servlet

Jasper

JSP引擎

Session

会话管理;

……

Tomcat启动流程

image-20200623150441260

Tomcat的启动大家一看好像比我们之前多了两个东西出来了,一个是bootstrap,一个是catalina。首先只有bootstrap中有main方法。我整体去看启动过程可以分为两个阶段,这样看的话就比较容易了。我们使用切割话,找到黄金切割线,这个service这里就是一个黄金切割线。左边的,就包含前面讲的server和service,后面的就是具体的很细的组件了。都可以看出,左边都是为了加载service,右边的serivce会引发三个动作,一个是启动engine,一个是启动connector,最后一个是启动executor也就是执行现场。这样看的话,整体的启动流程就非常清爽了

Lifecycle与模板方法模式:Tomcat的启动过程中Catalina调用StandardService中的start()方法,但是StandardService自身没有start()方法.