【问题标题】:How to fix exception: getOutputStream() has already been called for this response?如何修复异常:getOutputStream() 已为此响应调用?
【发布时间】:2019-06-17 17:53:20
【问题描述】:

我浏览了有关相同/相似问题的答案/讨论,发现我应该使用“响应”方法一次下载文件或获取 HTML 页面。就我而言,在成功下载文件后,我想显示成功警报消息。当我使用“响应”方法下载文件并打印成功警报消息时,我总是得到:getOutputStream() 已经为此响应异常调用。

解决这个问题的正确方法是什么?

下面是我的代码部分:

// Write data in the excel
            ServletOutputStream out = response.getOutputStream(); => It successfully creates excel file
            workbook.write(out);

            // Close output stream and workbook
            workbook.close();
            out.flush();
            out.close();

            PrintWriter pw = response.getWriter(); => My problem is here!!
            response.setContentType("text/html");
            pw.println("<script type=\"text/javascript\">");
            pw.println("alert('" + message + "');");
            pw.println("history.back();");
            pw.println("</script>");

【问题讨论】:

  • 只刷新而不关闭out 对象会发生什么?
  • @aksappy 即使没有关闭“out”也会给出同样的异常:(

标签: java jsp servlets printwriter


【解决方案1】:

您正试图在同一个 HTTP 请求的响应中返回两个对象。这不是 HTTP 的工作方式。没有浏览器会支持。

AFAIK,无法在 javascript 中检测“下载完成”事件。

【讨论】:

猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多