tomcat的啟動過程

來源:互聯網
上載者:User

一、我們知道,tomcat可以由org.apache.catalina.startup.Bootstrap這個類啟動,這個類型做了兩件事情:

1、指定classloader

2、引導Catalina啟動,使用reflection反射技術,調用org.apache.catalina.startup.Catalina的process()方法, 並傳遞參數過去。public void process(String args[])

    Catalina.java的process()做幾件事:
    a: 使用Digester技術裝配tomcat各個容器與組件(server.xml檔案載入);
    b: 為top level的server做初始化工作
    c: 從Server這個容器開始啟動,————轉下一步(二)
    d: 為Server做一個hook程式,當Server 關閉時,關閉整個Tomact容器
    e: 監聽8005連接埠,如果發shutdown,關閉8005連接埠的socket

二、啟動容器

Server(代表整個容器):觸發Server容器中的啟動前、啟動中、啟動後事件,並運行事件處理器。
    Server---->啟動Server的子容器Service(指定提供服務的組件,server.xml中可以配置一個或多個)

  <!-- A "Service" is a collection of one or more "Connectors" that share       a single "Container" Note:  A "Service" is not itself a "Container",        so you may not define subcomponents such as "Valves" at this level.       Documentation at /docs/config/service.html   -->

    Service----> 啟動子容器Engine,啟動Connector(每個Service只有一個Engine,可以有多個Connector)

Engine中指定了處理所有Connector接受到的客戶請求的Host主機名稱。

Connector定義了服務的連接埠號碼,負責接受客戶的請求和向客戶返回相應結果。
    Engine----> Host(一個或多個,每個Host表示一個虛擬機器主機,可以包含一個或多個web應用)

    Host ---->Context(每個Context代表運行在Host上的單個Web應用.)
    StandardContext.start() 這個啟動Context容器的方法被StandardHost調用:

    1、指定Loader,用預設的org.apache.catalina.loader.WebappLoader,Loader就是用來指定這個context會用到哪些類, 哪些jar包。
    2、指定 Manager. 通常使用預設的org.apache.catalina.session. StandardManager 。 Manager是用來管理session的。得到請求後,Request中有一個session屬性。
    3、Binding thread。到了這裡, 就應該發生 class Loader 互換了。 之前是看得見tomcat下面所有的class和lib. 接下來需要看得見當前context下的class。 所以要設定contextClassLoader, 同時還要把舊的ClassLoader記錄下來,因為以後還要用的。
    4、啟動 Loader. 指定這個Context具體要使用哪些classes, 用到哪些jar檔案。 如果reloadable設定成了true, 就會啟動一個線程來監視classes的變化, 如果有變化就重新啟動Context。
    5、啟動logger
    6、觸發Context上的監聽器,作為監聽器之一,ContextConfig會被啟動. ContextConfig就是用來配置web.xml的。 比如這個Context有多少Servlet, 又有多少Filter, 就是在這裡給Context裝上去的。
        6.1、 defaultConfig. 每個context都得配置 tomcat/conf/web.xml 這個檔案。    
        6.2、 applicationConfig 配置自己的 WEB-INF/web.xml 檔案
        6.3、 validateSecurityRoles 許可權驗證。 通常我們在訪問/admin 或者/manager的時候,需要使用者要麼是admin的要麼是manager的, 才能訪問。 而且我們還可以限制那些資源可以訪問, 而哪些不能。 都是在這裡實現的。
        6.4、 tldScan: 掃描一下, 需要用到哪些標籤(tag lab)
    7、啟動manager
    8、postWelcomeFiles() 我們通常會用到的3個開機檔案的名稱:
        index.html、index.htm、index.jsp 就被預設地綁在了這個context上
    9、 listenerStart 配置listener,初始化Listener
    10、 filterStart 配置 filter,初始化Filter
    11、 啟動帶有<load-on-startup>;1</load-on-startup>;的Servlet.
        順序是從小到大: 1,2,3… 最後是0
        預設情況下, 至少會啟動如下3個的Servlet:
        org.apache.catalina.servlets.DefaultServlet  
        處理靜態資源的Servlet. 什麼圖片啊, html啊, css啊, js啊都找他
        org.apache.catalina.servlets.InvokerServlet
        處理沒有做Servlet Mapping的那些Servlet.
        org.apache.jasper.servlet.JspServlet
        處理JSP檔案的.
    12、  標識context已經啟動完畢。

關鍵代碼以後會補上。。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.