我在我的应用程序引擎项目的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