Existem algumas maneiras de fazer isso. Contanto que o arquivo WAR seja expandido (um conjunto de arquivos em vez de um arquivo .war), você pode 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)
Isso fornecerá o caminho completo do sistema para o recurso que você está procurando. No entanto, isso não funcionará se o Servlet Container nunca expandir o arquivo WAR (como o Tomcat). O que funcionará é usar os getResource
métodos do ServletContext .
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
ou, alternativamente, se você quiser apenas o fluxo 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)
A última abordagem funcionará independentemente do Servlet Container usado e de onde o aplicativo está instalado. A abordagem anterior só funcionará se o arquivo WAR for descompactado antes da implementação.
EDIT:
O método getContext () é obviamente algo que você teria que implementar. As páginas JSP o tornam disponível como o context
campo. Em um servlet, você o obtém de seu, ServletConfig
que é passado para o init()
método do servlet . Se você armazená-lo nesse momento, poderá obter seu ServletContext a qualquer momento depois disso.