網站開發進階(四)Tomcat Server處理一個http請求的過程
Tomcat Server處理一個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
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
10)Context把執行完了之後的HttpServletResponse物件返回給Host
11)Host把HttpServletResponse物件返回給Engine
12)Engine把HttpServletResponse物件返回給Connector
13)Connector把HttpServletResponse物件返回給客戶browser
<Connector>元素
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="GBK" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"/>
<Connector>元素由Connector介面定義.<Connector>元素代表與客戶程式實際互動的給件,它負責接收客戶請求,以及向客戶返回響應結果. 一個“Connector”(聯結器)代表一個請求被接收和應答所需要的端點。每個聯結器通過相關的“Container”(容器)處理請求。
<Host>元素
<Host name="www.weimingcloud.cn" appBase="webapps/lmapp"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
它由Host介面定義.一個Engine元素可以包含多個<Host>元素.每個<Host>的元素定義了一個虛擬主機.它包含了一個或多個Web應用.
注: name是虛擬主機的名字,appBase是虛擬主機指向的目錄,Tomcat啟動時,會自動載入appBase下的應用。 unpackWARs表示是否自動解壓縮appBase下已打成WAR包的應用,autoDeploy表示在伺服器執行的時候,將一個應用放入 appBase下,是否自動部署。
<Context>元素
<Context path="" docBase="." reloadable="true" debug="0"> </Context>
<Context path="/lmapp/files" docBase="e:\webfiles_root\lmapp" reloadable="true" debug="0">
</Context>
它由Context介面定義.是使用最頻繁的元素.每個<Context>元素代表了執行在虛擬主機上的單個Web應用.一個<Host>可以包含多個<Context>元素.每個web應用有唯一的一個相對應的Context代表web應用自身.
path : 該Context的路徑名是"",故該Context是該Host的預設Context
docBase : 該Context的根目錄是webapps/mycontext/
reloadable:如果這個屬性設為true, Tomcat伺服器在執行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS檔案的改運.如果監視到有class檔案被更新,伺服器自重新載入Web應用
useNaming:指定是否支援JNDI,預設值為了true
cookies指定是否通過Cookies來支援Session,預設值為true
<Service>元素
<Service name="Catalina">
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost"> </Engine>
</Service>
該元素由org.apache.catalina.Service介面定義,它包含一個<Engine>元素,以及一個或多個<Connector>,這些Connector元素共享用同一個Engine元素.
redirectPort 指定伺服器正在處理http請求時收到了一個SSL傳輸請求後重定向的埠號。
<Service name="Catalina">
<Service name="Apache">
第一個<Service>處理所有直接由Tomcat伺服器接收的web客戶請求.
第二個<Service>處理所有由Apahce伺服器轉發過來的Web客戶請求 .
注:Server元素下可以有多個Service,埠就是在Service元素下配置的。
其中protocal制定了該埠偵聽的協議型別,HTTP/1.1表示偵聽的是客戶的HTTP請求,即我們通過瀏覽器訪問需要輸入的埠,當埠號是80的時候,可以不用在瀏覽器位址列輸入埠號,這就是我們訪問很多網站不需要指定埠的原因。有時候protocal沒有指定,這時候預設的是HTTP/1.1。注意這個埠必須是閒置的。
Service元素下必須有一個Engine元素,Engine有一個名稱,和一個預設的虛擬主機名。
附:
Tomcat 是一款優秀的JSP/Servlet容器,最初由SUN開發,後來被貢獻給了Apache社群。