當前位置:編程學習大全網 - 源碼下載 - Tomcat源碼解析-組件之StandardServer

Tomcat源碼解析-組件之StandardServer

StandardServer是tomcat容器的最高層的組件,職責如下:

實現Tomcat壹鍵啟動關閉,管理全局 JDNI資源,管理子組件,阻塞tomcat主線程。

StandardServer子組件

Bootstarp作為tomcat啟動類,JVM會調用main函數完成tomcat啟動。在其內部流程如下:

核心方法功能

Tomcat使用Digester解析server.xml,Digester是壹款用於將xml轉換為Java對象的事件驅動型工具,是對SAX的高層次的封裝。相對於SAX可以為xml中每壹個標簽設置對應的解析規則。詳見 Tomcat相關技術-Digester(二)

這裏通過解析server.xml實例化StandardServer,並設置server.xml文件中定義的屬性初始化。

server.xml配置

<Server>標簽用來表示當前StandardServer組件

StandardServer構造函數

將<server>標簽屬性映射到StandardServer對象屬性中

<GlobalNamingResources>標簽中定義了全局JNDI資源,

<Listener>標簽中定義StandardServer組件中需要的LifecycleListener監聽器。<Server>標簽內可以設置多個<Listener>。

Server中定義的Listener

添加LifecycleListener監聽器

<Service>標簽中定義StandardServer組件中子組件Service。<Server>標簽內可以設置多個<Service>。

添加Service子組件

StandardServer作為tomcat最上層的組件,和其他所有組件壹樣都實現了Lifecycle 接口。

Tomcat 定義壹個基類LifecycleBase 來實現 Lifecycle 接口,把壹些公***的邏輯放到基類中去,比如生命狀態的轉變與維護、生命事件的觸發以及監聽器的添加和刪除等,而子類就負責實現自己的初始化、啟動和停止等模板方法。為了避免跟基類中的方法同名,我們把具體子類的實現方法改個名字,在後面加上 Internal,叫 initInternal、startInternal 等。

其他模板方法

詳見 Tomcat架構設計-組件生命周期

StandardServer組件初始化的核心是調用所有Service子組件初始化方法init。

詳細流程如下:

啟動start的核心是調用所有Service子組件初始化方法start。

詳細流程如下:

啟動stop的核心是調用所有Service子組件初始化方法stop。

詳細流程如下:

銷毀destroy的核心是調用所有Service子組件初始化方法destroy。

1 調用所有Service子組件啟動方法destroy

2 銷毀JND全局資源

3 jmx bean註銷MBeanFactory

4 jmx bean註銷StringCache

5 調用LifecycleMBeanBase.destroyInternal 將當前組件對象從jmx 註銷

在這樣的設計中,在父組件的 init 方法裏需要創建子組件並調用子組件的 init 方法。同樣,在父組件的 start 方法裏也需要調用子組件的 start 方法。只要調用最頂層組件StandardServer的 init 和 start 方法,整個 Tomcat 就被啟動起來了。只要調用最頂層組件StandardServer的 destroy 和 stop 方法,整個 Tomcat 就被關閉。

添加已在解析server.xml初始化設置調用

阻塞tomcat主線程,只要stopAwait不為true, tomcat主線程在此無限循環.監聽到客戶端發起SHUTDOWN命令後退出

  • 上一篇:跪求壹個:c語言密碼驗證程序的源代碼
  • 下一篇:主力進出指標怎麽看(主力進出指標公式)
  • copyright 2024編程學習大全網