> Java > java지도 시간 > Java에서 HTTP 서블릿 응답 출력 스트림 콘텐츠를 캡처하고 기록하는 방법은 무엇입니까?

Java에서 HTTP 서블릿 응답 출력 스트림 콘텐츠를 캡처하고 기록하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-15 16:06:02
원래의
1036명이 탐색했습니다.

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿