Как загрузить ресурс из каталога 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
В свойстве проекта Source-tab добавьте исходную папку, указав на родительский контейнер для папки WEB-INF (в моем случае WebContent)
Теперь давайте используем загрузчик классов:
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 и т. Д., Я в конце концов изменил права доступа к файлам, прежде чем пришел к тому, что считаю правильным решением, но я думаю, что это было просто плохое сообщение (т.е. разрешение отклонено, вместо файла не найден).
Надеюсь, это кому-нибудь поможет.