前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让面试官颤抖的Tomcat系统架构!

让面试官颤抖的Tomcat系统架构!

作者头像
CSDN技术头条
发布2018-10-08 11:40:33
6120
发布2018-10-08 11:40:33
举报
文章被收录于专栏:CSDN技术头条

Tomcat 非常的模块化,只要找到最核心的模块,问题游刃而解,了解整体架构对深入了解 Tomcat 至关重要!

本文来源:Java后端技术

1

Tomcat

顶层架构

先上一张 Tomcat 的顶层结构图(图A),如下:

Tomcat 中最顶层的容器是 Server,一个 Server 可以包含至少一个 Service,用于具体提供服务。

Service 包含两个部分:Connector 和 Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:

1、Connector 用于处理连接相关的事情,并提供 Socket与Request 和 Response 相关的转化;

2、Container 用于封装和管理 Servlet,以及具体处理 Request 请求;

一个 Tomcat 中只有一个 Server,但是可以有多个 Connectors,这是因为一个服务可以有多个连接,如同时提供 Http 和 Https 链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说到):

多个 Connector 和一个 Container 就形成了一个 Service,但是 Service 还要一个生存的环境 Server !所以整个 Tomcat 的生命周期由 Server 控制。另外,上述的包含关系或者说是父子关系,都可以在 tomcat 的 conf 目录下的server.xml配置文件中看出(Tomcat 版本为8.0)

这张结构图也能更清楚的理解:

Server 标签设置的端口号为 8005,shutdown=”SHUTDOWN” ,表示在8005端口监听“SHUTDOWN”命令,如果接收到了就会关闭 Tomcat。

2

Connector和Container

的微妙关系

一个请求发送到 Tomcat 之后,首先经过 Service 然后会交给Connector,并将请求封装为 Request 和 Response 来具体处理,封装之后再交由 Container 处理,然后再返回给 Connector,最后在由通过Socket 将处理结果返回客户端,请求处理结束!

Connector 最底层使用的是 Socket 来进行连接的,Request 和 Response是按照 HTTP 协议来封装的,所以 Connector 同时需要实现TCP/IP 协议和 HTTP 协议!Tomcat 处理请求,那么肯定需要先接收到这个请求,接收请求这个东西我们首先就需要看一下 Connector!

3

Connector

架构分析

Connector 用于接受请求并将请求封装成 Request 和 Response,然后交给 Container 进行处理,Container 处理完之后在交给 Connector 返回给客户端。

因此,我们可以把 Connector 分为四个方面进行理解:

(1)Connector如何接受请求的?

(2)如何将请求封装成Request和Response的?

(3)封装完之后的Request和Response如何交给Container进行处理的?

(4)Container处理完之后如何交给Connector并返回给客户端的?

首先看一下 Connector 的结构图(图B),如下所示:

Connector就是使用ProtocolHandler来处理请求的,不同的ProtocolHandler 代表不同的连接类型,比如:Http11Protocol 使用的是普通Socket来连接的,Http11NioProtocol 使用的是 NioSocket 来连接的。

4

Container

架构分析

Container 用于封装和管理 Servlet,以及具体处理 Request 请求,在Connector 内部包含了4个子容器,结构图如下(图C):

4个子容器的作用分别是:

(1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;

(2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;

(3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

(4)Wrapper:每一Wrapper封装着一个Servlet;

下面找一个 Tomcat 的文件目录对照一下,如下图所示:

Context 和 Host 的区别是 Context 表示一个应用,我们的 Tomcat 中默认的配置下 webapps 下的每一个文件夹目录都是一个 Context,其中 ROOT 目录中存放着主应用,其他目录存放着子应用,而整个webapps就是一个 Host 站点。我们访问应用 Context 的时候,如果是 ROOT 下的则直接使用域名就可以访问。

5

总结

至此,我们已经对 Tomcat 的整体架构有了大致的了解,可以看出来每一个组件的基本要素和作用。如果你能脱口而出的聊一下 Tomcat,就会发现这不只是一种令程序员颤抖的技术,还是令面试官刮目相看的技术

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitChat精品课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档