Ответ 1
Есть несколько способов сделать это. Пока файл WAR расширяется (набор файлов вместо одного .war файла), вы можете использовать этот API:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
Это даст вам полный системный путь к ресурсу, который вы ищете. Однако это не будет работать, если контейнер Servlet никогда не расширит WAR файл (например, Tomcat). Что будет работать с использованием методов ServletContext getResource
.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
или, альтернативно, если вы просто хотите входной поток:
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
Последний подход будет работать независимо от того, какой сервлет-контейнер вы используете и где приложение установлено. Первый подход будет работать, только если файл WAR распакуется перед развертыванием.
EDIT:
Метод getContext(), очевидно, должен быть реализован. Страницы JSP делают его доступным как поле context
. В сервлете вы получите его из вашего ServletConfig
, который передается в метод сервлета init()
. Если вы сохраните его в это время, вы можете получить свой ServletContext в любое время после этого.