Tomcat中各組件介紹

轉載地址:http://blog.csdn.net/vba_2001/article/details/7184759

XML配置文件結構
<Server>                     頂層類元素:一個配置文件中只能有一個<Server>元素,可包含多個Service。
    <Service>                頂層類元素:本身不是容器,可包含一個Engine,多個Connector。
        <Connector/>         連接器類元素:代表通信接口。
           <Engine>   容器類元素:爲特定的Service組件處理所有客戶請求,可包含多個Host。
              <Host>    容器類元素:爲特定的虛擬主機處理所有客戶請求,可包含多個Context。
                 <Context>   容器類元素:爲特定的Web應用處理所有客戶請求。
                 </Context>
               </Host>
              </Engine>
     </Service>
</Server>

本文簡單介紹一下Tomcat中的各種組件。

1、Server

代表整個Tomcat實例,在JVM中是單例的,它還負責管理包含的Service組件的生命週期;下圖是對Server組件的一個簡單描述:


  • 可以在server.xml文件是對Server組件進行配置;
  • 可配置的屬性有:name, shutdown port, shutdown command, class name等;
  • shutdown port默認爲8005;
  • shutdown command默認爲SHUTDOWN;出於安全,只能從同一臺服務器發出SHUTDOWN命令;
  • 提供JNDI的實現,可以放任意對象(如DataSource,環境變量等);

2、Service

Service組件代表的是一組請求處理組件;一個Server實例可以包含多個Service實例,每個Service實例與一組Connector實例和單個Engine實例相關聯;


單Service實例一般夠用了;如果需要針對不同的IP或Port使用不同的Service組件來處理,則可以使用多Service實例;

3、Connector

Connector組件把Engine從不同的通信協議中隔離出來,如HTTP,HTTPS,AJP等;

可以配置Tomcat的工作模式:Standalone & Conjuction;


在Standalone模式中,Tomcat可以配置HTTP/HTTPS的Connector,它既要處理靜態內容,也要委託Engine處理動態內容;


在Conjunction模式中,客戶端是Apache或是IIS之類的Web Server;當Web Server決定將請求轉交給Tomcat處理時,它通過AJP協議與Tomcat交互;AJP協議是基於二進制流的,比HTTP更高效一些;

關於Connector的幾個重要點:

  • 監聽的IP和Port;
  • 處理請求的最大線程數;如果所有線程都忙,則會丟棄新的請求;
  • 所有的Connector接收到請求後,轉換成統一的模式,再交給唯一的Engine處理;Engine負責處理請求併產生響應;
  • Connector將Engine產生的響應按合適的協議發送到客戶端;

4、Engine

其實就是Servlet Engine;一個Service組件只能包含一個Engine組件;但一個Engine可以包含多個Host組件;

它接收代表請求和響應的對象,然後將工作委託給相應的Host組件進行處理;如果沒有找到對應的Host組件,則委託給default Host來處理;

5、Host

兩個重要點:

  • domain name:每個Host必須要有一個唯一的domain name;瀏覽器發過來的請求頭裏包含有該domain name;domain name在Engine裏必須是唯一的;
  • app base folder:發佈到該Host裏的應用的目錄名;可以是相對CATALINA_BASE的相對路徑也可以是文件系統的絕對路徑;

當Host獲得一個針對特定Host請求時,將會在該Host環境下把請求匹配到對應的Context上;然後把請求交給這個Context來處理;

6、Context

一個 Context對應一個Web Application;它由多個Servlet組成;在創建Context時,將根據conf/web.xml和webapps/${context path}/WEB-INF/web.xml加載Servlet並創建映射表;


  • Document Base:存放war或解壓後的context的地方;
  • Context Path:唯一標誌一個Context;當沒有匹配任何一個Context時,默認的Context將會處理該請求;默認的Context的Context Path爲空;
  • Automatic Reload:一旦監測到Context有修改,則會自動重啓Context;只用於開發模式;

7、Wrapper

Wrapper是Context的子元素,代表了一個Servlet(或一個JSP被編譯後的Servlet);它負責加載Servlet、實例化Servlet、以及觸發生命週期方法的調用,如init(), service(), destory()方法;另外,Wrapper也負責調用與Servlet相關的Filter;

Tomcat處理一個HTTP請求的過程
假設來自客戶的請求爲: http://localhost:8080/wsota/wsota_index.jsp 
1) 請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得 
2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應 
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host 
4) Engine匹配到名爲localhost的Host(即使匹配不到也把請求交給該Host處理,因爲該Host被定義爲該Engine的默認主機) 
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context 
6) Host匹配到路徑爲/wsota的Context(如果匹配不到就把該請求交給路徑名爲""的Context去處理) 
7) path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet 
8) Context匹配到URL PATTERN爲*.jsp的servlet,對應於JspServlet類 
9) 構造HttpServletRequest對象和HttpServletResponse對象,作爲參數調用JspServlet的doGet或doPost方法 
10)Context把執行完了之後的HttpServletResponse對象返回給Host 
11)Host把HttpServletResponse對象返回給Engine 
12)Engine把HttpServletResponse對象返回給Connector 
13)Connector把HttpServletResponse對象返回給客戶browser

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