来自捆绑包(文件系统)外部的osgi HttpService注册资源
我正在使用OSGI的HttpService注册我的servlet和资源。 要注册资源,我正在使用HttpService.registerResources(java.lang.String别名、java.lang.String名称、HttpContext上下文) 我已经测试过“name”可以在bundle中采用任何相对路径。示例/resource,其中resource是bundle jar中的一个文件夹。 但是我想在bundle example/home/user/webapps/resource之外给“name”一个值。 i、 e.文件系统路径的名称链接。 我想知道这是否可能以及如何实现 我看到了一篇类似的帖子,但没有得出结论。来自捆绑包(文件系统)外部的osgi HttpService注册资源,osgi,httpservice,Osgi,Httpservice,我正在使用OSGI的HttpService注册我的servlet和资源。 要注册资源,我正在使用HttpService.registerResources(java.lang.String别名、java.lang.String名称、HttpContext上下文) 我已经测试过“name”可以在bundle中采用任何相对路径。示例/resource,其中resource是bundle jar中的一个文件夹。 但是我想在bundle example/home/user/webapps/resourc
我不熟悉HttpService.registerResources(..)的深层内部结构,但我的解决方案是实现一个提供资源的
Servlet
。因为它是您自己的实现,所以您也可以访问文件系统。
实现该
Servlet
时,您必须记住的唯一一件事是设置正确的内容类型,并且可能是其他必需的响应。从捆绑包外部获取对象的简单方法是实现Robert描述的Servlet
如果您能够更好地控制要返回的对象、正确的MIME类型处理等,那么更好的方法是实现HttpContext对象并将其注册到HTTP服务。然后,每当请求资源时,HTTP服务总是调用方法HttpContext.getResource(字符串名称)。在这里,您可以从文件系统为您的对象提供服务。根据规范:
公共URL获取资源(字符串名称)
由Http服务调用以映射
将资源名称添加到URL。对于servlet
注册时,将使用Http服务
调用此方法以支持
ServletContext方法getResource和
获取资源流。资源
注册时,将使用Http服务
调用此方法以查找指定的
资源。上下文可以从
资源来自哪里。例如
资源可以映射到中的文件
捆绑包的持久存储区域
通过
bundleContext.getDataFile(名称).toURL()
或上下文中的资源
捆绑通过
getClass().getResource(名称)
请看一下OSGi服务概要的第102.3节,注册资源和以下内容。在这里,详细解释了整个概念,并举例说明