已经在第二个servlet请求上为此响应调用了getOutputStream()

时间:2011-11-14 23:55:30

标签: java spring grails servlets groovy

你好,我有一个问题,我无法指责......

servletResp.setHeader("Expires","0")
servletResp.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0")
servletResp.setHeader("Pragma","public")
servletResp.setHeader("Content-Disposition","inline; filename=invoice.pdf")

servletResp.setContentType("application/pdf")
servletResp.setContentLength( outStream.size())
servletResponseStream.write(outStream.toByteArray())
outStream.close()
servletResponseStream.flush()
servletResponseStream.close()

在上面的代码中假设outStream有一个读取pdf文件。代码在第一次请求时呈现正常。在第二次请求时,我得到:

java.lang.IllegalStateException: getOutputStream() has already been called for this response

输出流是什么并不重要。即使我创建一个全新的字节[2]并写出相同的结果发生。在第一次请求时,服务器响应正常。第二,上述异常发生......

欢迎任何帮助

1 个答案:

答案 0 :(得分:0)

您问题中的代码不会调用getOutputStream(),也不会执行任何会导致调用它的代码。所以我得出结论,异常的原因是在其他地方。

最重要的是,您只能针对特定回复呼叫ServletResponse.getOutputStream()和/或getWriter()一次。在某个地方,您的应用程序多次调用getOutputStreamgetWriter