亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果Tomcat在兩個Web應用程序中,它們是否兩次將同一庫文件加載到內存中?

如果Tomcat在兩個Web應用程序中,它們是否兩次將同一庫文件加載到內存中?

慕容708150 2019-11-14 09:59:15
我在tomcat/webapps文件夾下有兩個應用程序。tomcat/webapps/App1tomcat/webapps/App2兩個應用程序共享相同的庫。例如存儲在中tomcat/webapps/App1/WEB-INF/lib。兩個庫是否都在內存中加載了兩次?我應該把這些共享庫放進去tomcat/server/lib嗎?
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

我不建議將jar文件放在共享文件夾中。例如,假設您將來需要部署第三方應用程序,該應用程序在WEB-INF文件夾中具有jar文件的較新版本。對于此應用程序,jar的類將被加載兩次(即使它們具有相同的名稱),一個從共享文件夾中加載,一個從Web應用程序文件夾中加載。這種情況可能會導致很難發現錯誤。


如果jar文件位于Web應用程序文件夾中,則它們由單獨的類加載器加載,并且不會互相干擾。


查看完整回答
反對 回復 2019-11-14
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

根據經驗:這兩個Web應用程序完全相互隔離-一個應用程序的庫未在另一個應用程序中使用-因此可以回答您的第一個問題-是的,它們將被加載兩次。


為了回答第二個問題,是否應該將這些庫部署到Tomcat的共享目錄中-我會拒絕,這是為什么:


如果將庫Jar部署到共享位置(tomcat / server / lib),則該庫版本將成為在該Tomcat實例下運行的所有Web應用程序的默認庫。從tomcat架構的概述中可以看到,類加載器的工作是“順著鏈條進行的”,其中單個Web應用程序的lib文件夾是它在拋出未找到類的異常之前將查找的最后一個位置。在Tomcat 6和Tomcat 7中并非如此:Web應用程序lib和classes文件夾中的任何類都將在共同使用之前被解析,因此,這不會破壞在戰爭2中部署所有jar的其他應用程序。


因此,將共享庫部署到該目錄的問題是,它破壞了彼此隔離的單個應用程序的體系結構。在最初的示例中很好,但是如果您要部署第三方應用程序(例如,如果您正在運行使用Portlet來處理特定內容的應用程序),則會立即遇到版本依賴性問題-庫的共享版本可能會對于第三方應用程序來說不是正確的,但是由于該軟件包已經加載,因此您將在左右中間拋出異常。


查看完整回答
反對 回復 2019-11-14
  • 3 回答
  • 0 關注
  • 696 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號