2014-09-11 3 views
1

Я пытаюсь получить PNG-файл как InputStream в моем управляемом компоненте, как показано ниже: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 –

ответ

3

Видимо, вы поместили ресурс в физически неправильном месте.

ExternalContext#getResourceAsStream(), который делегирует в случае сервлет под одеялом до ServletContext#getResoruceAsStream(), имеет свои корни в веб-содержимого WAR (родительскую папку /WEB-INF и /META-INF папки, таким образом, файлы в них также доступны таким образом) , и папку /META-INF/resources всех JAR в /WEB-INF/lib. В случае веб-приложения JSF это, как правило, XHTML, CSS, JavaScript и файлы изображений.

Другими словами, он возвращает веб-ресурсы. Он не возвращает ресурс файловой системы диска, для этого вам нужно вместо new FileInputStream(). Он также не возвращает ресурс classpath, для этого вам нужно вместо ClassLoader#getResourceAsStream(). Путь classpath имеет свой корень в a.o. /WEB-INF/classes, все JAR-файлы в /WEB-INF/lib и некоторые папки, настроенные на VM/сервер, в зависимости от среды выполнения.

В обычной файловой структуре веб-контента, файл ресурсов должен быть размещен именно здесь, чтобы получить его желаемый путь:

WebContent 
|-- META-INF 
|-- WEB-INF 
| |-- faces-config.xml 
| `-- web.xml 
|-- myFile.png <-- Here. 
: 
Смежные вопросы