-1

sitemeshの簡単なフロー図(ここ)は、フィルターが初めて適用されるかどうかをチェックすることを示しています。私は他のフィルターのコードでもこのチェックを見ました。同じリクエストに対して同じフィルターを2回適用できる状況を理解できません。説明してください。

4

1 に答える 1

1

サーブレット2.4以降、リクエストディスパッチャを介して呼び出されたリクエストにもフィルタを適用できます。フィルタがインクルードまたはフォワードで実行するように指定されている場合、たとえば、複数回実行される可能性があります。例えば

<filter-mapping>
  <filter-name>Logging Filter</filter-name>
  <url-pattern>/products/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>ERROR</dispatcher>
</filter-mapping>

したがって、たとえば、リクエストがサーブレットによって処理され、そのサーブレットがリクエストを別の場所に転送する場合

httpServletRequest.getRequestDispatcher("/products/somewhereElse").forward(httpServletRequest, httpServletResponse);

、その後、フィルターは2回実行される場合があります。元のリクエストに対して1回、次にURLパスとディスパッチャ構成を提供するフォワードに対して1回。

于 2013-01-25T14:40:36.313 に答える