将ServletResponse打印到控制台

时间:2015-10-21 13:14:24

标签: java servlets stream

我有一个方法

的过滤器
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()并不完全得到我想要的东西。

所以我的问题是:如何打印真实的反应?

1 个答案:

答案 0 :(得分:0)

很可能你无法做到这一点。容器甚至可以决定在执行过滤器时开始刷新输出并从内存中移除(部分)它(取决于缓冲区大小)。