2014-09-11 83 views
1

我想獲得一個PNG文件作爲InputStream在下面我管理的Bean:ExternalContext#getResourceAsStream()返回null,放置資源文件的位置?

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

然而,InputStream始終爲空。這是如何造成的,我該如何解決這個問題?

+1

可以幫助您http://stackoverflow.com/questions/3160691/how-to-read-properties-file-in-web-application – 2014-09-11 10:16:08

回答

3

顯然你把資源放在了錯誤的位置。

ExternalContext#getResourceAsStream(),其在蓋子之下servlet容器到ServletContext#getResoruceAsStream()的情況下的代表,有其WAR的web內容根(的/WEB-INF/META-INF文件夾的父文件夾中,從而將文件在其中也可這樣) ,以及/WEB-INF/lib中所有JAR的/META-INF/resources文件夾。對於JSF Web應用程序,通常是XHTML,CSS,JavaScript和圖像文件。

換句話說,它返回網絡資源。它不會返回磁盤文件系統資源,因爲您需要使用new FileInputStream()。它也不會返回類路徑資源,因爲您需要使用ClassLoader#getResourceAsStream()。 classpath的根在a.o. /WEB-INF/classes/WEB-INF/lib中的所有JAR以及一些VM /服務器配置的文件夾,具體取決於運行時環境。

在一個通常的web內容的文件結構,資源文件必須被精確地放置在這裏,以獲得它的所希望的方式:

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