環境: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...