Путь к ресурсу в нашей папке war/WEB-INF?

У меня есть файл в моей папке war/WEB-INF моего проекта App engine. Я прочитал в часто задаваемых вопросах, что вы можете прочитать файл оттуда в контексте сервлета. Я не знаю, как сформировать путь к ресурсу:

/war/WEB-INF/test/foo.txt

Как бы я построил свой путь к этому ресурсу для использования с File (), как это выглядит выше?

спасибо

2 ответов


есть несколько способов сделать это. Пока файл WAR расширен (набор файлов вместо одного .war file), вы можете использовать этот 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)

что будет вам полный системный путь к ресурсу, который вы ищете. Однако это не сработает, если контейнер сервлетов никогда не расширит файл WAR (например, Tomcat). Что будет работать, это использование ServletContext getResource методы.

ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");

или в качестве альтернативы, если вы просто хотите входной поток:

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)

последний подход будет работать независимо от того, какой контейнер сервлетов вы используете и где установлено приложение. Первый подход будет работать только в том случае, если файл WAR распакован перед развертыванием.

EDIT: Метод getContext (), очевидно, вам придется реализовать. Страницы JSP делают его доступным как


теперь с Java EE 7 Вы можете найти ресурс более легко с

InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");

https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--