Announcement

Collapse
No announcement yet.

Dokumentengröße in einem Filter ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dokumentengröße in einem Filter ermitteln

    Um die Anfragen meiner Applikation in eine DB zu loggen würde ich in einem Filter beim doAfterProcessing gerne die Größe der Antwort vom entsrechenden Request bestimmen. Leider habe ich in der Doku keine Klasse gefunden, die mir diese Info bietet.

    Im sun Forum ist dies auch nicht in entsprechender Form diskutiert worden.

    Bin wie immer für jeden Tip dankbar

    lg Dietmar

  • #2
    Das ist nicht so einfach :-) Falls das Servlet die Länge des Response (entspricht dem HTTP-header Content-Length) nicht explizit setzt, wird sie vom Server ermittelt und gesetzt, aber erst, wenn alle Servlets und Filter abgearbeitet sind, denn Dein Filter (oder ein anderer der später kommt) könnte ja noch was in den response schreiben, was die Größe ändert. Unter Umständen gibt es auch gar keine Content-Length, z.b. bei einem buffered response. Daher kann man diese Länge auch nicht abfragen. Du kannst folgendes tun: Einen HttpServletResponseWrapper schreiben, der die Methoden

    <PRE>
    getWriter() und getOutputStream()
    </PRE>

    überschreibt und eigene Versionen der Writer bzw. OutputStream-Objekte zurückliefert. Der komplette Response wird also zunächst in diese Objekte geschrieben. Damit kennt Dein Wrapper auch den kompletten Response und dessen Länge. Der Filter kann dann die Länge loggen und den Response in das "richtige" Response-Objekt flushen.

    Ob sich das lohnt, nur um die Größe zu bestimmen, sei dahingestellt :-)

    Wenn das Servlet die Größe explizit setzt, kann man natürlich einen Wrapper machen, der diese direkt abfragt.

    Gruß,

    Alwi

    Comment


    • #3
      Danke Alwin,

      das hätte ich einfacher erwartet, aber wenn man sich es mit Deiner Beschreibung durchdenkt, dann ist es eh klar.

      lg Dietma

      Comment

      Working...
      X