Есть несколько способов сделать это. Пока файл 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");
или, альтернативно, если вам просто нужен входной поток:
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getResource(java.lang.String)
Последний подход будет работать независимо от того, какой контейнер сервлетов вы используете и где установлено приложение. Первый подход будет работать только в том случае, если файл WAR разархивирован перед развертыванием.
РЕДАКТИРОВАТЬ:
метод getContext (), очевидно, нужно реализовать. Страницы JSP делают его доступным как context
поле. В сервлете вы получаете его от вашего, ServletConfig
который передается в метод сервлета init()
. Если вы сохраните его в это время, вы можете получить свой ServletContext в любое время после этого.