Tomcat結構及處理請求過程

Tomcat是一個基於組件形式的的Web容器,由Server(服務器)、Service(服務)、Connector(連接器)、Engine(引擎)、Host(主機)、Context(應用服務)組成,它們在server.xml裡配置:

<code><server>   <service>    <connector>        <connector>    <engine>      <host>      <context>  /<host>    /<engine>  /<service>/<server>/<code>

Tomcat組件

Tomcat結構及處理請求過程

Server:代表整個Tomcat,它包含所有的容器;

Service:相當於一個集合,包含多個Connector(連接)、一個Engine(引擎),它還負責處理所有Connector(連接)獲取的客戶請求;

Connector:一個Connector(連接)在指定的接口上偵聽客戶的請求,並將客戶的請求交給Engine(引擎)來進行處理並獲得回應返回給客戶請求;

Engine:一個Engine(引擎)下可以配置多個虛擬主機Host,每個主機都有一個域名,當Engine獲得一個請求時,會把這個請求發送的相應的Host上,Engine有一個默認的虛擬主機,如果沒有虛擬主機能夠匹配這個請求,那就由這個默認的虛擬主機來進行處理請求;

Host:代表一個Virtual host,每個虛擬主機都和某個網絡域名想匹配,每個虛擬主機下面可以部署一個或者多個web app,每個web對應一個context,有一個context path,當一個host獲取請求時,就把該請求匹配到某個context上;

Context:一個context對應一個web aplication,一個web由一個或多個servlet組成,Context在創建的時候將根據配置文件CATALINA_HOME/conf/web.xml和WEBAPP_HOME/WEB-INF/web.xml載入servlet類,當context獲取請求時,講在自己的映射表中需找相匹配的servlet類,如果找到,則執行該類,獲得請求的回應,並返回。

處理請求過程

現在我來模擬Tomcat處理一個Http請求的過程:

設置一個來自客戶端URL:http://localhost:8080/webgateway/index

  1. 服務器8080端口接收到客戶發來的請求,被一個在那裡監聽的叫HTTP1.1的Connector獲取了這個鏈接請求;
  2. Connector把請求交給同在Service下的Engine去處理,並等待Engine的響應;
  3. Engine把url解析,並把請求傳給相對應的Host處理,如果沒有相對應的Host,則用默認名叫localhost的Host來處理;
  4. Host再把url解析為/webgateway/index.html,匹配context-path為/webgateway的Context去處理(如果匹配不到就把該請求交給路徑名為””的Context去處理);
  5. context-path為/webgateway的Context會匹配Servlet Mapping為/index的Servlet處理;
  6. 構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用Servlet的doGet或doPost方法;
  7. Context把處理完的HttpServletResponse對象返回給Host;
  8. Host把HttpServletResponse對象返回給Engine;
  9. Engine把HttpServletResponse對象返回給Connector;
  10. Connector把HttpServletResponse對象返回給客戶browser。


分享到:


相關文章: