guice/Manual/Integration/WebandServlets/ServletRegexKeyMapping

正規表現

正規表現を使って、サーブレット(あるいはフィルター)をURLにマップすることもできる。

    serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)

これを使うと"ajax"というテキストを含むいかなるURIもMyAjaxServletにマップできる、次のような

初期化パラメータ

web.xml上で<init-param>タグを使うことにより、サーブレット(とフィルタ)に文字列値を渡すことができる。 GuiceサーブレットはこれをMap<String, String>という名前/値ペアでサポートしている。 例えば、MyServletを二つのパラメータcoffee="Espresso"とsite="google.com"で初期化するならこう書く。

  Map<String, String> params = new HashMap<String, String>();
  params.put("coffee", "Espresso");
  params.put("site", "google.com");

  ...
      serve("/*").with(MyServlet.class, params)

MyServletに渡されるServletConfigオブジェクトは適切な入力パラメータが含まれ、getInitParams()で取得することができる。同様のシンタックスがフィルタにもある。

バインディングキー

クラスではなく、キーをバインドすることもできる。 これによりパッケージローカルな可視性の実装を隠し、Guiceモジュールとアノテーションによってだけ使えるように公開することができる。

      filter("/*").through(Key.get(Filter.class, Fave.class));

Filter.classとは、サーブレットAPIであるjavax.servlet.Filterであり、Fave.classとはカスタムバインディングアノテーションである。他のどこかで(あなた自身のモジュールの一つの中で)このフィルタを実装にバインドすることができる。

   bind(Filter.class).annotatedWith(Fave.class).to(MyFilterImpl.class);

バインディングアノテーションについてはユーザガイドを参照のこと

インジェクタの注入

ServletModuleを使うことにより、インジェクトされたサーブレットあるいはフィルタを取得したら、 あなた自身のクラスに直接それを注入することにより、いつでもインジェクタにアクセスできる。

@Singleton
public class MyServlet extends HttpServlet {
  @Inject private Injector injector;
  ...
}

// elsewhere in ServletModule
serve("/myurl").with(MyServlet.class);

これは、インジェクタそれ自体を使う必要のあるサードパーティ製フレームワークに統合するのに便利である。

last edited 2009-12-15 03:50:50 by ysugimura