Hay un par de formas de hacer esto. Siempre que el archivo WAR esté expandido (un conjunto de archivos en lugar de un archivo .war), puede usar esta 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)
Eso le dará la ruta completa del sistema al recurso que está buscando. Sin embargo, eso no funcionará si el Servlet Container nunca expande el archivo WAR (como Tomcat). Lo que funcionará es usar los getResource
métodos de ServletContext .
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
o alternativamente si solo desea el flujo de entrada:
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)
El último enfoque funcionará independientemente del contenedor de servlet que utilice y dónde esté instalada la aplicación. El primer enfoque solo funcionará si el archivo WAR se descomprime antes de la implementación.
EDITAR:
El método getContext () es obviamente algo que tendrías que implementar. Las páginas JSP lo hacen disponible como context
campo. En un servlet lo obtienes de tu, ServletConfig
que se pasa al init()
método del servlet . Si lo almacena en ese momento, puede obtener su ServletContext en cualquier momento que desee después de eso.