我正在使用Apache POI在Java Servlets中生成Excel文件。
getExcel()函数返回HSSFWorkbook,我想发送给客户端。
HSSFWorkbook wb = getExcel();
这是我到目前为止所尝试的。
//block1
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
wb.write(outByteStream);
byte [] outArray = outByteStream.toByteArray();
response.setContentType("application/ms-excel");
response.setContentLength(outArray.length);
response.setHeader("Expires:", "0");
response.setHeader("Content-Disposition", "attachment; filename=Demo1.xls");
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();
//block2
request.setAttribute("Message", str1);
request.setAttribute("MessageDetails", str2);
request.getRequestDispatcher("/MyFile.jsp").forward(request, response);
上面的代码将 excel 文件发送到客户端,但给了我异常:
java.lang.IllegalStateException: Cannot forward after response has been committed
如果我从上面的代码中删除block1or block2,那么它不会给出错误,但我想发送客户端Excel file和我添加到request对象的两个属性。
那么可以Excel使用 向客户端发送文件request.getRequestDispatcher吗?或者有没有更好的方法来做到这一点?
任何建议将不胜感激。
Edit1
我知道为什么我会收到IllegalStateException,但是我的问题是我应该如何发送ExcelFile和发送Request Attributes给客户?
Edit2
我想同时发送Excel file和发送Attributes给客户端的原因是它MyFile.jsp有一个<div>将显示消息发送自servlet.
<div style="background-color: aliceblue">
<h3>${Message}</h3>
</div>
Edit3
我想向客户端发送消息的原因是我将其Excel file作为响应发送Import Excel operation,客户端将提供excel file在数据库中插入数据,然后我突出显示excel rows由于重复或任何其他原因而无法插入的消息。所以我想在Message客户端中显示导入统计数据,并给他一份带有突出显示错误行的 excel 文件副本。