2010-12-02 83 views
81

我在我的應用程序引擎項目的war/WEB-INF文件夾中有一個文件。我在FAQ中讀到,你可以從servlet上下文中讀取文件。我不知道如何形成的路徑資源,但:我們的war/WEB-INF文件夾中的資源文件路徑?

/war/WEB-INF/test/foo.txt 

我將如何構建我的路徑,資源與文件()來使用,只是因爲它看起來上面?

謝謝

回答

125

有幾種方法可以做到這一點。只要WAR文件擴展(一組文件,而不是一個.war文件中),你可以使用這個API:

ServletContext context = getContext(); 
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt"); 

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

,將讓你完整的系統路徑資源你正在尋找。但是,如果Servlet容器永遠不擴展WAR文件(如Tomcat),那將無法工作。使用ServletContext的getResource方法將會起作用。

ServletContext context = getContext(); 
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt"); 

或相反,如果你只是想輸入流:

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt"); 

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getResource(java.lang.String)

後一種方法將工作無論Servlet容器使用什麼和安裝應用程序的位置。前一種方法只有在WAR文件在部署之前解壓縮纔有效。

編輯: getContext()方法顯然是你必須實現的東西。 JSP頁面使其成爲context字段。在一個servlet中,你從你的ServletConfig中得到它,它被傳遞給servlet的init()方法。如果你在那個時候存儲它,你可以隨時在你想要的時候獲得你的ServletContext。

+3

值得指出的是,我需要把初始/路徑來得到這個工作,比如更容易地找到資源this:context.getResourceAsStream(「/ WEB-INF/test/foo.txt」); – 2011-06-16 15:06:38

相關問題