Można to zrobić na kilka sposobów. Dopóki plik WAR jest rozszerzony (zestaw plików zamiast jednego pliku .war), możesz użyć tego 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)
Dzięki temu uzyskasz pełną ścieżkę systemową do poszukiwanego zasobu. Jednak to nie zadziała, jeśli kontener serwletów nigdy nie rozwinie pliku WAR (jak Tomcat). To, co zadziała, to użycie getResourcemetod ServletContext .
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
lub alternatywnie, jeśli chcesz tylko strumień wejściowy:
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)
To drugie podejście będzie działać niezależnie od używanego kontenera serwletów i miejsca zainstalowania aplikacji. To pierwsze podejście zadziała tylko wtedy, gdy plik WAR zostanie rozpakowany przed wdrożeniem.
EDYCJA:
Metoda getContext () jest oczywiście czymś, co trzeba by zaimplementować. Strony JSP udostępniają je jako contextpole. W serwlecie otrzymujesz go ze swojego, ServletConfigktóry jest przekazywany do metody serwletu init(). Jeśli zapiszesz go w tym czasie, możesz uzyskać swój ServletContext w dowolnym momencie po tym.