簡體   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