我正在使用Apache POI在Java Servlet中生成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或block2,那么它不会给出错误,但是我想发送客户端Excel文件和两个我添加到请求对象的属性.
那么可以使用request.getRequestDispatcher将Excel文件发送到客户端吗?还是有更好的方法呢?
任何建议将不胜感激.
EDIT1
我知道为什么会收到IllegalStateException,但是我的问题是如何将ExcelFile和Request Attributes都发送给客户端?
EDIT2
我想将Excel文件和属性都发送给客户端的原因是MyFile.jsp具有< div>这将显示从servlet发送的消息.
${Message}
EDIT3
我想向客户端发送消息的原因是,我发送此Excel文件作为对Import Excel操作的响应,在该操作中,客户端将提供用于在数据库中插入数据的excel文件,然后突出显示无法插入的excel行.由于重复或任何其他原因.因此,我想在“发送给客户端的消息”中显示“导入统计信息”,并给他提供excel文件的副本,并突出显示错误行.