亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Tomcat架構(gòu)(四)

系統(tǒng) 1857 0
8標(biāo)準(zhǔn)覆蓋機(jī)制
J2SE 1.4 and 1.5 都包含了一個(gè)XML處理解析器的Java API 。Bootstrap 類加載器加載這個(gè)解析器的類文件,所以這個(gè)解析器會優(yōu)先于任何一個(gè)安裝在CLASSPATH里的解析器 被加載,即使您已經(jīng)安裝了新版本的解析器。標(biāo)準(zhǔn)覆蓋機(jī)制允許您重寫JAVA_HOME/lib/endorsed文件夾里某些特定的類(例如CORBA 和 JAXP 類)。Bootstrap 類加載器將會優(yōu)先加載這些類。想詳細(xì)了解此機(jī)制,請?jiān)L問http://java.sun.com/j2se/1.5.0/docs/guide/standards/ 。

有關(guān)類加載的一些有趣的注意事項(xiàng)如下所示:
? 只有當(dāng)一個(gè)類具有包名、類名以及加載此類文件的類加載器的實(shí)例的時(shí)候,一個(gè)類才會被認(rèn)為完全合格。換句話說,同樣的類被兩個(gè)不同的類加載器加載,會被認(rèn)為是兩個(gè)不同的類。即使在同一個(gè)JVM中,這已影響到這個(gè)類實(shí)例的分配、靜態(tài)屬性或單例的處理。
? 一個(gè)類加載器只能看到位于它層次結(jié)構(gòu)上面的類的目錄。例如,一個(gè)Extension文件夾里的 JAR不能使用應(yīng)用程序類路徑里的類文件。這是因?yàn)椋珽xtension文件夾里的類只能看到Extension類加載器以及Bootstrap 類加載器可以加載的類。
? 當(dāng)一個(gè)類的代碼中引用了另一個(gè)類時(shí),加載引用類的類加載器同樣也會加載被引用的 類,這稱為自定義類加載器。一個(gè)類的自定義類加載器可以使用Class.getClassLoader()來獲得。
? 每個(gè)線程都有一個(gè)上下文類加載器,使用Thread.currentThread(). getContextClassLoader()可以查看到。每次一個(gè)新的線程被創(chuàng)建,這個(gè)新線程的上下文類加載器會被設(shè)置到它的創(chuàng)建線程。main()線程的類加載器是應(yīng)用程序類加載器,它會自動向下傳播到每個(gè)工作線程,除非您通過調(diào)用 Thread.currentThread() .setContextClassLoader() 進(jìn)行干預(yù)。
9JavaEE類加載
在JavaEE的范疇里這種模式顯得有些別扭。
首先,Servlet容器需要為web應(yīng)用提供一個(gè)限制環(huán)境。
如果某個(gè)servlet直接使用系統(tǒng)類加載器(System CalssLoader),那么該servlet會看到啟動Tocmat時(shí)所使用JVM命令中所使用的path下的所有類。這是有潛在安全風(fēng)險(xiǎn)的,因?yàn)閻阂鈶?yīng)用(部署在同一個(gè)主機(jī)商的主機(jī)上的應(yīng)用)可能被允許加載到其兄弟節(jié)點(diǎn)上的web應(yīng)用的類。正是因?yàn)槿绱耍總€(gè)web應(yīng)用必須有自己的類加載器,而該類加載器位于類加載器樹的根節(jié)點(diǎn)并且可以優(yōu)先加載在web應(yīng)用的目錄WEB-INF/classes以及WEB-INF/lib下所發(fā)現(xiàn)的類。
當(dāng)所請求加載的類是java標(biāo)準(zhǔn)時(shí),該自定義類加載器將只委托其父類加載器來加載;如果一個(gè)web應(yīng)用還需要其他的類,那么這個(gè)自定義類加載器不是去委托其父類去加載,而是首先檢查WEB-INF/classes以及WEB-INF/lib中是否包含該類。只有在這兩個(gè)目錄都找不到時(shí),該類加載器才會委托給其父類加載器來加載,而父類加載器的的加載遵循標(biāo)準(zhǔn)委托模式。(譯注:類加載相關(guān)知識請看文章末尾)。

Tomcat的額外類加載器
Tomcat架構(gòu)(四)
在啟動過程中,Tomcat首先通過清除CLASSPATH并將其重新指向CATALINA_HOME/bin/bootstrap.jar(Tomcat啟動所需的類)、tomcat-juli(日志功能)、tools.jar(jsp編譯功能)來屏蔽系統(tǒng)類加載器(System ClassLoader)。這使得系統(tǒng)類加載器只有在加載一小部分Tomcat特殊類時(shí)才起作用。?
同時(shí)Tomcat也改變了支持目錄并將其重新指向CATALINA_HOME/endorsed目錄。
在其自定類加載器之下,Tomcat又增加了它自己的類加載器,這其中包括server類加載器(Server class loader)、共享類加載器(Shared class loader)、通用類加載器(Common class loader)以及每個(gè)部署的應(yīng)用程序都有的一個(gè)web應(yīng)用程序類裝入器。
當(dāng)一個(gè)web應(yīng)用需要加載一個(gè)類時(shí),請求首先發(fā)送至web應(yīng)用的類加載器,該加載器負(fù)責(zé)加載web應(yīng)用中WEB-INF/classes和WEB-INF/lib兩個(gè)目錄下的類。
web應(yīng)用類加載器首先會請求系統(tǒng)類加載器來允許各層類加載器可以查找所有java核心類。當(dāng)所請求的類未找到到時(shí),該web應(yīng)用類加載器會嘗試從自身類庫中定位所請求的類;如果仍然未找到,它將委托通用類加載器或者如果有共享類加載器時(shí)委托共享類加載器來加載。?
共享類加載器和服務(wù)器類加載器默認(rèn)情況下是沒有安裝的,但是我們可以通過編輯 CATALINA_HOME/conf/catalina.properties文件通過增加shared.loader和server.loader來開啟共享類加載器以及server類加載器;而Common類加載器會監(jiān)控CATALINA_HOME/lib目錄的內(nèi)容,該下為一些蟬蛹的jar包,比如servlet-api.jar, jasper.jar, coyote.jar, and jsp-api.jar。此外,位于共享目錄下的類將對所有web應(yīng)用可見,但不是Tomcat的內(nèi)部類,而放在服務(wù)器的loader目錄的類將只對Tomcat內(nèi)部類可見。
10web應(yīng)用中的類重載
使Tomcat支持類重載的web應(yīng)用特定類加載器。
當(dāng)context需要被新部署或者當(dāng)一個(gè)類需要被重載時(shí)(例如當(dāng)一個(gè)被重新編譯過的類文件加入到WEB-INF/classes目錄時(shí)),整個(gè)web應(yīng)用的類加載器都會被拋棄,然后創(chuàng)建一個(gè)新的實(shí)例分支來加載該web應(yīng)用的所有類。該新的類加載就是用來為之后的請求服務(wù)的。
11Logger
server.xml中的logger元素在Tomcat5.5中就已經(jīng)被棄用;所以在Tomcat6中是基于Java1.4中所引入的日志API來生成日志的。
然而Java日志只能在整個(gè)JVM級別來進(jìn)行配置,而不能對每個(gè)類加載器單獨(dú)配置。為了使每個(gè)web應(yīng)用程序都能允許不同的配置文件,Tomcat實(shí)現(xiàn)了自定義的Java日志,這就是我們所熟知的JULI,該實(shí)現(xiàn)位于CATALINA_HOME/bin/tomcat-juli.jar中。
全局的配置文件CATALINA_HOME/conf/logging.properties控制著日志設(shè)置。此外,每個(gè)web應(yīng)用也可以有自己的日志配置文件WEB-INF/classes/logging.properties。 Tomcat架構(gòu)(四)
如上圖所示,日志由一下組件組成:?
● Logger:所有的日志請求會進(jìn)入Logger對象。這些對象都按層次排列,其根在根logger;同時(shí)這種層次結(jié)構(gòu)也反映了包結(jié)構(gòu)。在該層次中屬性可以被綁定到任何級別上,而且Logger的子類也會繼承器父類屬性。
● Handler:指定日志消息應(yīng)該發(fā)送何處。可選的有ConsoleHandler(將日志寫入控制臺)、FileHandler(將日志寫入文件)、SocketHandler(將日志寫入Tcp socket)。
● Level(日志級別):日志級別有其中:SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、OFF(禁用)、ALL(記錄所有信息),每種級別決定了需要記錄何種類型的消息。
●Formatter(日志格式化):該元素決定了信息以什么格式展示。Tomcat提供了SimpleFormatter、XMLFormatter兩種格式化工具。
12資源(Resource)
和web應(yīng)用上下文相關(guān)的資源包括靜態(tài)資源,如類文件、HTML、JSP、CSS文件。這些資源可能以不同的格式存在。默認(rèn)情況下,Tomcat支持從war格式的壓縮文件(譯注:war包)或者解壓過的war中查找資源文件。
可想而知,一個(gè)上下文中的資源也可能從替代存儲機(jī)制中訪問,比如JDBC數(shù)據(jù)庫。而資源組件使之成為可能。
Tomcat同時(shí)也提供基于目錄服務(wù)的JNDI API,該服務(wù)可支持從未知存儲方式中讀取資源。
總結(jié)
這里講了很多,現(xiàn)在我們需要做的就是使自己理解Tomcat架構(gòu)總覽中所講解的東西。在這篇文章里,我們討論了一些Tomcat的核心組件,看到了一個(gè)運(yùn)行中的Tomcat實(shí)例是如何由各種頂級組件、連接器(Connector)以及嵌套組件構(gòu)建起來的。

Tomcat架構(gòu)(四)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久成人永久免费播放 | 99久久99热久久 | 欧美高清性粉嫩交 | 日产精品一区二区 | 综合久久影院 | 国产毛片一区二区 | 亚洲欧美日韩国产专区一区 | 久久成人毛片 | 九九视频这里只有精品 | 成人欧美 | 一级爱爱 | 九九视频国产 | 亚欧中文字幕 | 天天综合色天天综合网 | 亚洲欧美日韩综合在线 | sihu永久在线播放地址 | 国产1区二区 | 亚洲欧洲精品国产区 | 欧美国产日韩久久久 | 99久久精品国产一区二区 | 97国产精品 | 国产精品久久久久久久久夜色 | 久久香蕉国产线看观看99 | 色片网站在线观看 | 日日噜噜夜夜狠狠久久丁香 | 狠狠操操 | 中文字幕天天躁夜夜狠狠综合 | 日韩麻豆 | 草视频在线观看 | 中文字幕在线观看一区二区三区 | 黄色片免费在线观看视频 | 伊人精品综合 | 一级毛片a女人刺激视频免费 | 天天夜夜人人 | 老子不卡 | 日本aⅴ永久免费网站www | 国产福利小视频在线观看 | 97看片吧 | 伊人快播| 好吊妞人成免费视频观看 | 免费观看欧美精品成人毛片能看的 |