Tomcat 體系架構
前言
Tomcat 伺服器是一個開源的輕量級Web應用伺服器,在中小型系統和併發量小的場合下被普遍使用,是開發和除錯Servlet、JSP 程式的首選。下面我們來講下Tomat的總體架構。
總體架構
Tomcat 有兩個核心元件:
- Connector 聯結器:處理Socket連線,負責⽹絡位元組流與Request和Response物件的轉化
- Container 容器:負責內部處理,載入和管理Servlet,以及具體處理Request請求
下面分別對著兩個核心元件展開來介紹
Connector 聯結器元件
Connector元件是監聽元件,它有四個作用:
- 開啟監聽套接字,監聽外界請求,並和客戶端建立TCP連線;
- 使用protocolHandler解析請求中的協議和埠等資訊,如http協議、AJP協議;
- 根據解析到的資訊,使用processer將分析後的請求轉發給繫結的Engine;
- 接收響應資料並返回給客戶端。
Coyote 是Tomcat 中聯結器的元件名稱 , 是對外的接⼝,客戶端。下面對coyote的各個元件進行一下介紹
EndPoint
EndPoint 是 Coyote 通訊端點,即通訊監聽的接⼝,是具體Socket接收和傳送處理器,是對傳輸層的抽象,因此EndPoint用來實現TCP/IP協議的。
Processor
Processor 是Coyote 協議處理介面 ,如果說EndPoint是⽤來實現TCP/IP協議的,那麼Processor用來實現HTTP協議,Processor接收來自EndPoint的Socket,讀取位元組流解析成Tomcat Request和Response物件,並通過Adapter將其提交到容器處理,Processor是對應用層協議的抽象。
ProtocolHandler
Coyote 協議介面, 通過Endpoint 和 Processor , 實現針對具體協議的處理能力。Tomcat 按照協議和I/O 提供6個實現類:AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol,Http11Nio2Protocol ,Http11AprProtocol。
Adapter
由於協議不同,客戶端發過來的請求資訊也不盡相同,Tomcat定義了自己的Request類來封裝這些請求資訊。ProtocolHandler介面負責解析請求並生成Tomcat Request類。但是這個Request物件不是標準ServletRequest,不能用Tomcat Request作為引數來調⽤容器。Tomcat設計者的解決方⽅案是引入CoyoteAdapter,這是介面卡模式的經典運用,聯結器呼叫CoyoteAdapter的Sevice方法,傳入的是Tomcat Request物件,CoyoteAdapter負責將Tomcat Request轉成ServletRequest,再呼叫容器。通過Coyote與伺服器建⽴連線、傳送請求並接受響應
Container 容器
Tomcat是⼀個由⼀系列可配置(conf/server.xml)的元件構成的Web容器,⽽Catalina是Tomcat的servlet容器。
從另⼀個⻆度來說,Tomcat 本質上就是⼀款 Servlet 容器, 因為 Catalina 才是 Tomcat 的核⼼ , 其他模組都是為Catalina 提供⽀撐的。
其實,可以認為整個Tomcat就是⼀個Catalina例項,Tomcat 啟動的時候會初始化這個例項,Catalina例項通過載入server.xml完成其他例項的建立,建立並管理⼀個Server,Server建立並管理多個服務,每個服務⼜可以有多個Connector和⼀個Container。
上面是一個catalina例項的結構圖,下面針對各個元件進行分析:
Catalina
負責解析Tomcat的配置檔案(server.xml) , 以此來建立伺服器Server元件並進行管理
Server
伺服器表示整個Catalina Servlet容器以及其它元件,負責組裝並啟動Servlaet引擎,Tomcat聯結器。Server通過實現Lifecycle介面,提供了一種優雅的啟動和關閉整個系統的方式
Service
服務是Server內部的元件,一個Server包含多個Service。它將若干個Connector元件繫結到一個Container
Container
容器,負責處理使用者的servlet請求,並返回物件給web使用者的模組Container元件下有幾種具體的元件,分別是Engine、Host、Context和Wrapper。這4種元件(容器)是父子關係。Tomcat通過一種分層的架構,使得Servlet容器具有很好的靈活性。
-
Engine 表示整個Catalina的Servlet引擎,用來管理多個虛擬站點,一個Service最多隻能有一個Engine,但是一個引 擎可包含多個Host。
-
Host 代表一個虛擬主機,或者說一個站點,可以給Tomcat配置多個虛擬主機地址,而一個虛擬主機下可包含多個 Context。
-
Context 表示一個Web應用程式, 一個Web應⽤可包含多個Wrapper。
-
Wrapper 表示一個Servlet,Wrapper 作為容器中的最底層,不能包含子容器。
相關文章
- Tomcat系統架構Tomcat架構
- 【Tomcat】Tomcat原理與系統架構Tomcat架構
- Tomcat總體架構(一)Tomcat架構
- Tomcat的整體架構Tomcat架構
- Tomcat 架構模型Tomcat架構模型
- Tomcat 架構探索Tomcat架構
- tomcat架構解析Tomcat架構
- 死磕Tomcat系列(1)——整體架構Tomcat架構
- Tomcat 第三篇:總體架構設計Tomcat架構
- MySQL體系架構MySql架構
- SQLite體系架構SQLite架構
- 『網際網路架構』軟體架構-mybatis體系結構(14)架構MyBatis
- 初探Tomcat的架構設計Tomcat架構
- Tomcat詳解系列(2) - 理解Tomcat架構設計Tomcat架構
- 2_指令集、體系架構、微架構架構
- Tomcat 架構原理解析到架構設計借鑑Tomcat架構
- GPU體系架構(二):GPU儲存體系GPU架構
- 軟體體系架構的認識架構
- tomcat架構分析及配置詳解Tomcat架構
- 【Tomcat 原始碼系列】Tomcat 整體結構Tomcat原始碼
- Tomcat總體架構,啟動流程與處理請求流程Tomcat架構
- Tomcat是如何執行的?整體架構又是怎樣的?Tomcat架構
- 軟體體系架構課堂測試07 –邏輯架構設計架構
- 架構知識體系總結架構
- 淺談Android os體系架構Android架構
- Kafka體系架構、命令、Go案例Kafka架構Go
- tomcat + spring mvc 原理(一):tomcat原理綜述和靜態架構TomcatSpringMVC架構
- 淺讀tomcat架構設計和tomcat啟動過程(1)Tomcat架構
- 程式設計體系結構(09):分散式系統架構程式設計分散式架構
- tomcat原始碼分析(第一篇 從整體架構開始)Tomcat原始碼架構
- 【DATAGUARD】Oracle Dataguard體系架構詳解Oracle架構
- 論軟體系統架構風格架構
- 一文搞懂MySQL體系架構!!MySql架構
- 單體架構到垂直架構架構
- 移動端架構師_Android架構師成長體系課程架構Android
- 擁抱零信任理念,重構安全體系架構架構
- 軟體體系結構課堂測試02– 架構評價架構
- 老闆:把系統從單體架構升級到叢集架構!架構