【问题标题】:Response already committed error happening [duplicate]响应已经发生错误[重复]
【发布时间】:2023-03-20 23:05:01
【问题描述】:

我正在尝试使用 Servlet 将数据下载为 CSV,并且 JSP 包含在 flush=true 中。下面提供了堆栈跟踪。该报告正在按预期保存,但我可以在后面看到一个异常。你能帮我弄清楚为什么吗?我已经关闭了OutputStream 并尝试刷新缓冲区,但仍然没有运气。

1:36:38,304 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:619)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
    at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
    at atg.taglib.dspjsp.IncludeTag.flushOut(IncludeTag.java:873)
    at atg.taglib.dspjsp.IncludeTag.doEndTag(IncludeTag.java:773)

pResponse.setContentType(MS_EXCEL);
pResponse.setHeader(CONTENT,FILENAME);

outputStream = pResponse.getOutputStream();
pResponse.flushBuffer();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();

【问题讨论】:

    标签: jsp servlets atg


    【解决方案1】:

    您拨打pResponse.getOutputStream(); 是非法的。对于ServletResponse.getWriter(),您应该使用ServletResponse.getOutpustStream()。您不能在同一响应中同时使用两者。

    由于 JSP 默认使用 ServletResponse.getWriter()。你应该写信给ServletResponse.getWriter() 而不是ServletResponse.getOutpustStream()

    Java Doc 是这么说的:

    getOutputStream...

    ServletOutputStream getOutputStream() 抛出 IOException

    返回适合在响应中写入二进制数据的 ServletOutputStream。 servlet 容器不对二进制数据进行编码。

    在 ServletOutputStream 上调用 flush() 会提交响应。 可以调用此方法或 getWriter() 来编写正文,而不是两者。

    返回:用于写入二进制数据的 ServletOutputStream 抛出:IllegalStateException - 如果在此响应上调用了 getWriter 方法

    【讨论】:

    • 我只能使用输出流编写工作簿,不使用打印写入器,工作簿没有任何支持打印写入器,你能告诉我如何使用打印写入器编写工作簿吗?
    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2014-12-24
    • 1970-01-01
    • 2015-12-03
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多