无法在weblogic 11 + linux中成功导出excel

<% response.reset(); response.setHeader("Content-Disposition", "attachment;filename=\"" + "test.xls\""); response.setHeader("Content-Transfer-Encoding", "binary"); response.setContentType("application/vnd.ms-excel"); InputStream is = new FileInputStream(realPath); //OutputStream outStream = response.getOutputStream(); JasperPrint jasperPrint = JasperFillManager.fillReport(is, parameters, new JRBeanCollectionDataSource(pdfList)); JRAbstractExporter exporter = new JExcelApiExporter(); exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); exporter.setParameter(JExcelApiExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporter.setParameter(JExcelApiExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); exporter.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, out); exporter.exportReport(); outStream.flush(); outStream.close(); out.clear(); out =pageContext.pushBody(); %> 

我们使用上面的代码来生成一个excel,它在tomcat + windows中运行良好,但是在我们上传到linux + weblogic服务器之后,excel被破坏了。 我用文本编辑器打开excel,发现在excel里面加了几个空行,导致excel无法打开成功,任何人都可以点我正确的方向? 为什么有空间? 怎么回事?

提前致谢 !

我怀疑你使用pageContext.pushBody()可能是罪魁祸首。 就我所知,pushBody是为了更新JSP标签范围内的输出而devise的。

在生成二进制内容(如excel文件)时,如果需要确保预期的字节数以及只有预期的字节数达到浏览器,则需要写入这些字节,刷新输出,然后确保没有任何内容否则写入。 通过调用pushBody(),可以将更多内容写入输出,并且可以输出JSP页面中的任何空行(以及它们之间的回车/换行符)。

总而言之,我build议你不要在JSP中这样做 – 而是在Servlet中进行。