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

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,就会发现这不只是一种令程序员颤抖的技术,还是令面试官刮目相看的技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值