3 回答

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

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