Можно ли узнать путь развертывания из приложения JSF?
Не напрямую, вам нужно получить ServletContext
из ExternalContext
следующим образом:
ServletContext servletContext = (ServletContext) externalContext.getContext();
Он, в свою очередь, предлагает известный и сомнительный getRealPath()
метод.
String webContentRoot = servletContext.getRealPath("/");
Если вы уже используете JSF 2.0, вы можете использовать ExternalContext#getRealPath()
.
Еще один вопрос (если ответ на первыйвопрос верный): законно ли хранить там какие-то загруженные файлы?
Вы можете сделать это.Вам нужно только принять во внимание, что все они теряются при повторном развертывании приложения, по той простой причине, что эти файлы не содержатся в исходной WAR.
Если вы хотите иметь немного большепостоянное хранилище, рассмотрите возможность хранения его по фиксированному пути вне веб-приложения, например /var/webapp/upload
или около того.Альтернативой является их хранение в базе данных, это увеличило бы переносимость, но не забудьте сохранить некоторые метаданные (имя, тип контента, последнюю измененную метку времени и т. Д.) Вместе с содержимым файла, чтобы у вас было что индексировать / искать / кэшироватьна.