【问题标题】:Print ServletResponse to the Console将 ServletResponse 打印到控制台
【发布时间】:2015-10-21 13:14:23
【问题描述】:

我有一个带有方法的过滤器

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() 获得的并不是我想要的。

所以我的问题是:如何打印真实的回复?

【问题讨论】:

标签: java servlets stream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多