我正在使用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
如果我从上面的代码中删除block1
or 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 文件副本。