2

Web アプリでリクエストをルーティングするために Guice を使用していますが、処理する URL パターンの一部のルーティングをモジュール化したいと考えています。理想的には、私の中で次のようなことができるようにしたいと思いますServletModule:

delegate("/foo/bar/*").to(SomeOtherServletModule.class);

// in SomeOtherServletModule.configureServlets:
serve("/foo/bar/quux").with(Quux.class);

またはさらに良い:

delegatePrefix("/foo/bar/").to(SomeOtherServletModule.class);

// in SomeOtherServletModule.configureServlets:
serve("/quux").with(Quux.class); // prefix removed

これは Guice で可能ですか? Guice は、ServletModules によってインストールされたバインディングをシングルトンにしようと懸命に努力しているようです。これは、誰がどこでGuiceServletContextListener使用するかを知っている場所に保存されますGuiceFilterが、このように委任できるように、シングルトン化を解除したいと思います。すべてを単一の関数にしっかりとバインドする代わりに。

4

1 に答える 1

3

私は Guice Servlet の作成者です。このように使用することを意図していないモジュールを混乱させると感じたため、これは基本的に許可されていません。

たとえば、多くのモジュールは、"/*" に登録してインターセプト機能 (トランザクションなど) を提供するフィルターを提供します。自動接頭辞を付けた場合、これらは誤って機能しなくなる可能性があります。サーブレット モジュールを推移的にインストールできることを考えると、これは 1 つのコードに注意を払うほど単純ではありません。また、正規表現バインディング (例: /\.html$/) では、プレフィックスはどのように処理されるのでしょうか? 私たちはそれらをサポートしますか (難しい問題)? それとも、正規表現バインディングを普通に登録して、驚くべき例外を作るだけですか?

あなたが求めていることは、自分自身を正しくマップする方法を知っている SomeOtherServletModule("/myprefix") のコンストラクターで簡単に達成されることを考慮して、この機能を提供しないことにしました。

于 2011-11-16T23:49:36.143 に答える