在ASP.NET中,有web.config可以保存應用程序範圍的設置。 Java EE Servlet中是否存在相應的文件(位於war或jar歸檔之外)?
這就是web.xml
。您可以將設置定義爲<context-param>
條目。
<context-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</context-param>
它可以通過ServletContext#getInitParameter()
。 ServletContext
反過來在任何地方。
String foo = getServletContext().getInitParameter("foo"); // Contains "bar"
您也可以通過EL訪問它。
#{initParam.foo} <!-- prints "bar" -->
我需要的是一些地方指出一個配置文件,它目前持有這反過來,一起四個屬性,導致了數據的其餘部分和配置存儲在數據庫中。 (服務器,數據庫,用戶名和密碼)這些值需要易於更改,無需重新打包和重新部署整個應用程序,因此是配置文件,但硬編碼應用程序中配置文件的路徑(即使它是一個常數)看起來很不理想。
按強調,我會使用一個properties文件中查找該特定目的,然後將其放置在WAR之外的路徑。您只需將此路徑添加到Java運行時類路徑。然後你就可以得到它的classpath資源:
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
// ...
然而,與特定的唯一宗旨,以服務一個數據庫連接,你確實更好用servletcontainer管理數據源作爲回答Qwerky。你可能需要配置的只是數據源名稱。
這引發了一個問題,你如何將一個命令行參數傳遞給一個servlet?最好以獨立於主機的方式。該servlet類只公開'void doPost(HttpServletRequest請求,HttpServletResponse響應)'。沒有我可以看到的命令行參數,或者我又錯過了什麼? –
這取決於你說的命令行參數。如果它們是每個請求參數,則使用請求參數或屬性。您還可以使用所有servlet在會話之間共享的會話屬性。 @Bozho說,「全局」參數可以從外部文件中獲取。這個文件的路徑可以通過系統屬性發送。 – AlexR
@MichaelKjörling在您的servlet容器上配置它。對於tomcat它是catalina.sh – Bozho