Tomcat系統架構與原理剖析
一、瀏覽器訪問伺服器的流程
http請求的處理過程
注意:瀏覽器訪問伺服器使用的是Http協議,Http是應用層協議,用於定義資料通訊的格式,具體的數 據傳輸使用的是TCP/IP協議
二、Tomcat 系統總體架構
2.1Tomcat 請求處理大致過程
Tomcat是一個Http伺服器(能夠接收並且處理http請求,所以tomcat是一個http伺服器)
我們使用瀏覽器向某一個網站發起請求,發出的是Http請求,那麼在遠端,Http伺服器接收到這個請求 之後,會呼叫具體的程式(Java類)進行處理,往往不同的請求由不同的Java類完成處理
HTTP 伺服器接收到請求之後把請求交給Servlet容器來處理,Servlet 容器通過Servlet介面呼叫業務 類。Servlet
注意:Tomcat既按照Servlet規範的要求去實現了Servlet容器,同時它也具有HTTP伺服器的功能。 Tomcat的兩個重要身份
1)http伺服器
2)Tomcat是一個Servlet容器
二、Tomcat 系統總體架構
Tomcat 設計了兩個核心元件聯結器(Connector)和容器(Container)來完成 Tomcat 的兩大核心 功能
聯結器
: 負責對外交流: 處理Socket連線,負責網路位元組流與Request和Response物件的轉化
容器
:負責內部處理:載入和管理Servlet,以及具體處理Request請求
三、Coyote Tomcat 聯結器元件
3.1 Coyote 簡介
Coyote 是Tomcat 中聯結器的元件名稱 , 是對外的介面。客戶端通過Coyote與伺服器建立連線、傳送請 求並接受響應
- Coyote 封裝了底層的網路通訊(Socket 請求及響應處理)
- Coyote 使Catalina 容器(容器元件)與具體的請求協議及IO操作方式完全解耦
- Coyote 將Socket 輸入轉換封裝為 Request 物件,進一步封裝後交由Catalina 容器進行處理,處 理請求完成後, Catalina 通過Coyote 提供的Response 物件將結果寫入輸出流
- Coyote 負責的是具體協議(應用層)和IO
3.2Coyote 的內部元件及流程
四、Tomcat Servlet 容器 Catalina
4.1 Tomcat 模組分層結構圖及Catalina位置
Tomcat 本質上就是一款 Servlet 容器, 因為 Catalina 才是 Tomcat 的核心 , 其 他模組都是為Catalina 提供支撐的。 比如 : 通過 Coyote 模組提供連結通訊,Jasper 模組提供 JSP 引 擎,Naming 提供JNDI 服務,Juli 提供日誌服務
4.2 Servlet 容器 Catalina 的結構
Tomcat就是一個Catalina例項,Tomcat 啟動的時候會初始化這個例項,Catalina 例項通過載入server.xml完成其他例項的建立,建立並管理一個Server,Server建立並管理多個服務, 每個服務又可以有多個Connector和一個Container。
- 一個Catalina例項(容器)
- 一個 Server例項(容器)
- 多個Service例項(容器)
- Catalina: 負責解析Tomcat的配置檔案(server.xml) , 以此來建立伺服器Server元件並進行管理
- Server: 伺服器表示整個Catalina Servlet容器以及其它元件,負責組裝並啟動Servlaet引擎,Tomcat連線 器。Server通過實現Lifecycle介面,提供了一種優雅的啟動和關閉整個系統的方式
- Service: 服務是Server內部的元件,一個Server包含多個Service。它將若干個Connector元件繫結到一個 Container
- Container 容器,負責處理使用者的servlet請求,並返回物件給web使用者的模組
4.3 Container
Container元件下有幾種具體的元件,分別是Engine、Host、Context和Wrapper。這4種元件(容器)
Engine
表示整個Catalina的Servlet引擎,用來管理多個虛擬站點,一個Service最多隻能有一個Engine, 但是一個引擎可包含多個Host
Host
代表一個虛擬主機,或者說一個站點,可以給Tomcat配置多個虛擬主機地址,而一個虛擬主機下可包含多個Context
Context
表示一個Web應用程式, 一個Web應用可包含多個Wrapper
Wrapper
表示一個Servlet,Wrapper 作為容器中的最底層,不能包含子容器