Tomcat是Apache軟體基金會的一個頂級專案,由Apache、Sun和其它一些公司及個人共同開發,是目前比較流行的Web服務器之一,Tomcat是一個開源的、小型的輕量級應用服務器,具有占用系統資源少、擴展性好、功能豐富等優點,雖然Tomcat是一個輕量級容器,但是其本身實作還比較復雜,包含很多模塊,本文會對Tomcat的基本結構和各個模塊進行簡單介紹,
Servlet容器概念
Servlet容器也叫做Servlet引擎,是Web服務器或應用程式服務器的一部分,用于在發送的請求和回應之上提供網路服務,解碼基于 MIME的請求,格式化基于MIME的回應,Servlet沒有main方法,不能獨立運行,它必須被部署到Servlet容器中,由容器來實體化和呼叫 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期內包容和管理Servlet,在JSP技術 推出后,管理和運行Servlet/JSP的容器也稱為Web容器,
以下為Servlet介面的定義:
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
Tomcat結構概覽
Tomcat是一個成熟的Web服務器,設計和開發都比較優雅,功能結構也是模塊化的,Servlet容器應該有三個基本任務:創建Request物件、創建Response物件和Servlet處理請求回應,基于這三個任務Tomcat劃分出兩個核心模塊:連接器和容器,為了優雅的進行容器的生命周期管理,Tomcat又添加了服務器組件模塊,各個模塊之間的關聯關系如下圖所示:
![Tomcat容器概覽]
服務器組件Server
Server提供了Tomcat的生命周期管理的邏輯,它使用了一種優雅的方式來啟動/關閉整個系統,不需要再對連接器和容器分別啟動/關閉,
當服務器組件啟動的時候,它會啟動其中的所有的組件(連接器和容器),然后就開始無限期的等待關閉命令,如果需要關閉系統,可以向指定埠發送一條關閉命令,服務器組件在收到關閉命令后,會關閉其中所有的組件,
服務組件Service
服務器組件使用了服務組件Serivce來包含其它的組件,服務組件主要包含兩部分:連接器和容器,這兩部分也是Tomcat容器的核心組件,
連接器Connector
Connector的主要職責就是負責接收客戶端連接和客戶端請求的處理加工,每個Connector都將指定一個埠進行監聽,分別負責對請求報文的決議和回應報文組裝,決議程序生成Request物件,而組裝程序涉及Response物件,
如果將Tomcat整體比作一個巨大的城堡,那么Connector組件就是城堡的城門,每個人要進入城門就必須通過城門,它為人們進出城堡提供了通道,同時,一個城堡還可能有兩個或者多個城門,每個城門代表了不同的通道(不同的網路協議),
容器Container
我們知道Tomcat是Servlet容器的一種實作,servlet又是什么呢?Servlet是javax.servlet 包中定義的介面,它宣告了 Servlet 生命周期的三個基本方法:init()、service() 和 destroy(),它們由每個 Servlet Class(在 SDK 中定義或自定義)實作,并由服務器在特定時機呼叫,
Tomcat容器中的Container的主要功能就是處理連接器Connector決議的到的Request,呼叫對應的servlet方法,將回應寫入Response中,此外Tomcat還對容器添加了管道和域的概念,用于對請求進行預處理,Tomcat中的容器分為四大類,按照包含關系依次為:Engin容器、Host容器、Context容器和Wrapper容器,
生命周期
Tomcat容器的啟停實作邏輯,啟停操作是如何從Server傳播到各個子容器和組件中的,以及Spring容器如何對Tomcat容器實作優雅關閉:等待Tomcat容器中的請求處理完成之后再關閉容器,
總結
本文簡要介紹了Tomcat容器中的各個關鍵組件及其功能,在我的后續博客中會對這些組件一一進行詳細介紹,
本文最先發布至微信公眾號,著作權所有,禁止轉載!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299807.html
標籤:其他
