我知道一個servlet容器(如Apache Tomcat)運行在JVM的單個實例中,這意味着它的所有servlet都將在同一個進程中運行。Servlet容器是否阻止Web應用程序引起彼此干擾,以及它們如何執行?
我也知道servlet容器的體系結構意味着每個web應用程序都存在於它自己的上下文中,這表明它與其他web應用程序是隔離的。
如這裏所描繪的:
接受每一個web應用程序是孤立的,我希望你可以創建一個相同的Web應用程序的2份,改變各的名稱和上下文路徑(以及任何其他相關配置),並行運行它們,而不會影響另一個。 this question的答案似乎支持這種觀點。
但是,一位同事根據他們嘗試這種做法的經驗不同意。
他們採用了一個web應用程序,並試圖在同一個servlet容器中運行兩個單獨的實例(使用不同的名稱等),並遇到兩個實例衝突的問題(我無法詳細說明,因爲我沒有參與那工作)。
基於此,他們認爲,由於Web應用程序在相同的進程空間中運行,因此它們不能被隔離,並且諸如類屬性之類的事情最終會被無意中共享。 This answer似乎表明同樣的事情
的兩種觀點似乎並不兼容,所以我問你: 做servlet容器防止相互衝突部署到同一容器中的Web應用程序?
If yes,他們是怎麼做到的?
如果否,干擾爲什麼會發生?
最後,在什麼情況下可以分離Web應用程序衝突並導致彼此干擾?,可能涉及文件系統,本地代碼或數據庫連接上的資源的情況?
靜態變量是每個類加載器 – 2010-12-22 21:09:46
對於共享資源列表+1,關於來自Pangea的靜態變量的說明與我特別相關 – chrisbunney 2010-12-22 22:15:41