【发布时间】:2014-09-22 21:07:22
【问题描述】:
我正在将 JasperReports 集成到我的项目中,但我是 Jasper Report 的新手,所以我编写了一个 servlet ,它将编译、填写报告并导出为 pdf。之后我必须将 outputtreem 发送到 jsp 并在客户端显示 pdf。
我已经这样做了。
<a href="VehicleReports">Vehicle Report</a>
在doPost() 方法中我是这样写的。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection con=null;
try {
response.setContentType("application/pdf");
con=VehicleDetails.getConnection();
InputStream inputStream = new FileInputStream ("E:/ReportFld/report4.jrxml");
Map parameters = new HashMap();
JasperDesign jasperDesign = JRXmlLoader.load(inputStream);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
@SuppressWarnings("unchecked")
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, con);
JasperExportManager.exportReportToPdfFile(jasperPrint, "D:/reports/vehicle2_jasper.pdf");
int len = (int)new File("D:/reports/vehicle2_jasper.pdf").length();
response.setContentLength(len);
byte[] buf = new byte[len];
FileInputStream pdfin = new FileInputStream("D:/reports/vehicle2_jasper.pdf");
pdfin.read(buf);
pdfin.close();
OutputStream pdfout = response.getOutputStream();
pdfout.write(buf,0,len);
pdfout.flush();
request.getRequestDispatcher("/vehicleReport.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
con.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
但在这里我的感觉是,响应没有发送到 /vehicleReport.jsp 文件,而是下载生成的 pdf。而且我在控制台中遇到错误,
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
at com.reports.VehicleReports.doGet(VehicleReports.java:78)
我该如何解决这个问题,谁能帮我解决这个问题?
【问题讨论】:
-
@AlexK 是的,这很好,但我想在 jsp 中显示它,通过执行上述方法下载它。
标签: java jasper-reports