Ответ 1
Никогда использовать относительные пути локальной файловой системы на диске в веб-приложении Java EE, например new File("filename.xml")
. Подробное объяснение см. Также getResourceAsStream() vs FileInputStream.
Никогда используйте getRealPath()
с целью получения места для записи файлов. Подробное объяснение см. Также Что означает servletcontext.getRealPath( "/" ) и когда следует использовать его.
Никогда не записывайте файлы в папку развертывания. Подробное объяснение см. Также Рекомендуемый способ сохранения загруженных файлов в приложении сервлета.
Всегда записывайте их во внешнюю папку по предопределенному абсолютному пути.
-
Либо жестко закодировано:
File folder = new File("/absolute/path/to/web/files"); File result = new File(folder, "filename.xml"); // ...
-
Или настроено в одним из многих способов:
File folder = new File(System.getProperty("xml.location")); File result = new File(folder, "filename.xml"); // ...
-
Или используя управляемую контейнером временную папку:
File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR); File result = new File(folder, "filename.xml"); // ...
-
Или используя временную папку, поддерживаемую OS:
File result = File.createTempFile("filename-", ".xml"); // ...
Альтернативой является использование (встроенной) базы данных.
См. также:
- Рекомендуемый способ сохранения загруженных файлов в приложении сервлета
- Где разместить и как читать файлы ресурсов конфигурации в сервлет-приложении?
- Простые способы хранения данных о перераспределении веб-приложения Java EE 7
- Храните PDF в течение ограниченного времени на сервере приложений и сделайте его доступным для загрузки
- Что означает servletcontext.getRealPath( "/" ) и когда я должен использовать его
- getResourceAsStream() vs FileInputStream