gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:59:30 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

换句话说,它返回网络资源。它不返回磁盘文件系统资源,为此您需要 new FileInputStream()反而。它也不返回类路径资源,因为你需要 ClassLoader#getResourceAsStream()反而。类路径的根在 a.o 中。 /WEB-INF/classes/WEB-INF/lib 中的所有 JAR,以及一些 VM/服务器配置的文件夹,具体取决于运行时环境。

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

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

关于jsf - ExternalContext#getResourceAsStream() 返回null,资源文件放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com