Locked History Actions

Diff for "guice/Manual/Integration/WebandServlets/ServletRegexKeyMapping"

Differences between revisions 2 and 3
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
正規表現を使って、サーブレット(あるいはフィルター)をURLにマップすることもできる。
Line 3: Line 4:
正規表現を使って、サーブレット(あるいはフィルター)をURLにマップすることもできる。
Line 8: Line 8:
 * http://www.google.com/ajax.html
 
* http://www.google.com/ajax.html
Line 10: Line 11:
 * http://www.google.com/it/is-totally-ajaxy   * http://www.google.com/it/is-totally-ajaxy
Line 13: Line 14:
web.xml上で<init-param>タグを使うことにより、サーブレット(とフィルタ)に文字列値を渡すことができる。 GuiceサーブレットはこれをMap<String, String>という名前/値ペアでサポートしている。 例えば、MyServletを二つのパラメータcoffee="Espresso"とsite="google.com"で初期化するならこう書く。
Line 14: Line 16:
web.xml上で<init-param>タグを使うことにより、サーブレット(とフィルタ)に文字列値を渡すことができる。
GuiceサーブレットはこれをMap<String, String>という名前/値ペアでサポートしている。
例えば、MyServletを二つのパラメータcoffee="Espresso"とsite="google.com"で初期化するならこう書く。
Line 28: Line 27:
クラスではなく、キーをバインドすることもできる。 これによりパッケージローカルな可視性の実装を隠し、Guiceモジュールとアノテーションによってだけ使えるように公開することができる。
Line 29: Line 29:
クラスではなく、キーをバインドすることもできる。
これによりパッケージローカルな可視性の実装を隠し、Guiceモジュールとアノテーションによってだけ使えるように公開することができる。
Line 35: Line 33:
Line 38: Line 37:
Line 42: Line 40:
ServletModuleを使うことにより、インジェクトされたサーブレットあるいはフィルタを取得したら、 あなた自身のクラスに直接それを注入することにより、いつでもインジェクタにアクセスできる。
Line 43: Line 42:
ServletModuleを使うことにより、インジェクトされたサーブレットあるいはフィルタを取得したら、
あなた自身のクラスに直接それを注入することにより、いつでもインジェクタにアクセスできる。

正規表現

正規表現を使って、サーブレット(あるいはフィルター)を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);

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