<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Tomcat啟動(dòng)流程

          共 1862字,需瀏覽 4分鐘

           ·

          2023-09-20 14:20

          一、Tomcat 啟動(dòng)流程

          步驟:
          1、啟動(dòng)tomcat,需要調(diào)用 bin/startup.bat (在linux 目錄下,需要調(diào)用 bin/startup.sh),在startup.bat 腳本中,調(diào)用了catalina.bat。
          2、在catalina.bat 腳本文件中,調(diào)用了BootStrap 中的main方法。
          3、在BootStrap 的main 方法中調(diào)用了init方法 , 來創(chuàng)建Catalina 及初始化類加載器。
          4、在BootStrap 的main 方法中調(diào)用了load 方法 , 在其中又調(diào)用了Catalina的load方法。
          5、在Catalina 的load方法中,需要進(jìn)行一些初始化的工作,并需要構(gòu)造Digester 對(duì)象,用于解析 XML。

          6、然后在調(diào)用后續(xù)組件的初始化操作。加載Tomcat的配置文件,初始化容器組件,監(jiān)聽對(duì)應(yīng)的端口號(hào),準(zhǔn)備接受客戶端請(qǐng)求。

          1.1、相關(guān)類解析
          1.1.1、Lifecycle

          由于所有的組件均存在初始化、啟動(dòng)、停止等生命周期方法,擁有生命周期管理的特性, 所以Tomcat在設(shè)計(jì)的時(shí)候, 基于生命周期管理抽象成了一個(gè)接口 Lifecycle ,而組件 Server、Service、Container、Executor、Connector 組件 , 都實(shí)現(xiàn)了一個(gè)生命周期的接口,從而具有了以下生命周期中的核心方法:

          1、init():初始化組件
          2、start():啟動(dòng)組件
          3、stop():停止組件

          4、destroy():銷毀組件

          1.1.2、各組件的默認(rèn)實(shí)現(xiàn)

          上面我們提到的Server、Service、Engine、Host、Context都是接口, 下圖中羅列了這些接口的默認(rèn)實(shí)現(xiàn)類。

          當(dāng)前對(duì)于 Endpoint組件來說,在Tomcat中沒有對(duì)應(yīng)的Endpoint接口, 但是有一個(gè)抽象類 AbstractEndpoint ,其下有三個(gè)實(shí)現(xiàn)類:NioEndpoint、Nio2Endpoint、AprEndpoint , 這三個(gè)實(shí)現(xiàn)類,分別對(duì)應(yīng)于前面講解鏈接器 Coyote時(shí), 提到的鏈接器支持的三種IO模型:NIO、NIO2、APR,Tomcat8.5版本中,默認(rèn)采用的是 NioEndpoint。


          ProtocolHandler:Coyote協(xié)議接口,通過封裝Endpoint和Processor , 實(shí)現(xiàn)針對(duì)具體協(xié)議的處理功能。Tomcat按照協(xié)議和IO提供了6個(gè)實(shí)現(xiàn)類。

          AJP協(xié)議:

          1、AjpNioProtocol:采用NIO的IO模型。
          2、AjpNio2Protocol:采用NIO2的IO模型。

          3、AjpAprProtocol:采用APR的IO模型,需要依賴于APR庫。

          HTTP協(xié)議:

          1、Http11NioProtocol:采用NIO的IO模型,默認(rèn)使用的協(xié)議(如果服務(wù)器沒有安裝

          APR)。
          2、Http11Nio2Protocol:采用NIO2的IO模型。

          3、Http11AprProtocol:采用APR的IO模型,需要依賴于APR庫。

          源碼入口

          目錄:org.apache.catalina.startupMainClassBootStrap ‐‐‐‐> main(String[] args)

          總結(jié)

          從啟動(dòng)流程圖中以及源碼中,我們可以看出Tomcat的啟動(dòng)過程非常標(biāo)準(zhǔn)化, 統(tǒng)一按照生命周期管理接口Lifecycle的定義進(jìn)行啟動(dòng)。首先調(diào)用init() 方法進(jìn)行組件的逐級(jí)初始化操作,然后再調(diào)用start()方法進(jìn)行啟動(dòng)。

          每一級(jí)的組件除了完成自身的處理外,還要負(fù)責(zé)調(diào)用子組件響應(yīng)的生命周期管理方法,

          組件與組件之間是松耦合的,因?yàn)槲覀兛梢院苋菀椎耐ㄟ^配置文件進(jìn)行修改和替換。

          鏈接:https://www.cnblogs.com/wansw/p/10232613.html

          (版權(quán)歸原作者所有,侵刪)


          瀏覽 1325
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人大香蕉在线 | 2020年香蕉在线视频观看拒绝收费 | 国产中文字幕免费观看 | 99精品在线免费视频 | 人妻久久精品天天中文字幕 |