servlet規範3.0:爲什麼Jersey 2.22在Jersey包中包含「javax.servlet-api-3.0.1」?
Web應用程序類裝載器 類,一個容器使用在WAR加載servlet必須允許 顯影劑裝入以下 正常包含在WAR內庫JAR任何資源加載器使用getResource的Java SE語義。如Java EE許可證 協議中所述,不屬於Java EE產品的servlet容器不應允許 應用程序覆蓋Java SE平臺類(例如,java。*和 中的javax。*名稱空間), Java SE不允許修改。容器 不應該允許應用程序覆蓋或訪問容器的實現 類
所以鑑於這種情況,我不明白爲什麼澤西2.22具有包括在新澤西的javax.servlet-API-3.0.1罐子2.22捆綁。有什麼合理的解釋,爲什麼它在那裏?默認情況下,我相信Glassfish,Tomcat等容器在lib目錄中有自己的servlet-api.jar。
奇怪的是,他們會添加一個「提供」的罐子。當我們使用Maven時,它肯定不會被拉入。我的猜測是,這是因爲Jersey支持注入Servlet組件,'HttpServletRequest/Response','ServletContext'。這只是一個猜測。但即使將jar包含到你的項目中,你也應該確保它不會進入最終的戰爭。你應該總是使用提供的服務器。 –
這就是我認爲......很奇怪。 – mpmp