Как временно сохранить сгенерированный файл в веб-приложении на основе сервлета

Я пытаюсь создать файл XML и сохранить его в /WEB-INF/pages/.

Ниже мой код, который использует относительный путь:

File folder = new File("src/main/webapp/WEB-INF/pages/");
StreamResult result = new StreamResult(new File(folder, fileName));

Он отлично работает при работе в качестве приложения на моей локальной машине (C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml).

Но при развертывании и запуске на серверной машине это исключает следующее:

javax.xml.transform.TransformerException: java.io.FileNotFoundException C:\project\eclipse-jee-luna-R-win32-x86_64\eclipse\src\main\webapp\WEB INF\pages\myFile.xml

Я также пробовал getServletContext().getRealPath(), но возвращал null на моем сервере. Может кто-нибудь помочь?

Ответы

Ответ 1

Никогда использовать относительные пути локальной файловой системы на диске в веб-приложении Java EE, например new File("filename.xml"). Подробное объяснение см. Также getResourceAsStream() vs FileInputStream.

Никогда используйте getRealPath() с целью получения места для записи файлов. Подробное объяснение см. Также Что означает servletcontext.getRealPath( "/" ) и когда следует использовать его.

Никогда не записывайте файлы в папку развертывания. Подробное объяснение см. Также Рекомендуемый способ сохранения загруженных файлов в приложении сервлета.

Всегда записывайте их во внешнюю папку по предопределенному абсолютному пути.

Альтернативой является использование (встроенной) базы данных.

См. также:

Ответ 2

просто используйте

Файл relpath = новый файл ( ".\pages \" );

поскольку курсор приложения по умолчанию остается в папке web-inf.