応答サイズをカウントするサーバー フィルターを作成しました。ServletOutputStream
これは、 Apache Commonsでラップする応答ラッパーを作成することによって行われCountingOutputStream
ます。また、ラッパーは、ラップされたストリームで PrintWriter を作成します。したがって、理論的には、実際の出力を作成するために使用されるメソッドは、CountingOutputStream を経由する必要があります。
問題は、一般的なサーブレット リクエストに対してはすべてが機能する一方で、静的コンテンツに対しては失敗することです。正確には、リクエストはフィルタによって取得され、レスポンス ラッパーが作成されてchain.doFilter()
呼び出されます。ただし、返されると、ラップされたストリームはデータが送信されなかったと主張しますが、実際にはデータは送信されました。さらにデバッグすると、静的コンテンツの提供中に応答ラッパーで呼び出されgetOutputStream()
たり呼び出されたりしないようです。getWriter()
フィルターとアプリはJetty 8.1.xで実行されています。Jetty のデフォルトのサーブレットにざっと目を通してみたところ、静的コンテンツは通常の方法 (つまり、出力ストリームを取得して書き込み) で提供されているようです。
問題は、なぜラッパー メソッドが無視されているのかということです。