private static Bootstrap daemon = null; private static final File catalinaBaseFile; private static final File catalinaHomeFile; private static final Pattern PATH_PATTERN = Pattern.compile("(\".*?\")|(([^,])*)"); static { // Will always be non-null String userDir = System.getProperty("user.dir"); // Home first String home = System.getProperty(Globals.CATALINA_HOME_PROP); File homeFile = null; if (home != null) { File f = new File(home); try { homeFile = f.getCanonicalFile(); } catch (IOException ioe) { homeFile = f.getAbsoluteFile(); } } if (homeFile == null) { // First fall-back. See if current directory is a bin directory // in a normal Tomcat install File bootstrapJar = new File(userDir, "bootstrap.jar"); if (bootstrapJar.exists()) { File f = new File(userDir, ".."); try { homeFile = f.getCanonicalFile(); } catch (IOException ioe) { homeFile = f.getAbsoluteFile(); } } } if (homeFile == null) { // Second fall-back. Use current directory File f = new File(userDir); try { homeFile = f.getCanonicalFile(); } catch (IOException ioe) { homeFile = f.getAbsoluteFile(); } } catalinaHomeFile = homeFile; System.setProperty( Globals.CATALINA_HOME_PROP, catalinaHomeFile.getPath()); // Then base String base = System.getProperty(Globals.CATALINA_BASE_PROP); if (base == null) { catalinaBaseFile = catalinaHomeFile; } else { File baseFile = new File(base); try { baseFile = baseFile.getCanonicalFile(); } catch (IOException ioe) { baseFile = baseFile.getAbsoluteFile(); } catalinaBaseFile = baseFile; } System.setProperty( Globals.CATALINA_BASE_PROP, catalinaBaseFile.getPath()); }
上篇關(guān)于JVM類加載過程即是學(xué)習(xí)tomcat源碼學(xué)習(xí)過程中學(xué)習(xí)到的 ?http://blog.sina.com.cn/s/blog_ae63f79a0102vw94.html
我們查看bootstrap類的源碼,可以發(fā)現(xiàn),在類加載過程中,已經(jīng)嘗試從系統(tǒng)環(huán)境變量中獲取 catalina.home和
catalina.base的值了,若獲取不到則給這兩個變量catalinaBaseFile,catalinaHomeFile賦值當(dāng)前路徑并創(chuàng)建兩個文件。
接下來是main函數(shù)的執(zhí)行,創(chuàng)建Bootstrap對象后,bootstrap先調(diào)用成員函數(shù) bootstrap.init(); 在()中調(diào)用initClassLoaders中嘗試從conf文件夾下的catalina.properties文件中加載屬性,分別創(chuàng)建三個ClassLoader,即Bootstrap類中的三個成員變量:commonLoader,catalinaLoader和sharedLoader。
這里可以討論下classloader
ClassLoader即類加載子系統(tǒng),負(fù)責(zé)加載編譯好的.class字節(jié)碼文件,并裝入內(nèi)存,使JVM可以實例化或以其他方式使用加載后的類(比如說java非常常用的反射)。JVM的類加載子系統(tǒng)支持運行時的動態(tài)裝載,動態(tài)加載有很多的優(yōu)點,例如可以節(jié)省內(nèi)存空間、靈活地從網(wǎng)絡(luò)上加載類,動態(tài)加載還有一個好處是可以通過命名空間的分隔來實現(xiàn)類的隔離,增強了整個系統(tǒng)的安全性。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
