2012-04-04 6 views
1

私は自分のアプリケーションに複数のフィルタを持っています。スカラトラフィルタの動作の変更

<filter> 
    <filter-name>root</filter-name> 
    <filter-class> 
     my.own.classpath.RootFilter 
    </filter-class> 
</filter> 

<filter> 
    <filter-name>root</filter-name> 
    <filter-class> 
     my.own.classpath.SubFilter 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>root</filter-name> 
    <url-pattern>/</url-pattern> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>sub</filter-name> 
    <url-pattern>/sub/*</url-pattern> 
</filter-mapping> 

Scalatra 2.0.0では、これはうまくいきました。 RootFilter(これはScalatraFilterを拡張)がURLのバインディングを持っていればそれを処理し、それ以外の場合は他のフィルタに渡します。しかし、Scalatraのそれ以降のバージョンでは、同じように動作しません。 SubFilterで処理されたURLを指定すると、正しいフィルタが呼び出されますが、結果のテキストは表示されません。代わりに空白のページ(HTMLなし)が返されます。

これはScalatraのバグですか、何か間違っていますか?

+1

Scalatraのバージョンあなたがオンになっていますか? 2.10開発、2.0.4安定、または何か他のもの? (録音されたメッセージのように読まれます;-)) – virtualeyes

+0

私のサイトはScalatra 2.0.0で「動作します」。私のサイトはScalatra 2.0.1と2.0.4では「動作しません」。私はバグやフィーチャーを利用しているかどうか分からないので、これらのフレーズを引用符で囲みます。私は*後者だと思っていますが。 – schmmd

答えて

1

スカラトラはJavaペースで動かないので、状況は変わります。

ScalatraServletとScalatraFilterのScalatra Book v2.0の抜粋です。

(あなたのケースでは、何の次のフィルタは、サブ後にありません)特に発見とScalatraFilterはチェーンの次のフィルターに委任されないに関して、主な問題はどこにあるのかに関しては、ここでいくつかの手がかりがあるかもしれません経路が見つからない場合のデフォルト動作です。 ScalatraFilterは チェーン内の次のフィルタまたはサーブレット(web.xmlによって設定されたもの)に委譲しますが、ScalatraServletは が404応答を返します。

別の違いは、ScalatraFilterが、 のWARのコンテキストパスに関連するルートと一致することです。 ScalatraServletは、 サーブレットパスを基準にしたルートと一致します。これにより、複数のサーブレットを同じWARの異なる名前空間にある の下にマウントすることができます。

使用ScalatraFilter場合:

You are migrating a legacy application inside the same URL space 
You want to serve static content from the WAR rather than a dedicated web server  

使用ScalatraServlet場合:

You want to match routes with a prefix deeper than the context path. 
+0

はい、最初の部分は私がやっていることがうまくいくことを示唆しています(次のフィルタに委任します)。 – schmmd

+0

;-)私はScalatraが大好きですが、いくつかの掘削が必要で、メンテナーの誰も(直接)支払われません。ドキュメントは良いものの、それほど素晴らしいものではありません。 IMHO、それは最もアクセス可能な/ヒットして地面を走っているScalaマイクロフレームワークです(Spray&UnfilteredはステートレスなRESTニッチをカバーしていますが、Scalatraは一般的にあなたの道を離れてしまいます。 MVCスタックに簡単に変形できます)。とにかく、いくつかの援助があったことをうれしく思います! – virtualeyes

関連する問題