Servlet error: Cannot call sendRedirect() after the response has been committed
Servlet error: Cannot call sendRedirect() after the response has been committed
我想在写入 excel 文件后重定向到一个页面。 servlet代码如下:
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
workbook.write(outByteStream);
byte [] outArray = outByteStream.toByteArray();
response.setContentType("application/ms-excel");
response.setContentLength(outArray.length);
response.setHeader("Content-Disposition", "attachment; filename=name_"+date+".xlsx");
response.setIntHeader("Refresh", 1);
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
response.sendRedirect("url/reports.jsp");
此代码下载我创建的 Excel 文件。
当我调用上面的 servlet 时,正在下载 excel 文件,但它在最后一行抛出以下异常:
Servlet Error: ::java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
因此我无法重定向到新页面。在“outStream”
中写入输出后,我该怎么做才能访问响应对象
基本问题是这个...
I want to redirect to a page after writing the excel file.
...描述了两个单独的响应。服务器不能自己将它们链接在一起,因为客户端将只期望对每个请求有一个响应。因为需要两个请求来引发两个响应,所以此序列的自动化将需要客户端脚本。
就个人而言,我可能会将脚本放在前端:适当按钮上的处理程序或 link 首先下载文件,然后(成功时)发出对新页面的请求。也可以按照评论中的建议进行操作,但是:将脚本放在下载文件的新页面中。
您不能使用带有重定向的 body,因为浏览器在收到重定向时会向它找到的 URL 发出第二个请求(在 header 位置) ,并且显示的是第二个请求的响应,除非它也是重定向,在这种情况下,它将发出第三个请求,依此类推...
我想在写入 excel 文件后重定向到一个页面。 servlet代码如下:
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
workbook.write(outByteStream);
byte [] outArray = outByteStream.toByteArray();
response.setContentType("application/ms-excel");
response.setContentLength(outArray.length);
response.setHeader("Content-Disposition", "attachment; filename=name_"+date+".xlsx");
response.setIntHeader("Refresh", 1);
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
response.sendRedirect("url/reports.jsp");
此代码下载我创建的 Excel 文件。 当我调用上面的 servlet 时,正在下载 excel 文件,但它在最后一行抛出以下异常:
Servlet Error: ::java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
因此我无法重定向到新页面。在“outStream”
中写入输出后,我该怎么做才能访问响应对象基本问题是这个...
I want to redirect to a page after writing the excel file.
...描述了两个单独的响应。服务器不能自己将它们链接在一起,因为客户端将只期望对每个请求有一个响应。因为需要两个请求来引发两个响应,所以此序列的自动化将需要客户端脚本。
就个人而言,我可能会将脚本放在前端:适当按钮上的处理程序或 link 首先下载文件,然后(成功时)发出对新页面的请求。也可以按照评论中的建议进行操作,但是:将脚本放在下载文件的新页面中。
您不能使用带有重定向的 body,因为浏览器在收到重定向时会向它找到的 URL 发出第二个请求(在 header 位置) ,并且显示的是第二个请求的响应,除非它也是重定向,在这种情况下,它将发出第三个请求,依此类推...