のサブクラスを使用HttpServletRequestWrapper
してリクエスト パラメータの変換を行っています。変換された値は、最初にリクエストされたときにキャッシュされます。たとえば、最初getQueryString()
に呼び出されたときに、呼び出しsuper.getQueryString()
て、必要な結果を計算し、それをフィールドに保持してから返します。次回は、キャッシュされた結果を使用します。
この方法は、「転送」がない限り、魅力的に機能します。リクエストが転送されると、Tomcat は元のリクエストを置き換えるため、キャッシュされたクエリ文字列は変更されず、転送されたページは転送先ではなく元のクエリ文字列を取得します。
メソッドをオーバーライドしsetRequest()
てキャッシュをクリアすることも役に立ちません。リクエストが 2 回ラップされているかのようsetRequest
に、内側のラッパー (私のものではない) で が呼び出され、それがいつ発生するかを知る方法がありません。
「転送」があるときにキャッシュをクリアできるように、ラップされたリクエスト階層に変更があったときに通知を受ける方法を探しています。