webapp servlet context app java google-app-engine web-applications

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");

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

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");

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 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.