필터에서 서블릿의 출력을 캡처 할 수 있어야합니다.
이렇게하려면 사용자가 HttpServletResponseWrapper를 삽입하여 getWriter().print()
에 보낸 모든 출력을 수집해야 memcached에 전달할 수 있습니다.
아마의 라인을 따라 뭔가 :
ByteArrayOutputStream baos = new ByteArrayOutputStream(3000);
final PrintWriter w = new PrintWriter(new OutputStreamWriter(baos, "UTF-8"));
HttpServletResponse wrapper = new HttpServletResponseWrapper(response) {
@Override
public PrintWriter getWriter() throws IOException {
return w;
}
};
이 더 큰 프로젝트이며 네트워크 인프라를보다 효율적으로 제어 할 수 있다면, 또한 자바에서이 작업을 수행 할 수있는 좋은 생각하지만, 단지 수 서블릿 컨테이너 앞에 별도의 프록시 서버를 사용하십시오. 일반적인 캐시 제어 헤더 (서블릿이 아직 수행하지 않은 경우 필터를 사용하여 설정할 수 있음)에 의해 캐시되어야하는 것을 제어 할 수 있습니다.
응답 본문을 수정하지 않아도 HttpServletResponseWrapper가 필수라는 것을 의미합니까? – dolphincody
서블릿의 출력물을 얻으려면 어떻게해야합니까? 아무 것도하지 않으면 브라우저에 대한 네트워크 연결에 직접 씁니다. 그러면 필터에 아무 것도 표시되지 않습니다. – Thilo
감사합니다. 이제 어떻게 응답 본문을 래퍼에서 가져 옵니까? – dolphincody