2011-02-17 84 views
2

在ASP.NET中,有可以保存應用程序範圍設置的web.config。 Java EE Servlet中是否存在相應的文件(位於warjar存檔之外)?在Java(Servlet)中應用範圍設置的位置?

我需要的是指出一個配置文件的位置,該配置文件當前擁有四個屬性,這些屬性反過來一起導致數據庫存儲其餘數據和配置。 (服務器,數據庫,用戶名和密碼)。這些值需要很容易更改,不需要重新打包和重新部署整個應用程序,因此是配置文件,但硬編碼應用程序中配置文件的路徑(即使它是一個常量)看起來很不理想。

任何提示?我嘗試過谷歌,但發現很少有那麼相似 - 而我發現的東西似乎是爲了我的需要而過度設計的。

回答

3

如果這是一個Web應用程序,那麼最好將數據庫連接配置爲服務器上的資源,然後讓應用程序使用JNDI檢索它。你的應用服務器將有如何做到這一點的文檔,這是一個基本的任務。

99%的嚴重的網絡應用程序做到這一點,另1%應該。

1

只需將路徑作爲命令行參數(傳遞給servlet容器啓動腳本),就可以讓應用程序加載任意外部文件。然後將值存儲在ServletContext

+0

這引發了一個問題,你如何將一個命令行參數傳遞給一個servlet?最好以獨立於主機的方式。該servlet類只公開'void doPost(HttpServletRequest請求,HttpServletResponse響應)'。沒有我可以看到的命令行參數,或者我又錯過了什麼? –

+0

這取決於你說的命令行參數。如果它們是每個請求參數,則使用請求參數或屬性。您還可以使用所有servlet在會話之間共享的會話屬性。 @Bozho說,「全局」參數可以從外部文件中獲取。這個文件的路徑可以通過系統屬性發送。 – AlexR

+0

@MichaelKjörling在您的servlet容器上配置它。對於tomcat它是catalina.sh – Bozho

6

在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。你可能需要配置的只是數據源名稱。