1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Tomcat源碼分析 · 貳 —— 啟動過程剖析

        共 1460字,需瀏覽 3分鐘

         ·

        2021-10-01 08:53

        前言

        今天我們來繼續(xù)分析tomcat源碼,昨天我們已經(jīng)分析完了它的啟動腳本和其中的init方法,我們現(xiàn)在知道init其實(shí)就是進(jìn)行了ClassLoader的初始化操作,其中資源路徑來源于catalina.properties文件,同時我們還知道最終初始化的ClassLoaderURLClassLoader

        下面我們來看下Tomcat啟動過程中的其他操作。

        Tomcat

        昨天關(guān)于init方法還沒講完,所以今天先要繼續(xù)分析剩余內(nèi)容。

        init方法補(bǔ)充

        關(guān)于init方法其實(shí)昨天基本上已經(jīng)分析完了,因?yàn)樽蛱旌蟀攵味荚诜治?code style="overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">initClassLooders方法,所以今天回過頭再來補(bǔ)充下init后續(xù)的其他方法。

        首先是setContextClasserLoader,這里的操作其實(shí)就是設(shè)置容器的類加載器,而這里的類加載器就是intiClassLoaders中生成的創(chuàng)建的類加載器。這個方法方法就是一個簡單賦值操作就不展開講了,需要注意的是這里獲取并建議了java的安全策略管理器:

        然后是加載類的操作securityClassLoad,這里也校驗(yàn)了安全策略管理器,下面截圖已經(jīng)詳細(xì)展示了每一個操作具體加載的包,然后通過類的加載方法loadClass加載對應(yīng)包下的類:

        再接著,通過catalinaLoader類加載器,加載了org.apache.catalina.startup.Catalina,并創(chuàng)建它的實(shí)例,最后反射調(diào)用它的setParentClassLoader方法,設(shè)置父級類加載器為java.lang.ClassLoader,最終將實(shí)例化結(jié)果賦值給BootStrapcatalinaDaemon屬性,至此init方法執(zhí)行完成。

        繼續(xù)main方法

        執(zhí)行完bootstrap的初始化操作之后,會把bootstrap賦值給daemon,然后緊接著會解析command命令,分別執(zhí)行它的setAwait、 loadstart方法,這里調(diào)用方式都是反射,最終都調(diào)用的是catalinaDaemon實(shí)例對應(yīng)的方法:

        我們先看下setAwait方法,這里的catalinaDaemon就是前面我們實(shí)例化的org.apache.catalina.startup.Catalina,然后反射調(diào)用它的setAwait方法:

        load方法調(diào)用也差不多:

        start方法也是一樣的:

        好了,今天就先分享這么多,明天我們在深入剖析下catalina中對應(yīng)方法的實(shí)現(xiàn)。

        總結(jié)

        從目前來看,Tomcat的啟動過程確實(shí)筆記簡單,短短幾行代碼就啟動成功了,不過核心的功能應(yīng)該還在后面,讓我們拭目以待吧。

        最后再探討一個非技術(shù)問題,這兩天看源碼一直有個問題,為啥Tomcat中有很多變量都用到了catalina這個單詞,是有什么特殊含義嗎?百度之后,發(fā)現(xiàn)catalina直接翻譯過來就是凱特琳娜,所以網(wǎng)上有兩種說法,一種說法是開發(fā)者老婆的名字叫凱特琳娜,一種說法是美國西海岸有一個叫catalina的小島,開發(fā)者比較喜歡那里,所以叫這個名字。我覺得第一種可能性還是蠻高的,畢竟Tomcat本身就是作者養(yǎng)的一只貓的名字,所以catalina是他老婆的名字也很順理成章,而且這也算是程序員的浪漫吧!我的變量里面有你的影子……

        - END -


        瀏覽 33
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产7777| 麻豆AV96熟妇人妻 | 欧洲精品一区二区三区 | aaaaaa做受片在线观看 | 日本少妇裸体做爰高潮片 | 4438全国最大无码视频 | 狠狠色狠狠色综合人人 | 黑人大鸡巴网 | 白嫩美女在线观看 | 爽 好大 快 奶水声音91 午夜激情视频网站 |