2

2 つの別々のサーブレットに 2 つのフィルターを使用したいと考えています。1 番目のフィルターは 1 番目のサーブレット:foodtypeServlet用で、2 番目のフィルターは 2 番目のサーブレット: 用menuServletです。2nd フィルターで、エラーが発生した場合に に転送したいfoodtypeServlet。しかし、問題は、に転送するとfoodtypeServlet、このサーブレットのフィルターも実行されることです。私はそれを実行したくありません。どうすれば達成できますか?

4

1 に答える 1

1

これは、フィルターが次のようにマップされていると仮定した場合の既定の動作ではありません。

<filter-mapping>
    <filter-name>foodtypeFilter</filter-name>
    <servlet-name>foodtypeServlet</servlet-name>
</filter-mapping>
<filter-mapping>
    <filter-name>menuFilter</filter-name>
    <servlet-name>menuServlet</servlet-name>
</filter-mapping>

デフォルトでは、フィルターはREQUESTディスパッチャーでのみ呼び出され、 onFORWARDINCLUDEnorでは呼び出されませんERROR<dispatcher>そのためには、フィルター マッピングでエントリを明示的に指定する必要があります。

サーブレット 2.3 を使用している可能性がありますか? その古いバージョンでは、どのフィルターもデフォルトで転送時に呼び出されます。少なくとも Servlet 2.4 にアップグレードするか、フィルターにjavax.servlet.forward.request_uri属性の存在をチェックさせ、存在する場合は、単に呼び出してフィルター呼び出しをバイパスする必要がありますchain.doFilter(request, response)

それとも、実際に転送ではなくリダイレ​​クトしているのでしょうか? その場合、redirectの代わりに実際のforwardを実行する必要があります。

于 2012-11-09T14:07:00.070 に答える