Ответ 1
По-видимому, вы поместили ресурс физически неправильно.
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.
: