我在我的應用程序引擎項目的war/WEB-INF文件夾中有一個文件。我在FAQ中讀到,你可以從servlet上下文中讀取文件。我不知道如何形成的路徑資源,但:我們的war/WEB-INF文件夾中的資源文件路徑?
/war/WEB-INF/test/foo.txt
我將如何構建我的路徑,資源與文件()來使用,只是因爲它看起來上面?
謝謝
我在我的應用程序引擎項目的war/WEB-INF文件夾中有一個文件。我在FAQ中讀到,你可以從servlet上下文中讀取文件。我不知道如何形成的路徑資源,但:我們的war/WEB-INF文件夾中的資源文件路徑?
/war/WEB-INF/test/foo.txt
我將如何構建我的路徑,資源與文件()來使用,只是因爲它看起來上面?
謝謝
有幾種方法可以做到這一點。只要WAR文件擴展(一組文件,而不是一個.war文件中),你可以使用這個API:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
,將讓你完整的系統路徑資源你正在尋找。但是,如果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");
後一種方法將工作無論Servlet容器使用什麼和安裝應用程序的位置。前一種方法只有在WAR文件在部署之前解壓縮纔有效。
編輯: getContext()方法顯然是你必須實現的東西。 JSP頁面使其成爲context
字段。在一個servlet中,你從你的ServletConfig
中得到它,它被傳遞給servlet的init()
方法。如果你在那個時候存儲它,你可以隨時在你想要的時候獲得你的ServletContext。
現在你可以用
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
值得指出的是,我需要把初始/路徑來得到這個工作,比如更容易地找到資源this:context.getResourceAsStream(「/ WEB-INF/test/foo.txt」); – 2011-06-16 15:06:38