国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Tomcat源碼分析之—具體啟動(dòng)流程分析

2019-11-14 22:08:58
字體:
供稿:網(wǎng)友
Tomcat源碼分析之—具體啟動(dòng)流程分析

從Tomcat啟動(dòng)調(diào)用棧可知,Bootstrap類的main方法為整個(gè)Tomcat的入口,在init初始化Bootstrap類的時(shí)候?yàn)樵O(shè)置Catalina的工作路徑也就是Catalina_HOME信息、Catalina.base信息,在initClassLoaders方法中初始化類加載器,然后通過反射初始化org.apache.catalina.startup.Catalina作為catalina守護(hù)進(jìn)程;

一、load

Bootstrap中l(wèi)oad流程:

  1. 反射調(diào)用Catalina的load方法。
  2. 調(diào)用Catalina的initDirs()、initNaming()初始化catalinaHome、catalina.useNaming等信息。
  3. 創(chuàng)建Digester對(duì)象,調(diào)用createStartDigester創(chuàng)建與配置Digester信息,載入Server.xml配置文件,使用Digester解析Server.xml文件,并根據(jù)Server文件的配置信息創(chuàng)建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等對(duì)象。
  4. 設(shè)置當(dāng)前Catalina為StandardServer的Catalina對(duì)象,調(diào)用initStreams。
  5. 調(diào)用StandardServer的init方法初始化Server。

調(diào)用Bootstrap的load方法中用反射調(diào)用Catalina的load,在Catalina中初始化initDirs()路徑信息,調(diào)用createStartDigester創(chuàng)建與配置Digester信息,載入Server.xml配置文件,使用Digester解析Server.xml文件,并根據(jù)Server文件的配置信息創(chuàng)建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等對(duì)象,及對(duì)象的關(guān)聯(lián)關(guān)系(Digester的相關(guān)知識(shí)這里就不介紹了)。由于在Digester解析Server.xml的時(shí)候已經(jīng)創(chuàng)建Server對(duì)象,所以這里也將server的init方法初始化Server對(duì)象,至此Bootstrap執(zhí)行完成,準(zhǔn)確的說是Catalina的load載入完成。

二、start 接著將調(diào)用Bootstrap的start方法啟動(dòng)容器,在start方法中也是通過反射調(diào)用Catalina的start方法,如下圖:

然后在Catalina中調(diào)用StandardServer對(duì)象的start方法啟動(dòng)server,在start方法中就會(huì)像我們?cè)赥omcat源碼分析之—組件啟動(dòng)實(shí)現(xiàn)分析那節(jié)中分析的一樣,通過Tomcat的生命周期管理觀察者模式實(shí)現(xiàn)對(duì)Service、Connector、Engine、Host、Context、Wrapper、Pipeline的啟動(dòng),這里就不重復(fù)在講解了;

三、注冊(cè)關(guān)閉鉤子(ShutdownHook)

1 if (shutdownHook == null) {2     shutdownHook = new CatalinaShutdownHook();3 }4 Runtime.getRuntime().addShutdownHook(shutdownHook);

四、調(diào)用await()與stop(),等候關(guān)閉請(qǐng)求與stop容器 調(diào)用Catalina的await實(shí)際上就調(diào)用StandardServer的await如上圖,等候<Server port="8006" shutdown="SHUTDOWN">在Server 8006端口上的SHUTDOWN關(guān)閉Tomcat請(qǐng)求。接收到SHUTDOWN請(qǐng)求后調(diào)用StandardServer的stop方法與destroy方法如下圖: 生命周期管理觀察者模式實(shí)現(xiàn)對(duì)Service、Connector、Engine、Host、Context、Wrapper、Pipeline的關(guān)閉與釋放資源

五、總結(jié) Tomcat的啟動(dòng)與關(guān)閉流程到此就結(jié)束了,整個(gè)流程還是比較清晰的,只要清除Tomcat的啟動(dòng)流程也自然就懂得了Tomcat的關(guān)閉流程,Tomcat中使用了觀察者模式對(duì)Tomcat的生命周期進(jìn)行了管理,了解LifecycleBase、Lifecycle、LifecycleSupport等相關(guān)類也就了解了整個(gè)流程,整個(gè)流程的時(shí)序圖如下:

Tomcat啟動(dòng)與關(guān)閉時(shí)序圖

文章首發(fā)地址:Solinx

http://www.solinx.co/archives/121


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 双流县| 同德县| 观塘区| 剑阁县| 招远市| 永嘉县| 犍为县| 临洮县| 靖安县| 韩城市| 乌鲁木齐市| 建宁县| 天镇县| 浮梁县| 响水县| 化德县| 徐州市| 关岭| 理塘县| 兴业县| 文成县| 潜江市| 绥化市| 安顺市| 泰州市| 黔江区| 巧家县| 库车县| 古交市| 西乌珠穆沁旗| 新竹县| 棋牌| 元朗区| 武宣县| 河池市| 阿瓦提县| 芦山县| 家居| 垦利县| 云龙县| 大厂|