2011-11-16 11 views
2

WebアプリケーションでGuiceを使用してリクエストをルーティングしていますが、処理するURLパターンのルーティングをモジュール化したいと思います。Guiceサーブレットを使用したサブパスのルーティング

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

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

あるいはさらに良い:理想的には、私は私のServletModuleにこのような何かを行うことができるようにしたいと思い

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

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

はGuiceの中で、このことは可能ですか? Guiceは、ServletModulesによって実装されたバインディングを、シンプルにすることを試みていると思われます。これは、GuiceServletContextListenerによって、GuiceFilterによって使用されるようになりましたが、誰にも分かりません。これは、すべてを単一の関数で緊密に束縛するのではなく、

答えて

3

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

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

自分自身を正しくマップする方法を知っているSomeOtherServletModule( "/ myprefix")のコンストラクタを使用して、あなたが求めていることを自明に考えると、この機能を提供しないことにしました。

+1

興味深いコメント。私はこれが大きな問題ではないと思うでしょう - あなたは、あるパスの下のすべてのリクエストを別のウェブサーバーのルートにプロキシするのとほぼ同じと見なすことができます。実際には、同じサーブレットコンテナ内で任意のモジュールがサブパートされるのは混乱するかもしれませんが、サブモジュールがこの使用方法のサポートを宣言しなければならない場合でも、これを達成するには何らかの方法があります。しかし、私はこれは、この場合の機能要求に属していると思います:) – bdonlan

関連する問題