Il y a plusieurs façons de le faire. Tant que le fichier WAR est étendu (un ensemble de fichiers au lieu d'un seul fichier .war), vous pouvez utiliser cette 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
Vous obtiendrez ainsi le chemin d'accès complet du système à la ressource que vous recherchez. Cependant, cela ne fonctionnera pas si le conteneur de servlets ne développe jamais le fichier WAR (comme Tomcat). Ce qui fonctionnera, c'est l'utilisation de la fonction getResource
méthodes.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
ou alternativement si vous voulez juste le flux d'entrée :
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
Cette dernière approche fonctionnera quels que soient le conteneur de servlets utilisé et l'endroit où l'application est installée. La première approche ne fonctionnera que si le fichier WAR est décompressé avant le déploiement.
EDIT : La méthode getContext() est manifestement quelque chose que vous devez implémenter. Les pages JSP la mettent à disposition sous la forme de la méthode context
champ. Dans une servlet, vous l'obtenez de votre ServletConfig
qui est transmis à la fonction init()
méthode. Si vous le stockez à ce moment-là, vous pourrez récupérer votre ServletContext à tout moment par la suite.