Я интегрирую JasperReports в моем проекте, но я новичок в отчете Jasper, поэтому я написал сервлет, который будет компилировать, заполнять отчет и экспортировать в pdf. После этого я должен отправить outputstreem в jsp и отобразить PDF на стороне клиента.Как отобразить 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)
Как я могу решить эту проблему, может ли кто-нибудь помочь мне в этом?
возможно дубликат [Как отображать отчеты на стороне клиента JSP?] (Http://stackoverflow.com/questions/25908004/how-to-display-the-reports-on-client-side- jsp) –
проверить это http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-been-committe – Killer
@AlexK да это было хорошо, но я хочу отобразить его в jsp, делая выше метод его загрузки. – Raghu