1. 程式人生 > >Tomcat如何處理一個HTTP請求的過程?

Tomcat如何處理一個HTTP請求的過程?

Tomcat是一個基於元件的伺服器,它的構成元件都是可配置的,Tomcat的各個元件是在<TOMCAT_HOME>\conf\server.xml檔案中配置的。

server.xml檔案的基本組成結構如下:

<Server>                     頂層類元素:一個配置檔案中只能有一個<Server>元素,可包含多個Service。

    <Service>                頂層類元素:本身不是容器,可包含一個Engine,多個Connector。

           <Connector/>      聯結器類元素:代表通訊介面。

           <Engine>         容器類元素:為特定的Service元件處理所有客戶請求,可包含多個Host。

              <Host>        容器類元素:為特定的虛擬主機處理所有客戶請求,可包含多個Context。

                 <Context>   容器類元素:為特定的Web應用處理所有客戶請求。

                 </Context>

              </Host>

          </Engine>

     </Service>

</Server>

各元件介紹:

Connector元件:通過這個介面接收客戶的請求,然戶傳送給其他的容器元件,最後再把伺服器的響應結果傳遞給客戶。

在Tomcat中只有3個元件是可以處理客戶請求並生成響應的,這3個元件分別是Engine、Host和Context元件:

  • Engine元件:下可以包含多個Host元件,它為特定的Service元件處理所有客戶請求。
  • Host元件:一個Host元件代表一個虛擬主機,一個虛擬主機中可以包含多個Web應用(Context元件)。
  • Context元件:代表一個Web應用。

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,匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的預設主機)

4)localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context,Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)

5)path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet,Context匹配到URL PATTERN為*.jsp的servlet,對應於JspServlet類

6)構造HttpServletRequest物件和HttpServletResponse物件,作為引數呼叫JspServlet的doGet或doPost方法

7)Context把執行完了之後的HttpServletResponse物件返回給Host

8)Host把HttpServletResponse物件返回給Engine

9)Engine把HttpServletResponse物件返回給Connector

10)Connector把HttpServletResponse物件返回給客戶browser