Tomcat淺析

1、Tomcat的層級結(jié)構(gòu):
最頂層是一個Server,一個server中有N+個service,一個service中有N+個Connector和1個Container。

2、Tomcat的生命周期管理方式:
Tomcat的Server有org.apache.catalina.startup.Catalina來管理的,也就是說Catalina是整個Tomcat的管理類。它有三個方法:load、start、stop方法。

  • load用來根據(jù)server.xml來創(chuàng)建Server并調(diào)用Server的init初始化方法進(jìn)行初始化。
  • start用來啟動服務(wù),其內(nèi)部調(diào)用了Server的start方法。
  • stop用來停止服務(wù),其內(nèi)部調(diào)用了Server的stop方法。
    這三個方法是會逐級調(diào)用的,比如load調(diào)用Server的init方法,Server的init方法會(循環(huán))調(diào)用Service的init方法,Service的init方法會調(diào)用Connector的init方法和Container的init方法。同理于start和stop。

3、Tomcat的入口:在org.apache.catalina.startup.Bootstrap中。這個類的作用相當(dāng)于一個Catalina類的適配器。便于將入口和具體的管理分開。也便于創(chuàng)建多種啟動方式。

4、Tomcat的啟動流程:
//todo
//Here is a picture to show Tomcat's start-flow。

5、Lifecycle接口是Tomcat用來統(tǒng)一管理生命周期的。

6、Container的結(jié)構(gòu):
一個Container只包含一個Engine(引擎),一個Engine中包含N+個Host(主機),一個Host中包含N+個Context(應(yīng)用),一個Context中包含N+個Wrapper,每個Wrapper中封裝了以個Servlet。
//todo
//Here is a picture to show Container's struction。

Context和Host的區(qū)別: Context代表一個應(yīng)用,比如webapps下每個目錄都是一個應(yīng)用,其中ROOT放著主應(yīng)用,其他目錄放著子應(yīng)用,而整個webapps是一個站點。假如www.aaa.com域名對應(yīng)著webapps目錄所代表的站點,其中ROOT目錄可以使用域名直接訪問:www.aaa.com;而webapps/test對應(yīng)的是子應(yīng)用test,訪問使用www.aaa.com/test。

7、Container中4個容器的配置方法:

<!-- 以下是一段簡短的配置,僅用來說明部分容器中的屬性意義 -->
<Engine name="Catalina" defaultHost="localhost">
    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
      <Alias>xxx.com</Alias>
    </Host>
</Engine>

Engine中的defaultHost指如果請求的域名在所有應(yīng)用中找不到時,采用這個域名。
Host中的name為域名,appBase指該站點對應(yīng)的應(yīng)用位置,unpackWARs是是否自動解壓WAR包,autoDeploy指是否自動部署。Alias是別名,指xxx.com和localhost具有同等效果。

Context的配置方法:

  1. 通過文件配置;
  2. 將WAR應(yīng)用放到Host對應(yīng)的目錄下,Tomcat自動解壓;
  3. 將應(yīng)用的文件夾放到Host目錄下,Tomcat會自動查找并添加到Host中。
Context通過文件配置一共有5個地方可以配置:
 1. conf/server.xml中Context標(biāo)簽;
 2. conf/[enginename]/[hostname]/目錄下以應(yīng)用命名的xml文件。
 3. 應(yīng)用自己的/META_INF/context.xml文件。
 4. conf/context.xml文件。
 5.  conf/[enginename]/[hostname]/context.xml.default 文件。
前三個是用于配置單獨的應(yīng)用,后兩個配置的Context是共享的,conf/context.xml文件中配置的內(nèi)容在整個Tomcat中共享,第5種配置在對應(yīng)的站點(Host)中共享。

8、Container的啟動:

  • 在start時才校驗是否init。
  • Context和Wrapper是動態(tài)添加到對應(yīng)的容器的。

9、Container是采用Pipeline-Vavle處理模式(責(zé)任鏈模式)來處理請求的。即一個請求會多個處理者來依次進(jìn)行處理,每個處理者只負(fù)責(zé)自己的部分,處理完成后返回請求,并遞交給下一個處理者。

  • 在每一個上層容器的BaseVavle中會調(diào)用下一個容器的處理。

10、Connector用于接收并將請求按照HTTP協(xié)議封裝成Request和Response來處理。最底層采用Socket來進(jìn)行連接。

請求最先經(jīng)過Connector,封裝成對應(yīng)HTTPRequest和HTTPResponse,轉(zhuǎn)交給Container,Container處理完之后,把結(jié)果交給Connector,Connector使用Socket將結(jié)果返回給客戶端。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容