Tomcat連接器和servlet容器

Http工作原理

Http協議是 瀏覽器和服務器之間的數據傳送協議、應用層協議;不涉及數據包傳輸、規定客戶端和服務器之間的通信格式

Tomcat整體架構

@Http服務器請求處理
瀏覽器給服務端一個Http格式的請求
Http服務器收到後需要調用程序處理(Java類),一般不同請求需要不同程序處理

上圖中左右兩圖對比,
1) HTTP服務器直接調用具體業務類=>緊耦合
2) HTTP服務器把請求交給容器處理,容器通過servlet接口調用業務類 => HTTP服務器與業務解耦

@Servlet容器工作流程

客戶請求某個資源
HTTP服務器用一個ServletRequest對象把客戶的請求封裝 -> 發送給Servlet容器
Servlet容器收到請求 -> 根據請求的URL和Servlet的映射關係,找到相應的Servlet -> 調用Servlet的service方法處理請求
Servlet容器把ServletResponse對象返回給HTTP服務器
HTTP服務器把響應發送給客戶端

@Tomcat整體架構
Tomcat的兩個核心功能
1 )處理socket連接,負責網絡字節流與Request和Response對象的轉化 => 連接器(Connector),負責對外交流
2 加載和管理Servlet,處理Request請求 => 容器(Container),負責內部處理

Coyote

Coyote是Tomcat連接器的框架名稱
Coyote封裝了底層的網絡通信(Socket請求及響應處理),爲Catalina容器提供了統一的接口
Coyote將Socket輸入轉換封裝爲Request對象
Catalina將Request進一步封裝爲ServletRequest

注:在這裏可以把Catalina狹義地理解爲容器(Service中的Container)

@連接器組件
ProtocolHandler:Coyote協議接口(Endpoint+Processor)

Endpoint:Coyote通信端點(通信監聽的接口、具體Socket接收和發送的處理器)=> 用來實現TCP/IP協議、是對傳輸層的抽象

Processor:Coyote協議處理接口 => 用來實現HTTP協議、是對應用層協議的抽象
Processor接收來自EndPoint的Socket,將字節流解析成Tomcat Request和Response對象,並通過Adapter將其提交到容器處理
 

 

@兩種連接器

Tomcat在server.xml中配置了兩種連接器
1)HTTP Connector監聽8080端口,負責建立HTTP連接。通過瀏覽器訪問Tomcat服務器的Web應用時使用。  
2)AJP Connector監聽8009端口,負責和其它的HTTP服務器建立連接。在把Tomcat與其它HTTP服務器集成時使用。

說明:
Tomcat最主要的功能是提供Servlet/JSP容器;Tomcat對靜態資源(如HTML文件或圖像文件)的處理速度,以及提供的Web服務器管理功能不如其它專業的HTTP服務器(如IIS和Apache)=>
在實際應用中,常常把Tomcat的與其他HTTP服務器集成,對於不支持的Servlet/JSP的HTTP服務器,可以通過的Tomcat服務器來運行的Servlet/JSP組件。
 

Catalina

Catalina是Servlet容器實現,它通過鬆耦合的方式集成Coyote,同時它還包括啓動入口、shell程序等
Catalina是Tomcat核心,Tomcat啓動的時候會初始化一個Catalina的實例

@Tomcat模塊分層結構

@Catalina結構

Catalina 負責解析Tomcat配置文件->創建Server組件,管理Server
Server 表示整個服務器(Catalina Servlet及其它組件),負責組裝並啓動Servlet引擎、Tomcat連接器,通過實現LifeCycle接口提供啓動和關閉整個系統的方式
Server下面有多個服務Service
Service Server內部組件,每個Service將若干個連接器組件Connector(Coyote實現)綁定到一個容器組件Container(Engine)上
Connector 連接器處理與客戶端的通信,負責接收客戶請求,然後轉給相關的容器處理,最後返回響應結果給客戶
Container 容器負責處理用戶的servlet請求




 

 

 

@Container結構

Engine 表示整個Catalina的Servlet引擎,用來管理多個虛擬主機,一個Service最多隻有一個Engine,一個Engine可包含多個Host
Host 表示一個虛擬主機,一個虛擬主機可包含多個Context
Context 表示一個Web應用程序,一個Web應用可包含多個Wrapper
Wrapper 表示一個Servlet,Wrapper作爲容器中的最底層,不能包含子容器

 

 

 

Jasper

@靜態頁面和動態頁面
靜態頁面的網頁代碼都在頁面中,不能自主管理髮布更新的頁面。
常見的靜態頁面擴展名:.html、.htm

動態頁面是通過執行asp,php,jsp,.net等程序生成客戶端網頁代碼的網頁。可以通過網站後臺管理系統對網站的內容進行更新。
常見的靜態頁面擴展名:.asp .php .jsp .cgi

注意:靜態頁面和動態頁面的區別是網站與客戶端有無互動,而不是有無動畫

@Jasper
對基於JSP的Web應用,可以直接在JSP頁面編寫Java代碼
可以把jsp看作是一種運行在服務端的腳本,最終輸出到客戶端的都是標準的HTML頁面,並不包含任何Java代碼
Jasper模塊是Tomcat的JSP核心引擎
JSP本質是一個Servlet

@服務器如何將JSP頁面轉換爲HTML頁面?
Tomcat使用Jasper對JSP語法進行解析,生成Servlet並生成Class字節碼,用戶訪問jsp時會訪問Servlet,最終訪問的結果直接響應在瀏覽器
在運行的時候Jasper會檢測JSP文件是否修改,如果修改,則會重新編譯JSP文件

 

參考資料:
java進階教程Tomcat核心原理解析  https://www.bilibili.com/video/BV1dJ411N7Um
Tomcat(一):簡介 https://blog.csdn.net/u014231646/article/details/79482195
Tomcat HTTP協議與AJP協議  https://blog.csdn.net/jeikerxiao/article/details/82745516
Apache與Tomcat有什麼關係和區別  https://www.cnblogs.com/zangdalei/p/8057325.html
Tomcat外傳 https://zhuanlan.zhihu.com/p/54121733
淺談JSP  https://zhuanlan.zhihu.com/p/42343690

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