Tomcat架構解析(一)-----Tomcat總體架構


 

  Tomcat是非常常用的應用服務器,了解Tomcat的總體架構以及實現細節,對於理解整個java web也是有非常大的幫助。

 

  一、Server

  1、最簡單的服務器結構

  最簡單的服務器結構如圖所示:

 

  Server向客戶端提供服務,並且服務器可以start或stop。

  缺點:如果需要該服務器支持多種網絡協議,就很難擴展,因此改進如下:

   

  2、Connector和Container

  

  將容器拆分成Connector以及Container,Connector用於和客戶端連接,可以擴展支持多種協議,建立連接之后將socket交給Container處理。

  缺點:一個Server存在多個Connector和Container,因此Connector和Container之間就需要建立比較繁瑣的映射關系,改進如下:

 

  3、加入Service

  

  一個Server包括多個Service,一個Service可以包含多個Connector和一個Container,這樣Connector在獲得客戶端的socket之后,交給對應的Service,由Service來找到對應的Container,進而處理客戶端的相關請求。

  缺點:應用服務器是一個運行環境,可能會有很多項目部署在Tomcat中,因此改進如下:

 

  4、引入Context

  

  將Container換成Engine,Context則表示應用本身,同時Engine和Context都包含start、stop方法,代表各個容器啟動、關閉的行為,將各個容器加載資源、釋放資源的動作解耦。

  缺點:通常在一個主機下,提供多個域名的服務,因此引入Host,如下:

 

  5、引入Host

  

  缺點:一個Context中可以包含多個servlet實例,稱為Wrapper,改進如下:

  

  6、Wrapper

  

  Engine、Host、Context、Wrapper是一類組件,這類組件的作用就是處理接收客戶端的請求並且返回響應數據,並且有可能請求到Engine容器,Engine容器委托給子容器Host處理,修改如下:

  

  使用Container代表容器,Engine、Host、Context、Wrapper都是Container的子容器,Container可以維護子容器。backgroundProcess()方法針對后台處理,並且其基礎抽象類(ContainerBase)確保在啟動組件的同時,異步啟動后台處理。

  Tomcat的總體架構大致如此。

 

  二、Lifecycle生命周期

  所有的容器中都存在start()、stop()等方法,因此抽象出Lifecycle接口,該接口中定義了相關的生命周期的方法。主要方法如下:

  

  

   

  Lifecycle狀態圖:

  

  三、Pipeline和Valve

  對於應用服務器來說,增強各組件的擴展性以及靈活性是非常重要的,Tomcat采用職責鏈模式來實現每個Container組件處理請求的功能。

  Pipeline代表職責鏈,后者表示閥門,具體的處理過程,如圖所示:

  

  說的簡單點,就是每條線路上包含哪些操作,操作按照順序一個個執行。Tomcat通過這種方式來決定每個容器的執行過程。之前的Tomcat架構圖加上職責鏈如下所示:

  

  簡單的來說,Tomcat監聽客戶端的請求,獲得請求后交個各個組件去處理,返回響應數據到客戶端,並且Tomcat能支持HTTP、AJP等協議。並且在擴展性、可用性上有着非常優秀的設計。

 

四、tomcat工作原理

我們啟動Tomcat時雙擊的startup.bat文件的主要作用是找到catalina.bat,並且把參數傳遞給它,而catalina.bat中有這樣一段話:

Bootstrap.class是整個Tomcat 的入口,我們在Tomcat源碼里找到這個類,其中就有我們經常使用的main方法:

這個類有兩個作用 :1.初始化一個守護進程變量、加載類和相應參數。2.解析命令,並執行。

另外tomcat中有一個非常重要的xml,server.xml,來看下server.xml對應的真實的tomcat架構是啥樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM