처리 및 완료된 응답의 내용을 읽고 해당 정보를 XML 또는 PDF 또는 기타 형식으로 반환하는 Servlet 필터를 만들고 싶습니다. 하지만 HttpServletResponse 객체에서 정보를 얻는 방법을 모르겠습니다. 이 정보를 어떻게 얻을 수 있습니까?HttpServletReponses 출력 스트림을 읽으려면 어떻게해야합니까?
답변
필터 자바 파일이 추가
static class MyHttpServletResponseWrapper
extends HttpServletResponseWrapper {
private StringWriter sw = new StringWriter(BUFFER_SIZE);
public MyHttpServletResponseWrapper(HttpServletResponse response) {
super(response);
}
public PrintWriter getWriter() throws IOException {
return new PrintWriter(sw);
}
public ServletOutputStream getOutputStream() throws IOException {
throw new UnsupportedOperationException();
}
public String toString() {
return sw.toString();
}
}
사용 추적 코드 :..
HttpServletResponse httpResponse = (HttpServletResponse) response;
MyHttpServletResponseWrapper wrapper =
new MyHttpServletResponseWrapper(httpResponse);
chain.doFilter(request, wrapper);
String content = wrapper.toString();
내용 변수가 이제 출력 스트림을 가지고 또한 수 이진 콘텐츠 용으로 사용하십시오.
저는 HttpServletResponse 객체에서 데이터를 가져올 수 있다는 것을 많이 알지 못합니다. 요청이 적절한 핸들러로 프록시되고 적절한 최종 응답을 작성할 수있는 데이터 전송 오브젝트로 전달되도록 애플리케이션을 구조화하는 것이 더 적절할 수 있습니다. 이런 식으로 둘 이상의 응답 객체를 수정하거나 읽지 않아도됩니다.
직접적인 대답은 아닙니다. 알아요.하지만 그 질문을하는 방법입니다.
궁극적으로, 나는 똑같은 일을하고 응답을 읽을 필요가없는 입장에 서게 될 것입니다. 그러나 실제로 사용하고있는 요청 처리는 상당히 까다 롭습니다. 따라서/ – DyreSchlock
출력 스트림에 쓰면 서블릿 필터가 채우기 후에 호출되기 전에 클라이언트에 데이터가 플러시 될 수 있으므로이 작업을 반드시 수행해야한다고 생각하지 않습니다. iftrue은 XML을 생성하고 원하는 출력 형식으로 다시 생성 할 수있는 다른 아키텍처를 제안합니다.
편집 : 당신이 정말 현재 처리를 방해 할 수없는 경우, 의 iftrue 게시물에 대한 응답을 읽으면서, 아마도 당신은 귀하의 요청에 프록시 서블릿을 필요로 원래의 출력에서 출력을 캡처, 그런 다음 적절하게 찌르십시오. 아주 불쾌한, 그러나
:-(Spring에는 이제 메소드 [public] [] getContentAsByteArray()가있는 [ContentCachingResponseWrapper]를 사용하면됩니다.
I 기본 ResponseWrapper 또는 ContentCachingResponseWrapper를 사용할지 여부에 관계없이 구성 가능한 WrapperFactory를 만들 것을 제안합니다.
- 1. 서블릿 출력 스트림을 플러시해야합니까?
- 2. 서블릿 출력 스트림을 닫아야합니까?
- 3. 출력 스트림을 새 창에서 작성하십시오.
- 4. PHP 출력 스트림을 Java에 전달
- 5. .inf 파일을 읽으려면 어떻게해야합니까?
- 6. HttpResponse에서 bytearray를 읽으려면 어떻게해야합니까?
- 7. Node.js에서 파일을 읽으려면 어떻게해야합니까?
- 8. Ruby로 파일을 읽으려면 어떻게해야합니까?
- 9. .pls 파일을 읽으려면 어떻게해야합니까?
- 10. J2ME에서 문자열을 읽으려면 어떻게해야합니까?
- 11. CodeIgniter에서 QueryString을 읽으려면 어떻게해야합니까?
- 12. JavaScript로 XML을 읽으려면 어떻게해야합니까?
- 13. 파일에서 입력을 읽으려면 어떻게해야합니까?
- 14. wfstream에서 이진 데이터를 읽으려면 어떻게해야합니까?
- 15. Spring을 사용하여 출력 스트림을 플러시하고 모델 뷰를 반환하려면 어떻게해야합니까?
- 16. 임의의 인라인 XML을 포함하도록 JAXB 마샬링 출력 스트림을 수정하려면 어떻게해야합니까?
- 17. MVC3을 사용하여 업로드 된 파일을 읽으려면 어떻게해야합니까?
- 18. ASP.NET 2.0에서 HttpResponse를 읽으려면 어떻게해야합니까?
- 19. 파일에서 특수 문자를 읽으려면 어떻게해야합니까?
- 20. Java의 파일에서 숫자를 읽으려면 어떻게해야합니까?
- 21. WPF에서 base64 이미지를 읽으려면 어떻게해야합니까?
- 22. 웹 서비스에서 데이터를 읽으려면 어떻게해야합니까?
- 23. SAS 데이터 세트를 읽으려면 어떻게해야합니까?
- 24. Unix에서 디렉토리를 파일로 읽으려면 어떻게해야합니까?
- 25. Winform에서 키보드 입력을 읽으려면 어떻게해야합니까?
- 26. Java에서 그래프의 좌표를 읽으려면 어떻게해야합니까?
- 27. 모든 피드 항목을 읽으려면 어떻게해야합니까?
- 28. 서버 로그 파일을 읽으려면 어떻게해야합니까?
- 29. PHP로 PDF 책갈피를 읽으려면 어떻게해야합니까?
- 30. C++ 출력 스트림을 다른 출력 스트림에 연결할 수 있습니까?
서블릿 응답 랩퍼를 사용하고 작성된 출력을 캡처하는 것이 가장 좋은 방법이라고 생각합니다. – DyreSchlock
요청을 처리하는 코드가 출력 스트림을 사용하고 있습니다. TeeOutputStream을 사용할 수 있습니다. (http://commons.apache.org/io/apidocs/org/apache/commons/io/output/TeeOutputStream.html) – DyreSchlock
무엇이 합리적인 값인 'BUFFER_SIZE'입니까? – asgs