2012-12-22 42 views
5

我有一堆文本,XML和其他文件(即資源),我需要訪問使用Java Web應用程序中的servlet。例如,有一個xml文件,其中的一部分通過用戶查詢返回一個servlet。我正在使用Tomcat。存儲這些文件並從Java代碼訪問它們的最佳做法是什麼? 1)什麼是默認文件夾,我應該把它們放在哪裏,我需要把它們放到Web檔案中還是放入其中一個Jars中? 2)如何從java代碼訪問文件?我怎樣才能設置他們的路徑,以便它可以在任何環境下工作? P.S.我已經閱讀了許多與此主題相關的帖子,其中大多數建議將資源存儲在jar中,並使用java.lang.Class.getResourceAsStream(String)來訪問它們。這似乎很奇怪,因爲類和數據應該分開。在java web應用程序中存儲和訪問資源文件的最佳實踐

回答

7

使用類加載器加載靜態資源是完全正確的。這就是ResourceBundle用來加載國際化屬性文件的例子。

將它們放入WEB-INF/classes以及您的類文件或WEB-INF/lib中的一個jar中,然後使用ClassLoader加載它們,如您已閱讀的答案所示。

這並不禁止您將這些文件放置在與項目中的Java源文件不同的目錄中。構建過程應該確保將它們放在適合運行時的位置。 Maven和Gradle約定是將源文件放在src/main/java之下,資源文件放在src/main/resources之下。

+0

1)如果我已經在WEB-INF/resources文件夾中有資源,該怎麼辦?它們被HTML頁面中的JavaScript使用。該頁面是WEB-INF/index.html,腳本引用使用相對路徑的資源。 2)我應該在哪裏存儲資源文件夾的路徑?在web.xml或其他靜態資源中是否有位置? – Alexander

+1

WEB-INF中的資源無法從外部訪問,因此無法從瀏覽器加載WEB-INF中的JS文件。您可以使用ServletContext.getResourceAsStream()從webapp(包括WEB-INF)中的任何位置加載資源,但強制加載類訪問ServletContext。我不明白你的第二個問題。這是一個靜態資源。你爲什麼不在某些常量中硬編碼路徑? –

+0

需要一個servlet實例來getContext,然後獲取資源或文件夾路徑。有沒有辦法做到這一點靜態沒有實例化任何東西?我的第二個問題與我應該存儲這種常量的地方有關。在一些與web相關的資源(如web.xml)中是否有位置(而不是在類源代碼中有一個常量)? – Alexander

相關問題