サーブレットの応答サイズを監視したいので、この機能を実装するフィルタを追加する予定です。HttpServletResponseの合計サイズを取得する方法
しかし、私はHttpServletResponse
方法を確認したときに応答サイズを取得する方法がわからない:
response.getWriter()
response.getOutputStream()
は合計応答サイズを計算するための任意の効率的な方法はありますか?
サーブレットの応答サイズを監視したいので、この機能を実装するフィルタを追加する予定です。HttpServletResponseの合計サイズを取得する方法
しかし、私はHttpServletResponse
方法を確認したときに応答サイズを取得する方法がわからない:
response.getWriter()
response.getOutputStream()
は合計応答サイズを計算するための任意の効率的な方法はありますか?
レスポンスヘッダーにアクセスできる場合は、Content-Lengthを読むことができます。例えば、
(Status-Line):HTTP/1.1 200 OK
Connection:Keep-Alive
Date:Fri, 10 Mar 2015 14:00:00 GMT
Content-Length:728
あなたがgetWriter
とgetOutputStream
をオーバーライドしますHttpServletResponseWrapper
でサーブレットを提供するために、フィルターを使用することができます。両方のメソッドは、そこに書き込まれた文字を数える実際のストリームにラッパーを返します。
総額を得るには高価すぎるかもしれません。 – Bensson
あなたはこのような基本的なHTTPのものの監視を自分で行う必要はありません、Tomcatはあなたのためにそれを行います。
あなたが%b
変数によって与えられた応答の大きさを持っているあなたのserver.xml
と出来上がりにAccessLogValveを追加アクセスログ。
Thx、実際には私はこれをユーザーごとに制御したいので、フィルタでこれを処理します。それはAccessLogValveでこれを行うことは本当に難しいです。 – Bensson
JavaEE APIを使用してHttpServletRequestの合計サイズを取得する方法はありません。
お返事ありがとうございます。私はちょうどいくつかのデバッグを行い、3つのヘッダーしか取得できません。コンテンツタイプ|転送エンコーディング|日付。 HttpServletResponseでContent-Lengthが見つかりません。 – Bensson
@Bensson:サーブレットもフィルターもフィールドを追加していない場合、それは応答に存在することはできません。 –
@ SergeBallestaあなたが言ったのと同じですが、コンテンツ長は実際のサイズで自動更新されませんでした。 – Bensson