¿Ruta del archivo al recurso en nuestra carpeta war / WEB-INF?
95
Tengo un archivo en mi carpeta war / WEB-INF de mi proyecto de motor de aplicaciones. Leí en las preguntas frecuentes que puede leer un archivo desde allí en un contexto de servlet. Sin embargo, no sé cómo formar la ruta al recurso:
/war/WEB-INF/test/foo.txt
¿Cómo construiría mi ruta a ese recurso para usar con File (), tal como se ve arriba?
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:
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 getResourcemétodos de ServletContext .
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 contextcampo. En un servlet lo obtienes de tu, ServletConfigque 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.
Vale la pena señalar que necesitaba poner una inicial / en la ruta para que esto funcione, así: context.getResourceAsStream ("/ WEB-INF / test / foo.txt");
Mick Sear
1
No funciona tan simple en appengine, como está etiquetada la pregunta.
Renascienza
2
Se marcó como la respuesta correcta hace 6 años. Google cambió la API del motor de la aplicación o hay un error en su implementación. Si está ejecutando un Servlet estándar, debería poder utilizar la context.getResourceAsStream()variación.
Berin Loritsch
2
esto parece bueno, pero estoy usando java 1.8 y getContext () no existe de forma predeterminada, ¿qué archivo jar se necesita para usarlo?
f1wade
3
ServletContext es parte del javax.servletpaquete de sus bibliotecas J2EE. Obtiene una referencia a él de la clase de servlet (es decir, lo que se extiende java.servlet.GenericServlet). Por cierto, GenericServlet ahora tiene un método para getServletContext()docs.oracle.com/javaee/6/api/javax/servlet/…
Berin Loritsch
3
Ahora con Java EE 7 puede encontrar el recurso más fácilmente con
context.getResourceAsStream()
variación.javax.servlet
paquete de sus bibliotecas J2EE. Obtiene una referencia a él de la clase de servlet (es decir, lo que se extiendejava.servlet.GenericServlet
). Por cierto, GenericServlet ahora tiene un método paragetServletContext()
docs.oracle.com/javaee/6/api/javax/servlet/…Ahora con Java EE 7 puede encontrar el recurso más fácilmente con
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
fuente
getServletContext()
viene el?Sé que es tarde, pero así es como lo hago normalmente,
fuente