正規表現
正規表現を使って、サーブレット(あるいはフィルター)を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);
これは、インジェクタそれ自体を使う必要のあるサードパーティ製フレームワークに統合するのに便利である。