【專欄目錄】
Tomcat底層原理分析:1.基礎環境搭建
Tomcat底層原理分析:2.Tomcat架構分析
Tomcat底層原理分析:3.Jasper引擎
Tomcat底層原理分析:4.Tomcatd的server.xml配置內容解析
Tomcat底層原理分析:5.Web應用配置解析
Tomcat底層原理分析:6.Tomcat中對JVM的配置解析
Tomcat底層原理分析:7.Tomcat集羣配置解析
Tomcat底層原理分析:8.Tomcat安全性配置解析
Tomcat底層原理分析:9.Tomcat性能調優
【本文導讀】
本文主要講了Tomcat的各個組件之間的關係以及Tomcat底層是如何實現“一個URL定位到一個具體的servlet”。
注:本文圖片均來自java進階教程動手實現Tomcat【黑馬程序員精品公開課】,侵權立刪。
1.Tomcat整體架構
Tomcat本質上就是一個Servlet容器,所以Catalina就是其核心,其他模塊都是爲Catalina提供支撐的。比如:通過Coyote提供Sockets通信,Jasper提供JSP引擎,Naming提供JNDI服務,Juli提供日誌服務。
【Tomcat分層示意圖】
【Tomcat架構圖】
【Tomcat主要核心邏輯簡圖】
【Servlet內部邏輯簡圖】
2.容器-Catalina
2.1Catalina組件
【Catalina容器架構圖】
組件 | 職責 |
---|---|
Catalina | 負責解析Tomcat的配置文件,以此來創建Server組件,並根據命令對其進行管理 |
Server | 表示整個Servlet容器和其他組件,負責組裝並啓動Servlet引擎、Tomcat連接器。Server通過實現LifeCycle接口,提供了一種優雅的啓動和關閉整個系統的方式。 |
Service | 一個Server包含多個Service,它是“若干個Connector”和“一個Container”的組合。 |
Connector | 處理與客戶端的通信,負責接收客戶端的請求,並轉發給Container處理,最後再將Container的處理結果返回給客戶端 |
Container | 又叫Servlet容器,也叫Servlet引擎,負責處理Connector轉發來的請求,並返回處理結果給Connector |
2.2Container容器組件
【Container容器組件架構圖】
組件 | 職責 |
---|---|
Engine | 表示整個Catalina的Servlet引擎,即代表Container。用來管理多個虛擬站點,一個Service最多隻能有一個Engine,一個Engine可以有多個Host。 |
Host | 代表一個虛擬主機,即一個站點。一個Engine可以有多個Host,一個Host有可以有多個Context。 |
Context | 代表一個Web應用,一個Context可以包含多個Wrapper。 |
Wrapper | 代表一個Servlet,Wrapper是最底層的基礎單位。 |
2.3Tomcat的server.xml結構
結合server.xml文件結構看,更容易理解Container容器中組件的結構
<Server>
<Service>
<Connector></Connector>
<Connector></Connector>
<Engine>
<Host>
<Context></Context>
<Context></Context>
</Host>
</Engine>
</Service>
</Server>
3.連接器-Coyote
3.1框架介紹
【連接池和容器的交互過程】
- Coyote的工作是將Socket的輸入輸出轉換爲Request和Response對象,並把Request和Response通過適配器轉換成ServletRequest和ServletResponse,用來轉發給/接受於Catalina容器
- Coyote封裝底層網絡通信,爲Catalina容器提供一套API,使Catalina容器與具體的請求協議以及IO操作方式完全解耦
3.2Tomcat支持的IO模型和協議
【可以略過】
3.3連接器組件
【組件架構圖】
- EndPoint組件用於解析HTTP包中的傳輸層內容
- Processor組件用於解析HTTP包中的應用層內容
- 二者由ProtocolHandler組件管理
- Processor將HTTP請求封裝成Request對象
- 再由Adapter轉換成ServletRequest對象,轉發給Catalina容器
4.Tomcat啓動流程
一句話總結:整個啓動流程做的事情就是加載Tomcat的配置文件,初始化容器組件,監聽對應端口號,準備接受客戶端請求。
5.Tomcat請求處理流程
客戶端瀏覽器發起對Tomcat發起一個請求,該請求是如何定位到當前Tomcat下的哪個項目的哪個Servlet的過程以及處理該請求的過程就叫做Tomcat請求處理流程。
那麼如何定位到的呢?答案是:Tomcat使用Mapper組件。
Mapper組件的功能:將用戶請求的URL定位到一個Servlet;
Mapper組件的原理:Mapper組件裏保存了Web應用的配置信息,其實就是容器組件與訪問路徑的映射關係,比如Host容器裏配置的域名、Context容器裏的Web應用路徑,以及Wrapper容器裏的Servlet映射的路徑,可以將其想象成一個多層次的Map。
由於Mapper的原理,一個URL只會映射到一個Servlet。
【Mapper組件定位Servlet過程示例圖】