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

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

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

我怎么会构build我的path到资源使用File(),就像它看上面?

谢谢

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

这将为您提供正在寻找的资源的完整系统path。 但是,如果Servlet容器永远不会展开WAR文件(如Tomcat),那么这将不起作用。 什么工作是使用ServletContext的getResource方法。

 ServletContext context = getContext(); URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt"); 

或者如果你只是想要inputstream:

 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。

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

 InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json"); 

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