Rumah >Java >javaTutorial >Bagaimana untuk Menangkap dan Log Kandungan Strim Output Respons Servlet HTTP di Java?

Bagaimana untuk Menangkap dan Log Kandungan Strim Output Respons Servlet HTTP di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 16:06:021035semak imbas

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

Merakam dan Mengelog Kandungan Strim Output Respons Servlet HTTP

Dalam pelayan web Java, anda mungkin menghadapi situasi di mana anda perlu log kedua-dua permintaan masuk parameter dan tindak balas pelayan yang terhasil. Artikel ini menyediakan penyelesaian untuk mendapatkan kandungan aliran output respons servlet HTTP untuk tujuan pengelogan.

Untuk mencapai ini, anda boleh menggunakan penapis untuk membalut objek HttpServletResponse dengan pelaksanaan tersuai yang dipanggil HttpServletResponseWrapper. Dalam pembungkus ini, kami mengatasi kaedah getOutputStream() dan getWriter() untuk mengembalikan pelaksanaan ServletOutputStream tersuai, ServletOutputStreamCopier.

ServletOutputStreamCopier membalut strim output asal dan menyalin bait bertulis kepada ByteArray ByteArray yang boleh diakses. ] melalui kaedah getCopy().

Setelah pembungkus respons tersuai disediakan, kami menghantarnya ke panggilan FilterChain#doFilter(). Selepas kitaran permintaan-tindak balas selesai, kami mendapatkan semula kandungan respons yang disalin daripada ServletOutputStreamCopier untuk pengelogan.

Berikut ialah contoh pelaksanaan penapis sedemikian:

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()));
    }
}

Pelaksanaan penapis ini menangkap respons output sebagai tatasusunan bait, membolehkan anda mengendalikan pengelogan atau sebarang pemprosesan lain yang diperlukan.

Kod coretan untuk HttpServletResponseCopier dan ServletOutputStreamCopier juga disediakan untuk menyelesaikan penyelesaiannya.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Log Kandungan Strim Output Respons Servlet HTTP di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn