HTTP 서블릿 응답 출력 스트림 콘텐츠 캡처 및 로깅
Java 웹 서버에서는 들어오는 요청과 요청을 모두 기록해야 하는 상황이 발생할 수 있습니다. 매개변수 및 결과 서버 응답. 이 기사에서는 로깅 목적으로 HTTP 서블릿 응답 출력 스트림 콘텐츠를 얻는 솔루션을 제공합니다.
이를 달성하려면 필터를 활용하여 HttpServletResponseWrapper라는 사용자 정의 구현으로 HttpServletResponse 개체를 래핑할 수 있습니다. 이 래퍼 내에서 getOutputStream() 및 getWriter() 메서드를 재정의하여 사용자 정의된 ServletOutputStream 구현인 ServletOutputStreamCopier를 반환합니다.
ServletOutputStreamCopier는 원본 출력 스트림을 래핑하고 기록된 바이트를 byte[로 액세스할 수 있는 ByteArrayOutputStream에 복사합니다. ] getCopy() 메서드를 통해
맞춤 응답이 완료되면 래퍼가 제 위치에 있으면 이를 FilterChain#doFilter() 호출에 전달합니다. 요청-응답 주기가 완료된 후 로깅을 위해 ServletOutputStreamCopier에서 복사된 응답 콘텐츠를 검색합니다.
다음은 이러한 필터의 구현 예입니다.
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())); } }
이 필터 구현은 응답을 캡처합니다. 바이트 배열로 출력하므로 로깅이나 기타 필요한 처리를 처리할 수 있습니다.
코드 스니펫 솔루션 완성을 위해 HttpServletResponseCopier 및 ServletOutputStreamCopier도 제공됩니다.
위 내용은 Java에서 HTTP 서블릿 응답 출력 스트림 콘텐츠를 캡처하고 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!