Tomcat

Tomcat 架构

Connector

负责处理对外网络的 IO。Connector 对内屏蔽了不同的应用层协议和网络 IO 模型 。Tomcat 支持的网络 IO 模型有:

  • BIO:同步阻塞式 IO
  • NIO:同步非阻塞式 IO
  • AIO(NIO2):异步式 IO
  • APR:操作系统层面处理异步式 IO

Connector 实现的功能:

  • 监听网络端口,接受客户端网络连接请求
  • 根据不同的应用层协议(HTTP1.1/HTTP2)解析数据流,封装成统一的 Request 对象
  • 将 Tomcat Request 对象转换成标准的 ServletRequest 对象
  • 将 ServletRequest 对象转交容器(Container),让容器处理业务任务,得到容器返回的 ServletResponse 对象
  • 将 ServletResponse 对象转换成 Tomcat 统一的 Response 对象,然后序列化成字节流返回客户端。

Connector 组件:

  • Endpoint :负责提供数据字节流给 Processor
  • Processor:提供 Tomcat Request 对象给 Adapter
  • Adapter:负责提供 ServletRequest 对象给 Container 处理业务

Container

Tomcat基于分层架构的思想,设计了4种容器:Engine、Host、Context、Wrapper。它们之间是父子关系。

Engine

Engine 容器全局只有一个,是 Container 处理 Request 和 Response 的入口。Engine 会将请求路由给对应的 Host 容器。

Host

Host 容器每个代表一个虚拟主机,对应不同的域名

Context

通过一个 Context 标识一个应用,对应 wabapp 目录下的一个工程。Tomcat 应用 web.xml 文件就是由 Context 去解析的。

Wrapper

每一个 Wrapper 对应一个 Servlet 实例,主要作用是载入 servlet 类实例化,并调用 service 方法。常见的 Spring 的 Dispatch Servlet 是线程安全的,所以 Tomcat 不需要保证 Servlet 的并发安全。