2011-12-27 7 views
10

私は、JAX-RS Restlet拡張機能で実装された自己ホストJAX-RS RESTサービスを持っています。JAX-RSで静的コンテンツを配信する方法は?

私は静的なコンテンツを提供する必要があり、JAX-RSでそれを行う方法が不思議でした。コンパイル時に物理ディレクトリ構造がわからないことに注意してください。だから、$(ROOT)は静的コンテンツルートディレクトリです

http://bla-bla:8182/static/yaba/daba/doo.png 

ファイル$(ROOT)/yaba/daba/doo.pngが返されることがある、などのURLを与えられました。

純粋なJAX-RSで行うことはできますか?

ありがとうございました。コンパイル時に既知の

EDIT:静的コンテンツのルートフォルダの

  • ファイルシステムのパス
  • HTTP URLが静的コンテンツルートフォルダを参照するよう
を使用

コンパイル時に不明:

  • ルートフォルダの実際の内容 - ファイル数、ファイルタイプ、ディレクトリ構造の数。

答えて

16

ただ見つかりました。

javax.ws.rs.Path注釈javadocsによると、テンプレートパラメータの一致と見なされるものを示す正規表現を指定できます。

したがって、次のコードは動作します:

@Path("static") 
public class StaticContentHandler { 
    ... 
    @GET 
    @Path("{path:.*}") 
    public FileRepresentation Get(@PathParam("path") String path) { 
    ...; 
    } 
} 

GET http://localhost:8182/static/yaba/daba/doo.pngは "ヤバ/ DABA/doo.png" に等しいpathGet方法に達した - 私が探していたものだけ。

誰にでも役立つことを願っています。

BTW、FileRepresentationはRestletに属しているため、本当に純粋なJAX-RS実装では、ここで何か他のものが返されます。

0

対応するリソースを実装することで、純粋なJAX-RSで行うことができます。基本的にはバイト配列を送信するだけで、JAX-RSには既にメディア型のバイト配列プロバイダが含まれています。

Webサーバーの標準実装よりも効率が悪いという問題があります。通常は、静的コンテンツをApache HTTPDやIIS、さらにはTomcatのようなWebサーバーに置くのが最も良い方法です。

+0

私には制限があり、ApacheもIISも利用できない可能性があります。 – mark

+0

私の問題は、データを送信するのではなく、JAX-RS仕様を使用して静的リソースを照合することです。 – mark

+0

コンパイル時に正確にわかっていること、後で設定できるもの、動的であるものを詳しく説明できますか?静的コンテンツとは、通常静的で動的なものではないことを意味します。 – Tarlog

関連する問題