2

OSGIのHttpServiceを使用してサーブレットとリソースを登録しています。リソースを登録するには、HttpService.registerResources(java.lang.Stringエイリアス、java.lang.String名、HttpContextコンテキスト)を使用しています

「名前」がバンドル内の任意の相対パスをとることができることをテストしました。例/resourceここで、resourceはバンドルjar内のフォルダーです。しかし、バンドルの例/ home / user / webapps/resourceの外で「name」に値を付けたいと思います。つまり、名前はファイルシステムのパスにリンクします。それが可能かどうか、そしてどのように知りたいですか?

私は同様の投稿を見ましたが、結論は出ませんでした。 OSGiバンドルの外にある画像を取得する方法は?

4

2 に答える 2

2

バンドルの外からオブジェクトをフェッチする簡単な方法は、Robert が説明したようにサーブレットを実装することです。

より良い方法は、返すオブジェクトをより適切に制御できる場合、MIME タイプの処理などを正しく行うには、HttpContext オブジェクトを実装し、それを HTTP サービスに登録することです。次に、リソースが要求されるたびに、HTTP サービスは常にメソッドHttpContext.getResource(String name)を呼び出します。ここで、ファイル システムからオブジェクトを提供できます。仕様から:

公開 URL getResource( 文字列名 )

リソース名を URL にマップするために Http サービスによって呼び出されます。サーブレット登録の場合、Http サービスはこのメソッドを呼び出して、ServletContext メソッドの getResource および getResourceAsStream をサポートします。リソース登録の場合、Http サービスはこのメソッドを呼び出して、名前付きリソースを見つけます。コンテキストは、リソースがどこから来るかを制御できます。たとえば、リソースは bundleContext.getDataFile(name).toURL() を介してバンドルの永続ストレージ領域内のファイルにマッピングしたり、getClass().getResource(name) を介してコンテキストのバンドル内のリソースにマッピングしたりできます。

セクション102.3 のリソースの登録と OSGi Service Compendium のフォローをご覧ください。そこでは、概念全体が詳細に例を挙げて説明されています。

于 2011-03-13T01:27:10.380 に答える
0

I am not familiar with the deep internals of HttpService.registerResources(..) but my work-around solution would be to implement a Servlet that delivers the resources. As it is your own implementation you can access the filesystem as well. The only thing you have to keep in mind when implementing that Servlet is to set the correct Content-Type and may be other required response header fields.

于 2011-03-08T14:32:05.040 に答える