Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自捆绑包(文件系统)外部的osgi HttpService注册资源_Osgi_Httpservice - Fatal编程技术网

来自捆绑包(文件系统)外部的osgi HttpService注册资源

来自捆绑包(文件系统)外部的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

我正在使用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.文件系统路径的名称链接。 我想知道这是否可能以及如何实现

我看到了一篇类似的帖子,但没有得出结论。
我不熟悉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节,注册资源和以下内容。在这里,详细解释了整个概念,并举例说明