2

我正在使用 OSGI 的 HttpService 来注册我的 servlet 和资源。要注册资源,我正在使用 HttpService.registerResources(java.lang.String alias, java.lang.String name, HttpContext context)

我已经测试过“名称”可以采用包内的任何相对路径。示例 /resource 其中 resource 是 bundle jar 中的一个文件夹。但我想在捆绑示例 /home/user/webapps/resource 之外给“名称”一个值。即名称链接到文件系统的路径。我想知道这是否可能以及如何?

我看到一个类似的帖子,但它没有结束。 如何获取 OSGi 包之外的图像?

4

2 回答 2

2

从包外部获取对象的一种简单方法是实现一个 servlet,正如 Robert 所描述的那样。

如果您可以更好地控制要返回的对象、正确的 MIME 类型处理等,那么更好的方法是实现 HttpContext 对象并将其注册到 HTTP 服务。然后,每当请求资源时,HTTP 服务总是调用方法HttpContext.getResource(String name) 。在这里,您可以从文件系统中提供您的对象。从规范:

公共 URL 获取资源(字符串名称)

由 Http 服务调用以将资源名称映射到 URL。对于servlet注册,Http Service会调用这个方法来支持ServletContext方法getResource和getResourceAsStream。对于资源注册,Http Service 会调用该方法来定位命名资源。上下文可以控制资源的来源。例如,资源可以通过 bundleContext.getDataFile(name).toURL() 映射到包的持久存储区域中的文件,或者通过 getClass().getResource(name) 映射到上下文包中的资源。

请查看 OSGi 服务纲要的第102.3 节,注册资源和以下内容。在那里,对整个概念进行了详细的解释并附有示例。

于 2011-03-13T01:27:10.380 回答
0

我不熟悉 HttpService.registerResources(..) 的深层内部结构,但我的解决方案是实现一个Servlet提供资源的解决方案。由于它是您自己的实现,因此您也可以访问文件系统。实现时唯一需要记住的Servlet是设置正确的Content-Type并且可能是其他必需的响应头字段

于 2011-03-08T14:32:05.040 回答