Tomcat 原始碼閱讀(一)總概

2021-08-08 04:03:28 字數 1919 閱讀 6120

環境:tomcat7.0.28

堅持一下,把原始碼看完,勤奮一點,不要在懶惰了,你已經落下別人很多了

在bootstrap的init方法中,主要工作分5步,首先是初始化變數的問題,也就是設定設定系統變數的操作,呼叫system.setproperty方法。然後是初始化類載入器,設定catalinaloader繫結為當前執行緒,最後用catalinaloader載入類catalina ,並且給類catalina的parentclassloader賦值為catalinaloader。

初始化完畢,呼叫catalina的start方法。

try 

catalinaloader = createclassloader("server", commonloader);

sharedloader = createclassloader("shared", commonloader);

} catch (throwable t)

通過**可以看到,總共建立了3個classloader,commonloader、catalinaloader、sharedloader,

最終呼叫的方法是createclassloader(string name, classloader parent)

string value = catalinaproperties.getproperty(name + ".loader");

if ((value == null) || (value.equals("")))

return parent;

value = replace(value);

listrepositories = new arraylist();

stringtokenizer tokenizer = new stringtokenizer(value, ",");

while (tokenizer.hasmoreelements())

// check for a jar url repository

try catch (malformedurlexception e)

// local repository

if (repository.endswith("*.jar")) else if (repository.endswith(".jar")) else

}return classloade***ctory.createclassloader(repositories, parent);

這一部分**總共就做了2份工作, 

(1)根據傳入方法的name屬性去 catalina.properties配置檔案中找到對應的 name.loader指定的值,封裝成資源庫。catalian.properties的內容如下:

(2)呼叫工廠方法建立類載入器   classloade***ctory.createclassloader(repositores,parent)

結論1:bootstrap的三個類載入器都是urlclassloader的類載入器的物件,並且,如果catalina.properties中的server.loader和shared.loader沒有資料的話,則三者指向的是同乙個類載入器的例項,結合tomcat7的文件結構來看,可以確定commonloader=catalinaloader=sharedloader。

對catalina.load方法解析放在第二節。

對catalina.start方法解析放在第三節。

tomcat原始碼閱讀 一 入口

程式啟動入口 org.apache.catalina.startup.bootstrap的main方法,其最終會呼叫到org.apache.catalina.startup.catalina的load 和start 方法。bootstrap中的關鍵 public static void main s...

tomcat原始碼閱讀筆記一

container全部啟動後,connector接著啟動,connector包含乙個protocolhandler,protocolhandler目前有三種協議 bio nio apr,可以按需求啟用相應的協議。每個協議protocolhandler包含乙個endpoint,在endpoint中開啟...

Tomcat原始碼閱讀系列

再過十來天,就要不再是大三,而步入大四的殿堂了,求職面試的事會接踵而至,鑑於春招時的教訓,自己的學習比較缺乏系統性地整理,向他人交流自己所掌握的技術能力仍有待提高,為此將自己閱讀tomcat原始碼的過程記錄一下,並分享到部落格中,讓有同樣興趣的同學一起交流討論。注 如沒有特別說明的地方,tomcat...