Heim > Java > javaLernprogramm > Hauptteil

Wie erfasst und protokolliert man HTTP-Servlet-Antwort-Ausgabestream-Inhalte in Java?

Mary-Kate Olsen
Freigeben: 2024-11-15 16:06:02
Original
965 Leute haben es durchsucht

How to Capture and Log HTTP Servlet Response Output Stream Content in Java?

Erfassen und Protokollieren des Inhalts des HTTP-Servlet-Antwort-Ausgabestreams

Bei Java-Webservern kann es vorkommen, dass Sie sowohl die eingehende Anfrage protokollieren müssen Parameter und die daraus resultierende Serverantwort. Dieser Artikel bietet eine Lösung zum Abrufen des Inhalts des HTTP-Servlet-Antwort-Ausgabestreams für Protokollierungszwecke.

Um dies zu erreichen, können Sie einen Filter verwenden, um das HttpServletResponse-Objekt mit einer benutzerdefinierten Implementierung namens HttpServletResponseWrapper zu umschließen. Innerhalb dieses Wrappers überschreiben wir die Methoden getOutputStream() und getWriter(), um eine angepasste ServletOutputStream-Implementierung, ServletOutputStreamCopier, zurückzugeben.

Der ServletOutputStreamCopier umschließt den ursprünglichen Ausgabestream und kopiert die geschriebenen Bytes in einen ByteArrayOutputStream, auf den als Byte[ zugegriffen werden kann. ] über die getCopy()-Methode.

Sobald der benutzerdefinierte Antwort-Wrapper vorhanden ist, übergeben wir ihn an den FilterChain#doFilter()-Aufruf. Nachdem der Anfrage-Antwort-Zyklus abgeschlossen ist, rufen wir den kopierten Antwortinhalt vom ServletOutputStreamCopier zur Protokollierung ab.

Hier ist eine Beispielimplementierung eines solchen Filters:

public class ResponseLogger implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        if (response.getCharacterEncoding() == null) {
            response.setCharacterEncoding("UTF-8");
        }

        HttpServletResponseCopier responseCopier = new HttpServletResponseCopier((HttpServletResponse) response);

        chain.doFilter(request, responseCopier);
        responseCopier.flushBuffer();
        byte[] copy = responseCopier.getCopy();
        System.out.println(new String(copy, response.getCharacterEncoding()));
    }
}
Nach dem Login kopieren

Diese Filterimplementierung erfasst die Antwort Ausgabe als Byte-Array, sodass Sie die Protokollierung oder jede andere notwendige Verarbeitung durchführen können.

Die Codeausschnitte für HttpServletResponseCopier und ServletOutputStreamCopier werden ebenfalls bereitgestellt, um die Lösung zu vervollständigen.

Das obige ist der detaillierte Inhalt vonWie erfasst und protokolliert man HTTP-Servlet-Antwort-Ausgabestream-Inhalte in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage