Вопрос-ответ

How to load a resource from WEB-INF directory of a web archive

Как загрузить ресурс из каталога WEB-INF веб-архива

У меня есть веб-архив с файлом, размещенным в каталоге WEB-INF.

Как мне загрузить этот файл в класс Java?

Я знаю, что могу поместить его в каталог classes и загрузить оттуда. Это было бы просто поместить его в WEB-INF.

Переведено автоматически
Ответ 1

Используйте метод getResourceAsStream() для объекта ServletContext, например

servletContext.getResourceAsStream("/WEB-INF/myfile");

То, как вы получаете ссылку на ServletContext, зависит от вашего приложения... вы хотите сделать это из сервлета или из JSP?

ОТРЕДАКТИРОВАНО: Если вы находитесь внутри объекта сервлета, то вызовите getServletContext(). Если вы используете JSP, используйте предопределенную переменную application.

Ответ 2

Вот как это работает у меня без использования сервлета.

Допустим, я пытаюсь получить доступ web.xml в project/WebContent/WEB-INF/web.xml


  1. На вкладке "Источник свойств проекта" добавьте исходную папку, указав родительский контейнер для папки WEB-INF (в моем случае WebContent )


  2. Теперь давайте воспользуемся загрузчиком классов:


    InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")

Ответ 3

Проблема, с которой я столкнулся при доступе к файлу базы данных sqlite, который я создал на своем сервере java (джерси), была связана исключительно с path. В некоторых документах говорится, что URL-адрес jdbc connect должен выглядеть как "jdbc: sqlite: //путь к файлу /sample.db". Я думал, что двойная косая черта является частью пути в стиле протокола htt и будет правильно отображаться при развертывании, но на самом деле это абсолютный или относительный путь. Итак, когда я поместил файл в корень папки WebContent (tomcat project), сработал uri, подобный этому "jdbc: sqlite:sample.db".

Единственное, что меня смутило, это то, что когда я запускал отладчик, я получил сообщение, в котором говорилось "открытие базы данных: ... отказано в разрешении". Я думал, что это вопрос разрешений файловой системы или, возможно, разрешений пользователя sql. Обнаружив, что в SQLite нет концепции ролей / разрешений, таких как MySQL, и т.д., Я в конечном итоге изменил права доступа к файлам, прежде чем пришел к тому, что, по моему мнению, было правильным решением, но я думаю, что это было просто неверное сообщение (т. Е. В разрешении отказано, а файл не найден).

Надеюсь, это кому-нибудь поможет.

java