Java war/WEB-INF文件夹中资源的文件路径?
我的应用程序引擎项目的war/WEB-INF文件夹中有一个文件。我在常见问题解答中读到,您可以在servlet上下文中从那里读取文件。但我不知道如何形成到资源的路径:Java war/WEB-INF文件夹中资源的文件路径?,java,google-app-engine,web-applications,Java,Google App Engine,Web Applications,我的应用程序引擎项目的war/WEB-INF文件夹中有一个文件。我在常见问题解答中读到,您可以在servlet上下文中从那里读取文件。但我不知道如何形成到资源的路径: /war/WEB-INF/test/foo.txt 我将如何构造指向该资源的路径,以便与File()一起使用,正如上面所示 谢谢有几种方法可以做到这一点。只要扩展了WAR文件(一组文件而不是一个.WAR文件),就可以使用以下API: ServletContext context = getContext(); String fu
/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中,您可以从ServletConfig
获得它,它被传递到servlet的init()
方法中。如果您当时存储它,您可以在此后的任何时间获取您的ServletContext。现在使用Java EE 7,您可以更轻松地使用
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
我知道这很晚了,但我通常是这样做的
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream stream = classLoader.getResourceAsStream("../test/foo.txt");
值得指出的是,我需要在路径中添加一个初始/以使其工作,如:context.getResourceAsStream(“/WEB-INF/test/foo.txt”);在appengine上没有问题标记的那么简单。它在6年前被标记为正确答案。谷歌更改了应用程序引擎API,或者您的部署中存在错误。如果您运行的是标准的Servlet,您应该能够使用
context.getResourceAsStream()
变体。这似乎不错,但我使用的是java 1.8,默认情况下getContext()不存在,需要哪个jar文件来使用它?ServletContext是J2EE库的javax.Servlet
包的一部分。您可以从servlet类(即扩展java.servlet.GenericServlet
)中获得对它的引用。顺便说一句,GenericServlet现在有了一个方法来getServletContext()
这个getServletContext()
从何而来?您可以从JavaServlet3.1开始找到它。