深入理解Tomcat

1、先大概介绍Tomcat,再介绍两个核心组件连接器和容器。
2、连接器方面,可以通过三个组件:Endpoint、Processor、Adapter去讲连接器是如何屏蔽底层网络通信细节。
3、容器方面,可以通过 Engine、Host、Context、Wrapper四种容器去讲如何运用了组合设计模式的思想,实现自由添加节点。

介绍

Tomcat 的本质其实就是一个 WEB 服务器 + 一个 Servlet 容器,那么它必然需要处理网络的连接与 Servlet 的管理

因此,Tomcat 设计了两个核心组件来实现这两个功能,分别是连接器和容器,连接器用来处理外部网络连接,容器用来处理内部 Servlet,我用一张图来表示它们的关系:

image.png

一个 Tomcat 代表一个 Server 服务器,一个 Server 服务器可以包含多个 Service 服务,Tomcat 默认的 Service 服务是 Catalina,而一个 Service 服务可以包含多个连接器,因为 Tomcat 支持多种网络协议,包括 HTTP/1.1、HTTP/2、AJP等等,一个 Service 服务还会包括一个容器,容器外部会有一层 Engine 引擎所包裹,负责与处理连接器的请求与响应,连接器与容器之间通过 ServletRequest 和 ServletResponse 对象进行交流。

连接器(Connector)

连接器负责将各种网络协议封装起来,对外部屏蔽了网络连接与 IO 处理的细节,将处理得到的 Request 对象传递给容器处理。

Tomcat 将处理请求的细节封装到 ProtocolHandler,ProtocolHandler 是一个接口类型,通过实现 ProtocolHandler 来实现各种协议的处理

ProtocolHandler 采用组件模式的设计,将处理网络连接,字节流封装成 Request 对象,再将 Request 适配成 Servlet 处理 ServletRequest 对象这几个动作,用组件封装起来了,

连接器三个组件:Endpoint、Processor、Adapter。

  • Endpoint 组件用来处理底层的 Socket 网络连接

  • Process 方法会创建一个 processor 对象,调用它的 process 方法将 Socket 字节流封装成 Request 对象

  • Adapter 的主要作用是将 Request 对象适配成容器能够识别的 Request 对象

以上连接器的各个组件,我用一张图说明它们直接的关系:


image.png

容器(Container)

在 Tomcat 中一共设计了 4 种容器,它们分别为 Engine、Host、Context、Wrapper,它们的关系如下图所示:


image.png

Engine、Host、Context、Wrapper四种容器

  • Engine:表示一个虚拟主机的引擎,一个 Tomcat Server 只有一个 引擎,连接器所有的请求都交给引擎处理,而引擎则会交给相应的虚拟主机去处理请求;

  • Host:表示虚拟主机,一个容器可以有多个虚拟主机,每个主机都有对应的域名,在 Tomcat 中,一个 webapps 就代表一个虚拟主机,当然 webapps 可以配置多个

  • Context:表示一个应用容器,一个虚拟主机可以拥有多个应用,webapps 中每个目录都代表一个 Context,每个应用可以配置多个 Servlet

各个容器组件之间的关系是由大到小,即父子关系,它们之间关系形成一个树状的结构。

Tomcat 的这种容器设计思想,其实是运用了组合设计模式的思想,组合设计模式最大的优点是可以自由添加节点,这样也就使得 Tomcat 的容器组件非常地容易进行扩展,符合设计模式中的开闭原则。

当一个请求过来时,Tomcat 是如何识别请求并将它交给特定 Servlet 来处理呢?

从容器的组合关系可以看出,它们调用顺序必定是:

Engine -> Host -> Context -> Wrapper -> Servlet

那么 Tomcat 是如何来定位 Servlet 的呢?答案是利用 Mapper 组件来完成定位的工作。

定位 Servlet 的流程图:


image.png

[图片上传失败...(image-8a1b99-1576409021968)]

Mapper 最主要的核心功能是保存容器组件之间访问路径的映射关系

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容