繁体   English   中英

ExternalContext#getResourceAsStream()返回null,将资源文件放置在哪里?

[英]ExternalContext#getResourceAsStream() returns null, where to place the resource file?

我正在尝试在托管bean中获取PNG文件作为InputStream ,如下所示:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/myFile.png");
// input is null.

但是, InputStream始终为null。 这是怎么引起的,我该如何解决?

显然您将资源放置在错误的位置。

ExternalContext#getResourceAsStream()在Servlet容器的情况下将其委托给ServletContext#getResoruceAsStream() ,其根位于WAR的Web内容中( /WEB-INF/META-INF文件夹的父文件夹,因此,其中的文件也可以通过这种方式获得),以及/WEB-INF/lib中所有JAR的/META-INF/resources文件夹。 对于JSF Web应用程序,通常是XHTML,CSS,JavaScript和图像文件。

换句话说,它返回Web资源。 它不会返回磁盘文件系统资源,因为您需要new FileInputStream() 它还不会返回类路径资源,因为您需要ClassLoader#getResourceAsStream() 类路径的根源于/WEB-INF/classes ,所有JAR位于/WEB-INF/lib ,并且某些VM / server配置的文件夹取决于运行时环境。

在通常的Web内容文件结构中,必须将资源文件准确放置在此处,以便以所需的方式获取它:

WebContent
 |-- META-INF
 |-- WEB-INF
 |    |-- faces-config.xml
 |    `-- web.xml
 |-- myFile.png    <-- Here.
 :

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM