整体架构

Tomcat的工作流程主要分为两部分:

  • 处理socket请求,负责网络字节流和Request、Response对象的转换
  • 加载和管理servlet、处理Request请求

对应这两部分功能,Tomcat也有两个核心组件:

  • 连接器Connector (负责对外交流)
  • 容器Container (负责内部事务)


    连接器Connector —— Coyote

    Coyote封装了底层的网络通信,将Socket输入装换为Request对象,交由Catalina处理,处理请求完成后,Catalina通过Coyote提供的Response对象将结果写入输出流
    Coyote只负责协议与IO操作,所以Resquest和Response对象并没有实现Servlet规范对应的接口。而Catalina进一步将他们封装ServletResponse和ServletRequest。
    image.png

Coyote主要有EndPoint、Processor、Adapter、ProtocolHandler四个组件构成,
EndPoint:
Processor:
Adapter:
ProtocolHandler:

容器Container —— Catalina

image.png

一个Tomcat有一个Catalina容器,就是一个Server,可以有多个Service,一个Service包好多个Connector和一个Container。
再来看看Container的结构:
Engine: 含多个Host
Host:代表一个虚拟主机或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context
Context:表示一个Web应用程序,一个Web应用可以包含多个Wrapper
Wrapper:表示一个Servlet,Wrapper是容器中的最底层,不再含子容器

image.png


Tomcat启动流程
image.png


Tomcat请求处理

解析协议 + 处理请求