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!