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, но фактически нигде не определенной. Предполагается, что это путь к ресурсу в вашем веб-приложении, а разделитель в этом случае всегда равен "/" независимо от платформы.