java - servlet - ¿Ruta del archivo al recurso en nuestra carpeta war/WEB-INF?
java web app context (2)
Ahora con Java EE 7 puede encontrar el recurso más fácilmente con
InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
Tengo un archivo en mi carpeta war / WEB-INF del proyecto de mi motor de aplicación. Leí en las Preguntas frecuentes que puedes leer un archivo desde allí en un contexto de servlet. Sin embargo, no sé cómo formar el camino 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?
Gracias
Hay un par de formas de hacer esto. Siempre que el archivo WAR se expanda (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");
Eso le proporcionará la ruta completa del sistema al recurso que está buscando. Sin embargo, eso no funcionará si el contenedor de servlets nunca expande el archivo WAR (como Tomcat). Lo que funcionará es usar los métodos getResource
de ServletContext.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
o alternativamente, si solo quiere la secuencia de entrada:
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
El último enfoque funcionará independientemente del Contenedor de Servlets que use 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 el campo de context
. En un servlet lo obtiene de su ServletConfig
que pasa al método init()
del servlet. Si lo almacena en ese momento, puede obtener su ServletContext en cualquier momento que desee después de eso.