Tomcat 1—— 結構分析

Tomcat 一 結構分析

本系列包含如下幾個內容:
1. tomcat結構分析
2. 配置tomcat多域名訪問
3. 配置https訪問

1 幾個重要概念

Tomcat是常用的servlet容器,要了解其結構首先需要清楚幾個基本概念:

圖1 URL解析
* http,是通訊協議,類似的協議還可以是https
* www.zzt.com,是域名或者稱之爲主機 host
* 8080 是端口號,常用的http協議端口號是80,https協議端口號是443
* web1 該路徑關係到server.xml中context的配置,engine根據該配置決定如何解析路徑。
* URI,uniform resource identifier URI。就是在某一規則下能把一個資源獨一無二地標識出來。假設這個世界上所有人的名字都不能重複,那麼名字就是URI的一個實例,通過名字這個字符串就可以標識出唯一的一個人。現實當中名字當然是會重複的,所以身份證號纔是URI。
* URL,uniform resource locator。通過描述是哪個主機上哪個路徑上的文件來唯一確定一個資源,也就是定位的方式來實現的URI。
* 不論是用定位的方式還是用編號的方式,我們都可以唯一確定一個人,都是URl的一種實現,而URL就是用定位的方式實現的URI。*

2 模塊組成結構


先通過一個實例說明瀏覽器是如何跟tomcat通訊的,假設用戶訪問http://www.zzt.com:8080/web1/hello.jsp

• 1) 請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1(也可能是nio或者apr)Connector獲得
• 2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應
• 3) Engine獲得請求www.zzt.com/web1/hello.jsp,匹配它所擁有的所有虛擬主機Host
• 4) Engine匹配到名爲www.zzt.com的Host(如果匹配不到把請求交給該Engine的默認主機)
• 5) www.zzt.com Host獲得請求/web1/hello.jsp,匹配它所擁有的所有Context
• 6) Host匹配到路徑爲/web1的Context(如果匹配不到就把該請求交給路徑名爲”“的Context去處理)
• 7) path=”/web1”的Context獲得請求/hello.jsp,在它的mapping table中尋找對應的servlet(或者path=”“的context獲得請求/web1/hello.jsp)
• 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

上述過程也可以參考下面的組成結構分析:

3 文檔組成結構

tomcat的核心配置文檔是server.xml,該文檔的組成結構如下

<Server>
    <Listener />
    <GlobaNamingResources>
    </GlobaNamingResources>
    <Service>
        <Connector />
        <Engine>
            <Logger />
            <Realm />
                <host>
                    <Logger />
                    <Context />
                </host>
        </Engine>
    </Service>
</Server>
  • server:代表整個容器,是Tomcat實例的頂層元素.由org.apache.catalina.Server接口來定義。一個server可包含多個“service”實例,服務器默認在8005端口監聽shutdown命令。

備註:一個“Server”自身不是一個“Container”(容器),因此不可以定義諸如“Valves”或者“Loggers”子組件。8005是安全隱患,建議改爲其他端口。
測試:
telnet localhost 8005
輸入:SHUTDOWN
結果:關閉tomcat

  • service 元素,由org.apache.catalina.Service接口定義。Service包含一個或多個connector元素,而這些connector共享一個Engine元素。即:Service是一組Connector的集合,它們共用一個Engine來處理所有Connector收到的請求。

注意:一個“Service”自身不是一個容器,因此,不可定義諸如“Valves”或“Loggers”子組件。

  • connector元素,由Connector接口定義.元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果。配置http爲https主要是修改connector。

  • Engine元素。每個Service元素只能有一個Engine元素.處理在同一個中所有元素接收到的客戶請求.由org.apahce.catalina.Engine接口定義. Engine用來處理Connector收到的Http請求它將匹配請求和自己的虛擬主機,並把請求轉交給對應的Host來處理。

  • Host元素。一個Engine元素可以包含多個元素.每個的元素定義了一個虛擬主機.它包含了一個或多個Web應用.

備註:
appBase : 指 定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於的相對目錄.如果沒有此項,默認 爲/webapps. 它將匹配請求和自己的Context的路徑,並把請求轉交給對應的Context來處 理
autoDeploy:如果此項設爲true,表示Tomcat服務處於運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發佈這個WEB應用
unpackWARs:如果此項設置爲true,表示把WEB應用的WAR文件先展開爲開放目錄結構後再運行.如果設爲false將直接運行爲WAR文件
alias:指定主機別名,可以指定多個別名
deployOnStartup:如果此項設爲true,表示Tomcat服務器啓動時會自動發佈appBase目錄下所有的Web應用.如果Web應用 中的server.xml沒有相應的元素,將採用Tomcat默認的Context

  • context 元素。由Context接口定義.是使用最頻繁的元素,對應於一個Web App。

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

** 參考資料:
https://www.cnblogs.com/yanghua1012/p/5869192.html

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