osgi HttpService регистрирует ресурс вне пакета (файловой системы)

Я использую HttpService OSGI для регистрации своих сервлетов и ресурсов. Чтобы зарегистрировать ресурс, я использую HttpService.registerResources (псевдоним java.lang.String, имя java.lang.String, контекст HttpContext)

Я проверил, что «имя» может принимать любой относительный путь внутри пакета. пример /ресурс, где ресурс — это папка внутри jar пакета. Но я хочу присвоить «имени» значение за пределами примера пакета /home/user/webapps/resource. т. е. ссылки на имя на путь к файловой системе. Я хочу знать, возможно ли это и как?

Я видел похожий пост, но он не завершился. как получить изображение, которое находится вне OSGi комплект?


person nattu    schedule 08.03.2011    source источник


Ответы (2)


Простой способ получить объекты из-за пределов пакета — реализовать сервлет, как его описал Роберт.

Лучший способ, если бы у вас был гораздо лучший контроль над тем, какие объекты возвращать, правильная обработка типов MIME и т. Д., - это реализовать объект HttpContext и зарегистрировать его в службе HTTP. Затем служба HTTP всегда вызывает метод HttpContext.getResource(String name) всякий раз, когда запрашивается ресурс. И здесь вы можете обслуживать свои объекты из файловой системы. Из спецификации:

общедоступный URL-адрес getResource(строковое имя)

Вызывается службой HTTP для сопоставления имени ресурса с URL-адресом. Для регистрации сервлетов служба Http будет вызывать этот метод для поддержки методов ServletContext getResource и getResourceAsStream. Для регистрации ресурсов служба Http будет вызывать этот метод, чтобы найти именованный ресурс. Контекст может контролировать, откуда поступают ресурсы. Например, ресурс может быть сопоставлен с файлом в области постоянного хранения пакета с помощью bundleContext.getDataFile(name).toURL() или с ресурсом в пакете контекста с помощью getClass().getResource(name).

Пожалуйста, ознакомьтесь с разделом 102.3, Регистрация ресурсов и последующими документами OSGi Service Compendium. Там вся концепция объясняется подробно и с примерами.

person Andreas Kraft    schedule 13.03.2011

Я не знаком с глубокими внутренними компонентами HttpService.registerResources(..), но моим обходным решением было бы реализовать Servlet, который доставляет ресурсы. Поскольку это ваша собственная реализация, вы также можете получить доступ к файловой системе. Единственное, что вы должны иметь в виду при реализации этого Servlet, это установить правильный Content-Type и может быть другим требуемым ответом поля заголовка.

person Robert    schedule 08.03.2011