У меня есть веб-архив с файлом, размещенным в каталоге WEB-INF.
Как загрузить этот файл в классе java?
Я знаю, что могу поместить его в каталог классов и загрузить его оттуда. Это будет просто помещено в WEB-INF.
У меня есть веб-архив с файлом, размещенным в каталоге WEB-INF.
Как загрузить этот файл в классе java?
Я знаю, что могу поместить его в каталог классов и загрузить его оттуда. Это будет просто помещено в WEB-INF.
Используйте метод getResourceAsStream()
для объекта ServletContext, например
servletContext.getResourceAsStream("/WEB-INF/myfile");
Как вы получаете ссылку на ServletContext, зависит от вашего приложения... вы хотите сделать это из сервлета или из JSP?
EDITED: если вы находитесь внутри объекта 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". Я думал, что двойная косая черта была частью пути стиля протокола htt и правильно отображалась при развертывании, но на самом деле это абсолютный или относительный путь. Итак, когда я разместил файл в корне папки WebContent (проект tomcat), такой uri работал "jdbc: sqlite: sample.db".
Единственное, что меня бросало, это то, что когда я переходил через отладчик, я получил сообщение, в котором говорилось: "Открытие db:... permission denied". Я думал, что это вопрос разрешений файловой системы или, возможно, sql-прав пользователя. Узнав, что у SQLite нет концепции ролей/разрешений, таких как MySQL и т.д., Я в конечном итоге изменил права доступа к файлам, прежде чем я пришел к тому, что, по моему мнению, было правильным решением, но я думаю, что это было просто плохое сообщение (т.е. разрешено, вместо файла не найдено).
Надеюсь, это поможет кому-то.