我有一个方法
的过滤器public void doFilter(ServletRequest req, ServletResponse rep, FilterChain chain)
我的目标是在控制台上打印rep
的内容。我试图通过
((HttpServletResponse) rep).getWriter()
但getWriter
方法做了不同的事情。
我还写了一个包装器:
class HtmlResponseWrapper extends HttpServletResponseWrapper {
private final ByteArrayOutputStream capture;
private ServletOutputStream output;
private PrintWriter writer;
public HtmlResponseWrapper(HttpServletResponse response) {
super(response);
capture = new ByteArrayOutputStream(response.getBufferSize());
}
@Override
public ServletOutputStream getOutputStream() {
if (writer != null) {
throw new IllegalStateException("getWriter() has already been called on this response.");
}
if (output == null) {
output = new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
capture.write(b);
}
};
}
return output;
}
...
}
但调用os new HtmlResponseWrapper(rep).getOutputStream()
并不完全得到我想要的东西。
所以我的问题是:如何打印真实的反应?
答案 0 :(得分:0)
很可能你无法做到这一点。容器甚至可以决定在执行过滤器时开始刷新输出并从内存中移除(部分)它(取决于缓冲区大小)。