16

リクエストに一致する2つのサーブレットマッピングがweb.xmlにある場合はどうなりますか?最も具体的なものを選択しますか?

たとえば、次のxmlがあり、somethingservletまたはeverything_elseサーブレットに移動しているときにリクエストが.... / somethingに送信された場合はどうなりますか?

   <servlet-mapping>
      <servlet-name>something</servlet-name>
      <url-pattern>/something</url-pattern>
  </servlet-mapping>    

  <servlet-mapping>
    <servlet-name>everything_else</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
4

1 に答える 1

19

最初の成功した一致が使用されます。

サーブレットコンテナが従う特定のマッピングルールがあります。サーブレット2.5仕様の章SRV.11をお読みください。

サーブレットへのマッピングに使用されるパスは、リクエストオブジェクトからのリクエストURLからコンテキストパスとパスパラメータを差し引いたものです。以下のURLパスマッピングルールが順番に使用されます。最初に成功した一致が使用され、それ以上の一致は試行されません。

  1. コンテナは、リクエストのパスとサーブレットのパスが完全に一致するものを見つけようとします。一致が成功すると、サーブレットが選択されます。
  2. コンテナは、最長のパスプレフィックスとの一致を再帰的に試行します。これは、パス区切り文字として「/」文字を使用して、パスツリーを一度にディレクトリごとにステップダウンすることによって行われます。最長の一致によって、選択されるサーブレットが決まります。
  3. URLパスの最後のセグメントに拡張子(.jspなど)が含まれている場合、サーブレットコンテナは、拡張子の要求を処理するサーブレットとの照合を試みます。拡張子は、最後の「。」の後の最後のセグメントの一部として定義されます。キャラクター。
  4. 前の3つのルールのいずれもサーブレットの一致をもたらさない場合、コンテナは要求されたリソースに適切なコンテンツを提供しようとします。アプリケーションに「デフォルト」サーブレットが定義されている場合は、それが使用されます。
于 2012-08-08T20:55:38.310 に答える