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

use*_*701 92 java google-app-engine web-applications

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

/war/WEB-INF/test/foo.txt
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ber*_*sch 135

有几种方法可以做到这一点.只要扩展WAR文件(一组文件而不是一个.war文件),就可以使用此API:

ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想要输入流:

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
Run Code Online (Sandbox Code Playgroud)

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

无论您使用什么Servlet容器以及安装应用程序的位置,后一种方法都可以工作.只有在部署之前解压缩WAR文件时,前一种方法才有效.

编辑: getContext()方法显然是你必须实现的东西.JSP页面使其可用作context字段.在servlet中,您可以从servlet中获取它,ServletConfig并将其传递给servlet的init()方法.如果您在那时存储它,您可以在此之后随时获取ServletContext.

  • 值得指出的是,我需要在路径中放置一个初始/来使其工作,如下所示:context.getResourceAsStream("/ WEB-INF/test/foo.txt"); (3认同)
  • ServletContext是J2EE库的`javax.servlet`包的一部分.您可以从servlet类获得对它的引用(即什么扩展了`java.servlet.GenericServlet`).BTW,GenericServlet现在有一个方法来`getServletContext()`http://docs.oracle.com/javaee/6/api/javax/servlet/GenericServlet.html#getServletContext() (3认同)
  • 6年前,它被标记为正确答案。Google更改了App Engine API,或者您的部署中存在错误。如果您正在运行标准Servlet,则应该能够使用`context.getResourceAsStream()`变体。 (2认同)
  • 这看起来不错,但是我使用java 1.8并且默认情况下getContext()不存在,需要哪个jar文件才能使用它? (2认同)

Dan*_*eón 5

现在使用 Java EE 7,您可以更轻松地找到资源

InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
Run Code Online (Sandbox Code Playgroud)

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