2017-01-19 6 views
1

Ich möchte die Antwortgröße in einem Servlet überwachen, also plane ich Filter hinzufügen, um diese Funktion zu implementieren.Wie bekomme ich die Gesamtgröße von HttpServletResponse

Aber ich weiß nicht, wie die Antwortgröße zu erhalten, wenn ich HttpServletResponse Methoden überprüfen:

response.getWriter() 
response.getOutputStream() 

Gibt es eine effiziente Möglichkeit, die gesamte Antwortgröße zu berechnen?

Antwort

0

Wenn Sie Zugriff auf den Antwortheader haben, können Sie die Inhaltslänge lesen. Zum Beispiel könnten

(Status-Line):HTTP/1.1 200 OK 
Connection:Keep-Alive 
Date:Fri, 10 Mar 2015 14:00:00 GMT 
Content-Length:728 
+0

Vielen Dank für Ihre Antwort. Ich mache nur ein wenig Debugging und kann nur 3 Header bekommen. Inhaltstyp | Transfer-Encoding | Datum. Content-Length kann nicht in HttpServletResponse gefunden werden. – Bensson

+0

@Bensson: Wenn weder das Servlet noch ein Filter das Feld hinzufügen, kann es in der Antwort nicht vorhanden sein. –

+0

@SergeBallesta Das gleiche wie Sie gesagt haben, aber die Inhaltslänge wurde nicht automatisch mit der tatsächlichen Größe aktualisiert. – Bensson

1

Sie einen Filter verwenden, um das Servlet mit einem HttpServletResponseWrapper zu schaffen, den getWriter und getOutputStream außer Kraft setzen würde. Beide Methoden würden Wrapper an tatsächliche Streams zurückgeben, die die dort geschriebenen Zeichen zählen.

+0

Vielleicht zu teuer für eine totale Größe. – Bensson

1

Sie müssen die Überwachung dieser grundlegenden HTTP Sachen nicht selbst tun, tut Tomcat es für Sie:

In der AccessLogValve zu Ihrem server.xml und voila haben Sie die Antwortgröße durch die %b gegebene Variable in der Zugriffsprotokolle.

+0

Thx, Eigentlich möchte ich das pro Benutzer steuern, damit ich das im filter verarbeiten will. Es ist wirklich schwer, dies in AccessLogValve zu tun. – Bensson

0

Es gibt keine Möglichkeit, die Gesamtgröße von HttpServletRequest mithilfe der JavaEE-API abzurufen.

Verwandte Themen