Путь к файлу к ресурсу в нашей папке war / WEB-INF? - PullRequest
89 голосов
/ 03 декабря 2010

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

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

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

Спасибо

Ответы [ 3 ]

134 голосов
/ 03 декабря 2010

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

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

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

РЕДАКТИРОВАТЬ: Очевидно, что метод getContext () вам придется реализовать.Страницы JSP делают его доступным как поле context.В сервлете вы получаете его из вашего ServletConfig, который передается в метод сервлета init().Если вы сохраните его в это время, вы можете получить свой ServletContext в любое время после этого.

3 голосов
/ 11 июля 2017

Теперь с Java EE 7 вы можете легче найти ресурс с помощью

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

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

0 голосов
/ 09 июля 2019

Я знаю, что уже поздно, но так я обычно делаю,

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();           
InputStream stream = classLoader.getResourceAsStream("../test/foo.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...