Є кілька способів зробити це. Поки файл 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)
Останній підхід працюватиме незалежно від того, який контейнер Servlet ви використовуєте та де встановлено додаток. Колишній підхід працюватиме лише в тому випадку, якщо файл WAR перед розгортанням розпакується.
EDIT:
Метод getContext (), очевидно, щось, що вам доведеться реалізувати. Сторінки JSP роблять це доступним як context
поле. У сервлеті ви отримуєте його від свого, ServletConfig
який передається init()
методу сервлета . Якщо ви зберігаєте його в той час, ви можете отримати свій ServletContext в будь-який час після цього.