osgi HttpService регистрирует ресурс извне пакета (файловой системы) - PullRequest
2 голосов
/ 08 марта 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

Простой способ извлечения объектов извне комплекта состоит в реализации сервлета, как это описал Роберт.

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

публичный URL getResource (String name)

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

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

0 голосов
/ 08 марта 2011

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

...