我在我的App Engine项目的war/WEB-INF文件夹中有一个文件。我在FAQ中读到可以在servlet上下文中从那里读取文件。但我不知道如何形成资源的路径:
/war/WEB-INF/test/foo.txt
我该如何构建路径以便与File()函数一起使用,就像上面显示的那样?
谢谢
我在我的App Engine项目的war/WEB-INF文件夹中有一个文件。我在FAQ中读到可以在servlet上下文中从那里读取文件。但我不知道如何形成资源的路径:
/war/WEB-INF/test/foo.txt
我该如何构建路径以便与File()函数一起使用,就像上面显示的那样?
谢谢
有几种方法可以实现这个。只要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文件才能使用。现在使用Java EE 7,你可以更容易地找到资源。
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
getServletContext()
方法从哪里来? - AdamHurwitz我知道现在有些晚了,但这是我通常的做法:
这段话与IT技术无关。ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream stream = classLoader.getResourceAsStream("../test/foo.txt");
context.getResourceAsStream()
变体。 - Berin Loritschjavax.servlet
包的一部分。您可以从servlet类(即扩展了java.servlet.GenericServlet
的类)获得对它的引用。顺便说一下,GenericServlet现在有一个方法getServletContext()
可以使用。http://docs.oracle.com/javaee/6/api/javax/servlet/GenericServlet.html#getServletContext() - Berin Loritsch