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

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

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

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

3 ответа

Решение

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

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

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

Отредактировано: если вы находитесь внутри объекта Servlet, то вызовите getServletContext(), Если вы находитесь в JSP, используйте предопределенную переменную application,

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

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

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

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

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

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

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

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

Другие вопросы по тегам