ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Tomcat - Tomcat的套娃式架构设计初探

2021-06-03 17:04:40  阅读:181  来源: 互联网

标签:架构设计 Catalina HTTP Tomcat Connector 组件 娃式 Servlet


文章目录

在这里插入图片描述


Tomcat的主要功能

在这里插入图片描述

核心功能: http服务器和servlet 容器

  • Http服务器功能 : Socket通信(TCP/IP)、解析HTTP报文

  • Servlet容器功能 : 实现了Servlet规范 , 有多个Servlet(自带Servlet + 自定义Servlet),Servlet处理具体的业务


Tomcat的架构初探

刚才说了tomcat核心功能有两个 : http服务器和Servlet 容器。 那tomcat为了实现如上两个核心功能又是怎样架构的呢?

为了实现上面的功能,tomcat封装出了很多组件 ,这些组件共同组成了Tomcat的架构。

在这里插入图片描述

进一步分析一下

我们既然说了tomcat的两个核心功能,HTTP和Servlet , 具体在架构中对应的部分是哪些呢?

HTTP------> Connector
Servlet --------> Container


Connector 组件 -Coyote

Connector 组件 在tomcat中,有个专门的名称,叫 Coyote ,专门处理HTTP服务器功能

Coyote的组成

我们把Connector组件放大来看一下

在这里插入图片描述

  • EndPoint 组件进行Socket通信,处理TCP请求

  • Processor 组件解析HTTP报文,处理HTTP请求

这两个组件被称为 ProtocolHandler

HTTP请求 都是处理的Request, 而 Catalina 实现了Servlet规范,主要处理的是ServletRequest请求,所以这俩没法直接交互,因此才有了Adapter 组件,用来转换Request 和 ServletRequest

顺便说一下 AJP,这个是早期tomcat为了继承Apache的静态资源服务 的时候使用的协议,(Tomcat更擅长处理动态资源)


Container 组件 -Catalina

Container 组件的主要功能是完成Servlet容器功能, 也有个专门的名称叫 Catalina

Catalina 的组成

在这里插入图片描述

  • Engine&Host: Engine组件(引擎) 是Servlet容器Catalina的核心,它支持在其下定义多个虚拟主机(Host) , 虚拟主机允许Tomcat引擎在将配置在一天主机上的多个域名(比如www.artisan.com , www.art.com) 分割开来互不干扰

  • Context: 每个虚拟主机又可以支持多个web应用部署在它下边,这就是我们常说的上下文Context对象. 上下文使用由Servlet规范中指定的Web应用程序格式表示,不论是压缩过的war包还是未压缩的目录形式

  • Wrapper: 在上下文中又可以部署多个Servlet ,并且每个Servlet都会被一个包装组件(Wrapper)所包含 (一个wrapper对应一个Servlet)


server-service-connector/container-engine-host-context-wrapper

除了Connector组件和Container组件,Tomcat其实还定义了很多组件来工作

(server-service-connector/container-engine-host-context-wrapper)

这些组件采用一层一层的设计方式(套娃式) 。 如果一个组件包含了其他组件,那么这个组件也称之为容器。

瞅一瞅俄罗斯套娃 哈哈
在这里插入图片描述


总体架构预览

说了这多,汇总如下在这里插入图片描述


标签:架构设计,Catalina,HTTP,Tomcat,Connector,组件,娃式,Servlet
来源: https://blog.51cto.com/u_15239532/2852452

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有