3 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個贊
我不建議將jar文件放在共享文件夾中。例如,假設(shè)您將來需要部署第三方應(yīng)用程序,該應(yīng)用程序在WEB-INF文件夾中具有jar文件的較新版本。對于此應(yīng)用程序,jar的類將被加載兩次(即使它們具有相同的名稱),一個從共享文件夾中加載,一個從Web應(yīng)用程序文件夾中加載。這種情況可能會導(dǎo)致很難發(fā)現(xiàn)錯誤。
如果jar文件位于Web應(yīng)用程序文件夾中,則它們由單獨(dú)的類加載器加載,并且不會互相干擾。

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個贊
根據(jù)經(jīng)驗(yàn):這兩個Web應(yīng)用程序完全相互隔離-一個應(yīng)用程序的庫未在另一個應(yīng)用程序中使用-因此可以回答您的第一個問題-是的,它們將被加載兩次。
為了回答第二個問題,是否應(yīng)該將這些庫部署到Tomcat的共享目錄中-我會拒絕,這是為什么:
如果將庫Jar部署到共享位置(tomcat / server / lib),則該庫版本將成為在該Tomcat實(shí)例下運(yùn)行的所有Web應(yīng)用程序的默認(rèn)庫。從tomcat架構(gòu)的概述中可以看到,類加載器的工作是“順著鏈條進(jìn)行的”,其中單個Web應(yīng)用程序的lib文件夾是它在拋出未找到類的異常之前將查找的最后一個位置。在Tomcat 6和Tomcat 7中并非如此:Web應(yīng)用程序lib和classes文件夾中的任何類都將在共同使用之前被解析,因此,這不會破壞在戰(zhàn)爭2中部署所有jar的其他應(yīng)用程序。
因此,將共享庫部署到該目錄的問題是,它破壞了彼此隔離的單個應(yīng)用程序的體系結(jié)構(gòu)。在最初的示例中很好,但是如果您要部署第三方應(yīng)用程序(例如,如果您正在運(yùn)行使用Portlet來處理特定內(nèi)容的應(yīng)用程序),則會立即遇到版本依賴性問題-庫的共享版本可能會對于第三方應(yīng)用程序來說不是正確的,但是由于該軟件包已經(jīng)加載,因此您將在左右中間拋出異常。
添加回答
舉報(bào)