校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法

Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法

熱門標簽:在百度地圖標注車輛 藍點外呼系統(tǒng) 威海人工外呼系統(tǒng)供應商 烏海智能電話機器人 寧夏房產(chǎn)智能外呼系統(tǒng)要多少錢 400電話申請方案 貴陽教育行業(yè)電話外呼系統(tǒng) 撫順移動400電話申請 做外呼系統(tǒng)的公司違法嗎

Tomcat通過自定義類加載器WebAppClassLoader打破雙親委派,即重寫了JVM的類加載器ClassLoader的findClass方法和loadClass方法,以優(yōu)先加載Web應用目錄下的類。

Tomcat負責加載我們的Servlet類、加載Servlet所依賴的JAR包。Tomcat本身也是個Java程序,因此它需要加載自己的類和依賴的JAR包。

若在Tomcat運行兩個Web應用程序,它們有功能不同的同名Servlet,Tomcat需同時加載和管理這兩個同名的Servlet類,保證它們不會沖突。所以Web應用之間的類需要隔離

若兩個Web應用都依賴同一三方jar,比如Spring,則Spring jar被加載到內存后,Tomcat要保證這兩個Web應用能共享之,即Spring jar只被加載一次,否則隨著三方jar增多,JVM的內存會占用過大。
所以,和 JVM 一樣,需要隔離Tomcat本身的類和Web應用的類。

Tomcat類加載器的層次結構

Tomcat的類加載器層次結構

前三個是加載器實例名,不是類名。

WebAppClassLoader

若使用JVM默認的AppClassLoader加載Web應用,AppClassLoader只能加載一個Servlet類,在加載第二個同名Servlet類時,AppClassLoader會返回第一個Servlet類的Class實例。
因為在AppClassLoader眼里,同名Servlet類只能被加載一次。

于是,Tomcat自定義了一個類加載器WebAppClassLoader, 并為每個Web應用創(chuàng)建一個WebAppClassLoader實例。

每個Web應用自己的Java類和依賴的JAR包,分別放在WEB-INF/classesWEB-INF/lib目錄下,都是WebAppClassLoader加載的。

Context容器組件對應一個Web應用,因此,每個Context容器創(chuàng)建和維護一個WebAppClassLoader加載器實例。
不同加載器實例加載的類被認為是不同的類,即使類名相同。這就相當于在JVM內部創(chuàng)建相互隔離的Java類空間,每個Web應用都有自己的類空間,Web應用之間通過各自的類加載器互相隔離。

SharedClassLoader

兩個Web應用之間怎么共享庫類,并且不能重復加載相同的類?

雙親委派機制的各子加載器都能通過父加載器去加載類,于是考慮把需共享的類放到父加載器的加載路徑。

應用程序即是通過該方式共享JRE核心類。
Tomcat搞了個類加載器SharedClassLoader,作為WebAppClassLoader的父加載器,以加載Web應用之間共享的類。

若WebAppClassLoader未加載到某類,就委托父加載器SharedClassLoader去加載該類,SharedClassLoader會在指定目錄下加載共享類,之后返回給WebAppClassLoader,即可解決共享問題。

CatalinaClassLoader

如何隔離Tomcat本身的類和Web應用的類?

兄弟關系:兩個類加載器是平行的,它們可能擁有同一父加載器,但兩個兄弟類加載器加載的類是隔離的。

于是,Tomcat搞了CatalinaClassLoader,專門加載Tomcat自身的類。

問題是,當Tomcat和各Web應用之間需要共享一些類時該怎么辦?

CommonClassLoader

共享依舊靠父子關系。
再增加個CommonClassLoader,作為CatalinaClassLoader和SharedClassLoader的父加載器。

CommonClassLoader能加載的類都可被CatalinaClassLoader、SharedClassLoader 使用,而CatalinaClassLoader和SharedClassLoader能加載的類則與對方相互隔離。WebAppClassLoader可以使用SharedClassLoader加載到的類,但各個WebAppClassLoader實例之間相互隔離。

Spring的加載問題

JVM默認情況下,若一個類由類加載器A加載,則該類的依賴類也由相同的類加載器加載。
比如Spring作為一個Bean工廠,它需要創(chuàng)建業(yè)務類的實例,并且在創(chuàng)建業(yè)務類實例之前需要加載這些類。Spring是通過調用Class.forName來加載業(yè)務類的,我們來看一下forName的源碼:

public static Class<?> forName(String className) {
    Class<?> caller = Reflection.getCallerClass();
    return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}

會使用調用者,即Spring的加載器去加載業(yè)務類。

Web應用之間共享的jar可交給SharedClassLoader加載,以避免重復加載。Spring作為共享的三方jar,本身由SharedClassLoader加載,Spring又要去加載業(yè)務類,按照前面那條規(guī)則,加載Spring的類加載器也會用來加載業(yè)務類,但是業(yè)務類在Web應用目錄下,不在SharedClassLoader的加載路徑下,這該怎么辦呢?

線程上下文加載器

于是有了線程上下文加載器,一種類加載器傳遞機制。因為該類加載器保存在線程私有數(shù)據(jù)里,只要是同一個線程,一旦設置了線程上下文加載器,在線程后續(xù)執(zhí)行過程中就能把這個類加載器取出來用。因此Tomcat為每個Web應用創(chuàng)建一個WebAppClassLoader類加載器,并在啟動Web應用的線程里設置線程上下文加載器,這樣Spring在啟動時就將線程上下文加載器取出來,用來加載Bean。Spring取線程上下文加載的代碼如下:

cl = Thread.currentThread().getContextClassLoader();

在StandardContext的啟動方法,會將當前線程的上下文加載器設置為WebAppClassLoader。

啟動方法結束時,會恢復線程的上下文加載器:

Thread.currentThread().setContextClassLoader(originalClassLoader);

這是為什么呢?

線程上下文加載器其實是線程的一個私有數(shù)據(jù),跟線程綁定,這個線程完成啟動Context組件后,會被回收到線程池,之后被用來做其他事情,為了不影響其他事情,需恢復之前的線程上下文加載器。
優(yōu)先加載web應用的類,當加載完了再改回原來的。

線程上下文的加載器就是指定子類加載器來加載具體的某個橋接類,比如JDBC的Driver的加載。

總結

Tomcat的Context組件為每個Web應用創(chuàng)建一個WebAppClassLoader類加載器,由于不同類加載器實例加載的類是互相隔離的,因此達到了隔離Web應用的目的,同時通過CommonClassLoader等父加載器來共享第三方JAR包。而共享的第三方JAR包怎么加載特定Web應用的類呢?可以通過設置線程上下文加載器來解決。

多個應用共享的Java類文件和JAR包,分別放在Web容器指定的共享目錄:

CommonClassLoader
對應 <Tomcat>/common/*

CatalinaClassLoader
對應 <Tomcat >/server/*

SharedClassLoader
對應 <Tomcat >/shared/*

WebAppClassloader
對應 <Tomcat >/webapps/<app>/WEB-INF/*

可以在Tomcat conf目錄下的Catalina.properties文件里配置各種類加載器的加載路徑。

當出現(xiàn)ClassNotFound錯誤時,應該檢查你的類加載器是否正確。
線程上下文加載器不僅僅可以用在Tomcat和Spring類加載的場景里,核心框架類需要加載具體實現(xiàn)類時都可以用到它,比如我們熟悉的JDBC就是通過上下文類加載器來加載不同的數(shù)據(jù)庫驅動的。

到此這篇關于Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法的文章就介紹到這了,更多相關Tomcat 隔離Web應用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:朝陽 蕪湖 慶陽 松原 銅川 那曲 周口 泰州

巨人網(wǎng)絡通訊聲明:本文標題《Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法》,本文關鍵詞  Tomcat,打破,雙親,委派,機制,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法》相關的同類信息!
  • 本頁收集關于Tomcat打破雙親委派機制實現(xiàn)隔離Web應用的方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产一区 二区| 欧美色男人天堂| 久久99国产精品尤物| 日韩1区2区日韩1区2区| 亚洲成人午夜电影| 亚洲激情图片小说视频| 亚洲另类色综合网站| 亚洲综合成人在线视频| 午夜国产精品一区| 久久精品99国产国产精| 久久国产精品72免费观看| 激情另类小说区图片区视频区| 久草这里只有精品视频| 粉嫩高潮美女一区二区三区 | 欧美性生交片4| 欧美三级蜜桃2在线观看| 欧美精品国产精品| 欧美大黄免费观看| 日韩欧美亚洲国产精品字幕久久久| 日韩欧美综合一区| 国产精品日日摸夜夜摸av| 国产欧美一区二区在线观看| 国产精品福利一区二区三区| 有坂深雪av一区二区精品| 亚洲第一成年网| 精品制服美女丁香| 91小视频免费看| 337p亚洲精品色噜噜| 久久蜜桃av一区精品变态类天堂 | 国产精品久久久久影院老司 | 国产成人精品免费网站| 欧美性xxxxxxxx| 欧美videossexotv100| 国产精品国产三级国产有无不卡| 亚洲人成人一区二区在线观看| 一区二区久久久久久| 韩国毛片一区二区三区| 91精品办公室少妇高潮对白| 欧美大片在线观看一区二区| 亚洲人成网站色在线观看| 国产一区亚洲一区| 欧美日韩欧美一区二区| 国产精品久久久久影院| 天天操天天干天天综合网| 男女激情视频一区| 在线欧美一区二区| 国产精品美女久久久久久久 | 亚洲一区二区精品3399| 国产激情视频一区二区在线观看| 久久精品理论片| 国产一区欧美二区| 欧美成人三级电影在线| 国产精品动漫网站| 麻豆成人免费电影| 欧美日韩在线直播| 综合久久一区二区三区| 国产精品888| 日韩精品中文字幕在线一区| 一区二区三区影院| 91网站在线观看视频| 国产欧美一区二区三区在线老狼| 日本网站在线观看一区二区三区| 在线一区二区三区四区五区 | 欧美精品欧美精品系列| 亚洲男同性恋视频| 97久久久精品综合88久久| 欧美国产日本韩| 国产高清在线观看免费不卡| xnxx国产精品| 激情六月婷婷久久| 久久精品亚洲乱码伦伦中文| 国模无码大尺度一区二区三区| 6080日韩午夜伦伦午夜伦| 午夜在线成人av| 欧美日韩国产大片| 天堂成人免费av电影一区| 欧美天堂一区二区三区| 婷婷综合另类小说色区| 欧美老肥妇做.爰bbww| 五月婷婷久久丁香| 欧美酷刑日本凌虐凌虐| 日韩av网站在线观看| 欧美mv和日韩mv的网站| 狠狠色综合日日| 久久一日本道色综合| 国产成人欧美日韩在线电影| 中文无字幕一区二区三区| 成人黄色777网| 一区二区三区av电影| 欧美日本乱大交xxxxx| 久久精品国产亚洲一区二区三区| 欧美精品一区二区不卡| 成人a区在线观看| 亚洲欧美一区二区三区孕妇| 欧美亚州韩日在线看免费版国语版| 亚洲成a人片在线不卡一二三区| 欧美午夜免费电影| 久久精品国产色蜜蜜麻豆| 国产日韩欧美一区二区三区乱码| 99久久免费精品| 日韩精品午夜视频| 久久久精品国产免大香伊| 91看片淫黄大片一级在线观看| 亚洲一区二区在线播放相泽| 欧美电影在哪看比较好| 国产91精品精华液一区二区三区| 自拍偷自拍亚洲精品播放| 欧美日韩国产欧美日美国产精品| 欧美a一区二区| 亚洲欧洲一区二区三区| 欧美日韩一区二区三区在线 | 欧洲人成人精品| 久久99深爱久久99精品| 国产欧美精品在线观看| 欧美日韩在线精品一区二区三区激情| 日韩精品成人一区二区三区| 久久精品人人做人人综合| 欧美亚洲综合网| 国产在线不卡一卡二卡三卡四卡| √…a在线天堂一区| 欧美精品色一区二区三区| 成人黄色小视频在线观看| 亚洲制服欧美中文字幕中文字幕| 欧美一卡在线观看| 色av成人天堂桃色av| 青草av.久久免费一区| 中文字幕在线不卡国产视频| 欧美一级片免费看| 91在线观看地址| 国产精品一线二线三线精华| 午夜精品久久久| 中文字幕不卡三区| 香蕉影视欧美成人| 精品粉嫩aⅴ一区二区三区四区 | 911精品国产一区二区在线| 国产综合色视频| 日本欧美在线观看| 亚洲一区二区三区四区在线免费观看| 久久一日本道色综合| 欧美不卡视频一区| 欧美美女一区二区| 欧美日韩国产区一| 欧美日韩一卡二卡三卡| 色综合中文综合网| 欧美韩国一区二区| 日韩一区二区免费高清| 欧美日韩一区中文字幕| 欧美三级视频在线播放| 欧美性猛交xxxx黑人交| 99久久久精品免费观看国产蜜| 国产成人综合亚洲网站| 国产精品资源网| 国产成人a级片| 国产精品一级片在线观看| 国产一区二区三区黄视频| 韩国av一区二区| 国产一区二区在线视频| 国产精品18久久久久久久久| 国产成人一区在线| www.在线成人| 91国产免费观看| 欧美视频一区二区在线观看| 欧美在线不卡视频| 在线成人高清不卡| 日韩欧美自拍偷拍| 国产调教视频一区| 国产精品毛片无遮挡高清| 亚洲色图视频网站| 91精品国产一区二区三区| 91性感美女视频| 91捆绑美女网站| 欧美日韩国产美女| 日韩欧美另类在线| 538prom精品视频线放| 欧美电影免费观看高清完整版| 欧美成人一区二区三区片免费| 亚洲视频一二三区| 亚洲欧美一区二区在线观看| 亚洲精品菠萝久久久久久久| 无码av免费一区二区三区试看| 国内精品国产成人国产三级粉色 | 亚洲视频在线一区二区| 亚洲高清免费观看高清完整版在线观看| 午夜不卡av在线| 成人免费看黄yyy456| 欧美日韩视频专区在线播放| 日韩欧美国产系列| 亚洲婷婷在线视频| 日韩成人精品在线观看| 国产精品一区二区三区99| 波多野结衣视频一区| 91亚洲精品一区二区乱码| 制服丝袜日韩国产| 国产精品免费视频观看| 18欧美亚洲精品| 美女脱光内衣内裤视频久久网站| 99视频在线观看一区三区| 欧美一区二区三区视频在线观看 | 色成年激情久久综合| 欧美v国产在线一区二区三区|