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

Я пытаюсь создать файл 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 на моем сервере. Может кто-нибудь помочь?

2 ответа

Решение

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

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

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

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

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

Смотрите также:

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

File relpath = new File(".\ Pages\");

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

Другие вопросы по тегам