Il y a plusieurs façons de faire cela. Tant que le fichier WAR est développé (un ensemble de fichiers au lieu d'un 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)
Cela vous donnera le chemin complet du système vers la ressource que vous recherchez. Cependant, cela ne fonctionnera pas si le conteneur de servlet n'étend jamais le fichier WAR (comme Tomcat). Ce qui fonctionnera, c'est d'utiliser les getResource
méthodes de ServletContext .
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
ou bien 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 quel que soit le conteneur de servlet que vous utilisez et 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 évidemment quelque chose que vous devriez implémenter. Les pages JSP le rendent disponible en tant que context
champ. Dans un servlet, vous l'obtenez de votre ServletConfig
qui est passé dans la init()
méthode de la servlet . Si vous le stockez à ce moment-là, vous pouvez obtenir votre ServletContext à tout moment après cela.