當前位置:首頁 » 編程軟體 » 編譯tomcat源碼

編譯tomcat源碼

發布時間: 2023-01-06 23:49:00

Ⅰ 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命令後退出

Ⅱ 如何將tomcat7.0源碼導入eclipse

1.Tomcat源碼下載

這個里下載tomcat-6.0.33源碼。

2.ant安裝,用於編譯tomcat的源碼。

ant下載解壓後將其bin添加到系統環境path中。

3.IDE——選用Eclipse3.7。

Ⅲ 怎麼將tomcat源碼導入eclipse

1. 去apache官網下載對應的tomcat版本源碼(我這里下載的是9.0.0.M9) http://tomcat.apache.org/download-90.cgi
2. 解壓後的源碼是沒法作為工程直接導入eclipse的。需要使用ant進行編譯,所以這里需要去ant官網下載ant對應版本。http://ant.apache.org/bindownload.cgi

Ⅳ tomcat的classloader的源碼解析

相關源碼如下:
common,catalina,shared三個classloader沒有違背雙親載入原則

WebappClassLoader違背了雙親委派機制 因為重寫了loadclass

在context啟動的時候其會啟動一個webappLoader
而webappLoader會創建一個WebappClassLoader,設置一個source(對應咱們webapps下面的一個項目)
設置delegate=false 代表不需要遵循雙親委派機制,然後啟動WebappClassLoader,
然後這個context的載入的會使用自己的context裡面含有的WebappClassLoader去載入bean

當webapps下面有多個項目就建立多個standardContext
每個standardContext 設有一個對應的webappLoader和webappClassLoader

Ⅳ tomcat怎麼編譯jsp文件

一、jsp執行過程圖解

用戶訪問jsp頁面時,jsp的處理過程如下圖所示:從圖中可以看出,Tomcat的核心組建是connector和container,container就是容器。容器就是負責管理控制servlet的應用程序。圖中的jasper就是解析jsp的jsp引擎。Tomcat既是servlet容器又是web伺服器,也是jsp引擎。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712