2012-05-21 95 views
2

將文件放在Tomcat Servlet應用程序中的位置,以便它們對頁面相對可見?Servlet/Tomcat相對文件路徑

更多細節: 我同時使用外部庫開發的servlet頁。該庫大量依賴外部加載的XML文件(相對文件路徑)。所以我需要將這些XML文件放在servlet的運行目錄的中。

Tomcat服務器中有沒有辦法可以訪問文件相對

+1

您可以使用'System.getProperty(「user.dir」)'獲取當前工作目錄。打印它,你知道在哪裏把你的文件... –

+0

從那裏,你可以訪問整個文件結構。好的評論莫里茨。 – Ewald

+0

是的,我已經完成了simillar的想法,我已經寫入該目錄中的文件,但它原來是一個臨時目錄,tomcat創建... – Betamoo

回答

2

當Web應用程序部署到Tomcat,所述web應用程序的根最終被$ CATALINA_HOME/web應用/ YOUR_WEB_APP/

這樣,如果使用servlet訪問位於內的路徑上的XML文件Web應用程序的根目錄,你可以使用以下命令:

request.getServletContext().getResourceAsStream("PATH/TO/YOUR/XML_FILE.xml") 

這將加載XML文件作爲InputStream。當然,如果要訪問該文件本身,可以始終使用getResource(String resource)方法以獲得URL,從該File對象可以像這樣(替代方法包括)來獲得:

File f; 
try { 
    f = new File(url.toURI()); 
} catch(URISyntaxException e) { 
    f = new File(url.getPath()); 
} 

編輯:爲了使它們相對於Web瀏覽器可見,只需將它們放在./WEB-INF和./META-INF目錄中。

+0

把我無法訪問外部庫的代碼...我只知道它加載相對路徑的文件.. – Betamoo

+0

我想我很困惑。你想做什麼?只需使外部庫可訪問XML文件?如果是這樣,你的相對路徑就是應用程序根目錄。 – Zach

0

如果您正在討論的這個庫將在類路徑中搜索文件(如Hibernate或Log4J會這樣做),則必須將您的XML文件放入WEB-INF中。不過,我建議你不要手動執行此操作。您可以將該文件放在應用程序的源目錄中,這將確保文件部署在正確的位置。

0

這是一個老問題。我正在開發Tomcat 9.我以Tomcat安裝目錄爲基礎取得了很大的成功。 (CATALINA_HOME)例如ROOT中文件的相對路徑是「webapps/ROOT/someDir/fileName」

抱怨重複答案的地方是處理重複的問題。