当我通过jsp打印报表时,会出现问题。
首先,我认为它更像是一个内存错误,即NetBeans的permgen空间,但是当您部署应用程序时,它不应该发生,而且它是活动的,但问题仍然存在。
报表打印工作正常,比如前6-7报表,然后应用程序变得没有响应性,为了使它再次工作,我必须停止Apache并再次运行应用程序。
下面是我用来通过jsp打印报告的代码
try {
JasperReport jasperReport;
JasperPrint jasperPrint;
JasperDesign jasperdesign;
String path = getServletContext().getRealPath("/reports/admissionReport.jrxml");
String imagepath = getServletContext().getRealPath("/images//");
String imageSubPath = File.separatorChar + "";
imagepath = imagepath + imageSubPath;
jasperdesign = JRXmlLoader.load(path);
jasperReport = JasperCompileManager.compileReport(jasperdesign);
Connection con = this.getServiceFactory().getReportService().getDao().getJdbcTemplate().getDataSource().getConnection();
paramMap.put("imagePath", imagepath);
jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap, con);
JasperExportManager.exportReportToPdfFile(jasperPrint, getServletContext().getRealPath("/reports/admissionReport.pdf"));
String filename = getServletContext().getRealPath("/reports/admissionReport.pdf");
File rtf = new File(filename);
int readBytes = 0;
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-disposition", "inline; filename=\"admissionReport\"");
response.setContentLength((int) rtf.length());
input = new FileInputStream(rtf);
BufferedInputStream buf = new BufferedInputStream(input);
OutputStream stream = response.getOutputStream();
while ((readBytes = buf.read()) != -1) {
stream.write(readBytes);
}
stream.flush();
stream.close();
} catch (Exception exp) {
throw new Exception("Error occured while saving record.." + exp.getMessage());
} finally {
if (input != null) {
input.close();
}
}到目前为止,我还没有在互联网上找到解决方案。
我正在使用Spring框架进行开发。
我想知道是否有人有办法解决这个问题。
发布于 2013-07-03 09:45:42
缺少buf.close();因此不需要input.close()。目前还不确定stream.close()是否是相反的,但它有效。你可以试试con.close()。
提示:
response.setHeader("Content-Length", String.valueOf(rtf.length()));
Files.copy(rtf.toPath(), stream);最后一个是将文件复制到流的Java7实用工具,它代替了字节级读取,即使使用BufferedInputStream也不是最优的。
https://stackoverflow.com/questions/17443430
复制相似问题