Caminho do arquivo para o recurso em nossa pasta war / WEB-INF?
95
Eu tenho um arquivo na minha pasta war / WEB-INF do meu projeto do App Engine. Eu li nas FAQs que você pode ler um arquivo de lá em um contexto de servlet. Não sei como formar o caminho para o recurso:
/war/WEB-INF/test/foo.txt
Como eu construiria meu caminho para esse recurso para usar com File (), exatamente como parece acima?
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:
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 getResourcemétodos do ServletContext .
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 contextcampo. Em um servlet, você o obtém de seu, ServletConfigque é passado para o init()método do servlet . Se você armazená-lo nesse momento, poderá obter seu ServletContext a qualquer momento depois disso.
Vale ressaltar que precisei colocar uma inicial / no caminho para fazer isso funcionar, assim: context.getResourceAsStream ("/ WEB-INF / test / foo.txt");
Mick Sear de
1
Não funciona tão simples no appengine, como a pergunta está marcada.
Renascienza
2
Ela foi marcada como a resposta correta há 6 anos. O Google mudou a API do motor de aplicativo ou há um bug em sua implantação. Se você estiver executando um Servlet padrão, deverá ser capaz de usar a context.getResourceAsStream()variação.
Berin Loritsch
2
isso parece bom, mas estou usando java 1.8 e getContext () não existe por padrão, qual arquivo jar é necessário para usá-lo?
f1wade de
3
ServletContext faz parte do javax.servletpacote de suas bibliotecas J2EE. Você obtém uma referência a ele da classe de servlet (ou seja, o que estende java.servlet.GenericServlet). BTW, GenericServlet agora tem um método para getServletContext()docs.oracle.com/javaee/6/api/javax/servlet/…
Berin Loritsch
3
Agora com Java EE 7 você pode encontrar o recurso mais facilmente com
context.getResourceAsStream()
variação.javax.servlet
pacote de suas bibliotecas J2EE. Você obtém uma referência a ele da classe de servlet (ou seja, o que estendejava.servlet.GenericServlet
). BTW, GenericServlet agora tem um método paragetServletContext()
docs.oracle.com/javaee/6/api/javax/servlet/…Agora com Java EE 7 você pode encontrar o recurso mais facilmente com
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
fonte
getServletContext()
vem isso?Eu sei que está tarde, mas é como eu normalmente faço,
fonte