Есть несколько способов сделать это.Пока файл WAR расширен (набор файлов вместо одного .war-файла), вы можете использовать этот API:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)
Это даст вамполный системный путь к ресурсу, который вы ищете.Однако это не сработает, если контейнер сервлетов никогда не развернет файл WAR (например, Tomcat).То, что будет работать, - это использование getResource
методов ServletContext.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
или, в качестве альтернативы, если вы просто хотите получить поток ввода:Последний подход будет работать независимо от того, какой Servlet-контейнер вы используете и где установлено приложение.Первый подход будет работать только в том случае, если перед развертыванием файл WAR будет разархивирован.
РЕДАКТИРОВАТЬ: Очевидно, что метод getContext () вам придется реализовать.Страницы JSP делают его доступным как поле context
.В сервлете вы получаете его из вашего ServletConfig
, который передается в метод сервлета init()
.Если вы сохраните его в это время, вы можете получить свой ServletContext в любое время после этого.