tomcat學習 --- 結構介紹


Tomcat是一個免費的開放源碼的Serlvet容器,它是Apache基金會的Jakarta項目中的一個核心項目,也是sun公司官方推薦的servlet和jsp容器,同時它還獲得過多種榮譽。servlet和jsp的最新規範都可以在tomcat的新版本中得到實現。Tomcat具有輕量級和靈活嵌入到應用系統中的優點,所以得到了廣泛的應用。在Tomcat的發展中,Sun在1999年六月宣佈參與Jakarta項目的Tomcat servlet容器和Jsp引擎的開發,使得Tomcat在3.x和4.x版之間系統設計上發生了比較大的變化。Tomcat的其他信息我就不多說了。有興趣的朋友可以訪問http://jakarta.apache.org/ 的官方網站得到更多的信息。

Tomcat 服務器是由一系列可配置的組件構成,其中核心組件是 Catalina Servlet 容器,它是所有其他 Tomcat 組件的頂層容器。Tomcat 的組件可以在 <CATALINA_HOME>/conf/server.xml 文件中進行配置,每個 Tomcat 組件在 server.xml 文件中對應一種配置元素。

    Tomcat 的結構如下:



 

      一個Server可以有多個Service,
一個Service只有一個Engine,一個Http Connector,一個 AJP Connector。
一個Engine可以有多個Host,
一個Host可以有多個Context,

其中每個部分的含義:
Service:
    Service是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求

Connector:
        一個Connector將在某個指定端口上偵聽客戶請求,並將獲得的請求交給Engine來處理,從Engine處獲得迴應並返回客戶
TOMCAT有兩個典型的Connector,一個直接偵聽來自browser的http請求,一個偵聽來自其它WebServer的請求
Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求
Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求    

Engine:
        Engine下可以配置多個虛擬主機Virtual Host,每個虛擬主機都有一個域名
當Engine獲得一個請求時,它把該請求匹配到某個Host上,然後把該請求交給該Host來處理
Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認Host來處理

Host:
        代表一個Virtual Host,虛擬主機,每個虛擬主機和某個網絡域名Domain Name相匹配
每個虛擬主機下都可以部署(deploy)一個或者多個Web App,每個Web App對應於一個Context,有一個Context path
當Host獲得一個請求時,將把該請求匹配到某個Context上,然後把該請求交給該Context來處理
匹配的方法是“最長匹配”,所以一個path==""的Context將成爲該Host的默認Context
所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配

    Context:
一個Context對應於一個Web Application,一個Web Application由一個或者多個Servlet組成
Context在創建的時候將根據配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
如果找到,則執行該類,獲得請求的迴應,並返回
    
    
Tomcat Server處理一個http請求的過程,假設來自客戶的請求爲:http://localhost:8080/test/index.jsp
1.    請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得
2.    Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應
3.    Engine獲得請求localhost/test/index.jsp,匹配它所擁有的所有虛擬主機Host
4.    Engine匹配到名爲localhost的Host(即使匹配不到也把請求交給該Host處理,因爲該Host被定義爲該Engine的默認主機)
5.    localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
6.    Host匹配到路徑爲/test的Context(如果匹配不到就把該請求交給路徑名爲""的Context去處理)
7.    path="/test"的Context獲得請求/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

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