讓面試官顫抖的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,就會發現這不只是一種令程序員顫抖的技術,還是令面試官刮目相看的技術

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章