1. Tomcat啟動流程

        共 1862字,需瀏覽 4分鐘

         ·

        2023-09-20 14:20

        一、Tomcat 啟動流程

        步驟:
        1、啟動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方法中,需要進行一些初始化的工作,并需要構造Digester 對象,用于解析 XML。

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

        1.1、相關類解析
        1.1.1、Lifecycle

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

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

        4、destroy():銷毀組件

        1.1.2、各組件的默認實現(xiàn)

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

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


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

        AJP協(xié)議:

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

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

        HTTP協(xié)議:

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

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

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

        源碼入口

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

        總結

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

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

        組件與組件之間是松耦合的,因為我們可以很容易的通過配置文件進行修改和替換。

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

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


        瀏覽 1325
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 日本三级精品视频 | 色偷偷色噜噜狠狠成人免费 | 十二寡妇肉床艳史完整版播放 | 夜夜嗨国产精品粉嫩久久 | 91福利社在线观看 |