我们的war / WEB-INF文件夹中资源的文件路径?

时间:2010-12-02 22:28:40

标签: java google-app-engine web-applications

我的应用引擎项目的war / WEB-INF文件夹中有一个文件。我在FAQ中读到你可以从servlet上下文中读取文件。我不知道如何形成资源的路径:

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

我如何构建我的资源路径以与File()一起使用,就像上面看到的那样?

由于

3 个答案:

答案 0 :(得分:132)

有几种方法可以做到这一点。只要扩展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。

答案 1 :(得分:2)

现在使用Java EE 7,您可以使用

更轻松地找到资源
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");

https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--

答案 2 :(得分:0)

我知道这很晚了,但这是我通常的做法,

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();           
InputStream stream = classLoader.getResourceAsStream("../test/foo.txt");