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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我的应用程序引擎项目的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");

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");

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

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。

扫码关注云+社区

领取腾讯云代金券