我们的 war/WEB-INF 文件夹中资源的文件路径?
我在我的应用引擎项目的 war/WEB-INF 文件夹中有一个文件。我在常见问题解答中读到,您可以在servlet上下文中从那里读取文件。我不知道如何形成资源的路径:
/war/WEB-INF/test/foo.txt
我如何构造该资源的路径以与File(一起使用),就像上面看起来的那样?
谢谢
我在我的应用引擎项目的 war/WEB-INF 文件夹中有一个文件。我在常见问题解答中读到,您可以在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 文件时才有效。
编辑:getContext() 方法显然是你必须实现的东西。JSP 页面使其可用作字段。在 servlet 中,你从你的 servlet 中获取它,然后传递到 servlet 的方法中。如果你在那个时候存储它,你可以在那之后的任何时间获得你的ServletContext。context
ServletConfig
init()
现在,有了 Java EE 7,您可以使用它更轻松地找到资源
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--