getServletContext().getRealPath() в Tomcat 8 возвращает неправильный путь

Я пытаюсь запустить веб-проект Java под Tomcat 8, который традиционно работает под WebSphere. Один сервлет делает следующий вызов:

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl");

config является экземпляром ServletConfig.

Xsl находится внутри проекта и развернут как C:\myproject\build\web\xsl. Когда сервлет пытается ссылаться на файл, расположенный в xslFilePath, я получаю исключение, которое указывает, что Tomcat на самом деле ищет файл xsl в C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.3\bin\null. Очевидно, что это неправильное местоположение, и ничего не найдено.

К сожалению, я не могу изменить код, потому что у меня нет доступа к источнику. Итак, я хотел бы знать, является ли это ожидаемым поведением для Tomcat? Есть ли какая-либо конфигурация Tomcat, которая позволит мне обеспечить путь к каталогу развертывания, а не к каталогу бина Tomcat? Будет ли предпочтительнее выбрать какой-нибудь другой контейнер сервлетов? Любой совет будет принят во внимание.

1 ответ

Используйте getRealPath("/xsl").

Параметр для getRealPath() - это "виртуальный путь", который, к сожалению, является концепцией, используемой в документах Java, но фактически нигде не определенной. Предполагается, что это путь к ресурсу в вашем веб-приложении, а разделитель в этом случае всегда равен "/" независимо от платформы.

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