爲什麼Servlet specification定義了兩種不同的方式(上下文參數和環境條目)來爲Web應用程序提供配置參數?Servlet-spec:<context-param> vs <env-entry> in web.xml?
這些方法各自的優點是什麼(什麼時候應該哪個是首選)?
爲什麼Servlet specification定義了兩種不同的方式(上下文參數和環境條目)來爲Web應用程序提供配置參數?Servlet-spec:<context-param> vs <env-entry> in web.xml?
這些方法各自的優點是什麼(什麼時候應該哪個是首選)?
環境條目可通過JNDI獲得,當您直接在手中沒有ServletContext
時可能會有用,例如EJBs。 web.xml
中的那個實際上是覆蓋環境條件的優先鏈中的最後一個。它們通常在服務器自己的配置中定義。因此,如果打算從Web應用覆蓋服務器指定的環境條目,那麼可以通過web.xml
完成。
上下文參數實際上是特定於webapp本身的。他們只有當你手上有ServletContext
時纔可用,通常只在filters,servlets(並且本質上也是JSPs通過${initParam.someName}
在EL)和listeners內。它們應該用於爲在Web應用程序中運行的篩選器,servlet和/或偵聽器提供配置參數。通過JNDI提供它們是沒有多大意義的,這對於簡單目的來說是一個過於複雜的過程。
我還是很困惑。假設我想存儲我的數據庫連接細節,例如?我應該從這2箇中使用什麼?我打算在同一個Tomcat上多次安裝我的應用程序。 – Wouter
@Wouter環境條目的範圍更廣,適用於在該Tomcat上運行的所有Web應用程序。 「上下文」是一個Web應用程序,映射到單個[WAR文件](https://en.wikipedia.org/wiki/WAR_%28Sun_file_format%29)。因此,如果您的數據庫只提供一個Web應用程序,請在上下文級別執行此操作。一種方法是在Web應用程序的「META-INF」文件夾的'context.xml'文件中編寫一個' ...'標記。至於你提到「在同一個Tomcat上多次安裝我的應用程序」,我不明白,沒有道理。 –
@BalusC你的第一段不太清楚。如果你的意思是說環境條目的範圍比上下文參數的範圍更廣泛,那麼比說得更明確些。也許引用[Tomcat文檔](https://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.html#Environment_Entries):「對所有Web應用程序都可見」 –