runReportToPdf上的空指针异常 - 尝试在JSP中获取报告时

时间:2017-04-03 04:17:26

标签: java jsp nullpointerexception jasper-reports

我正在尝试将我的报告集成到JSP页面中。使用jaspersoft studio创建的报告。但我在runReportToPdf行上获得空指针异常。我对这份报告和网络应用程序完全不熟悉。所以请有人帮忙解决这个问题并获得例外结果。非常感谢快速支持。感谢。



<%@ page  import="java.io.*"%> 
<%@ page  import="java.sql.Connection"%> 
<%@ page  import="java.sql.DriverManager"%>
<%@ page  import="java.util.HashMap"%>
<%@ page  import="java.util.Map"%>
<%@ page  import="net.sf.jasperreports.engine.*"%>
<%@ page trimDirectiveWhitespaces="true" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Report!</h2>
<%
            Connection con = null;

			try{
				Class.forName("oracle.jdbc.driver.OracleDriver");
				con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.248:1521:incomingqc", "inqc", "megaWIN123$");
	             System.out.println("i AM IN CONNECTION");
            }catch (Exception ex) {
            	System.out.println("i AM ex para");
                ex.printStackTrace();
            }
            
            File reportFile = new File(application.getRealPath("Blank_A4_Landscape.jasper"));//your report_name.jasper file
            Map parameters = new HashMap();
            byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, con);
 
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();
        %>
    </body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

PDF和HTML内容不能混用。当JSF页面生成HTML时,它会写入临时缓冲区。一旦JSF被告知响应完成,该临时缓冲区将被发送到浏览器。

在给定的代码中,这里大致了解了Web浏览器将收到的内容:

<html><head></head><body><h2>Report!</h2>%PDFNΘs​*̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s...</body></html>

要让浏览器显示报告,可以选择以下几种方法:

  • 生成报告的HTML版本,并使用<h:outputFormat>将报告内容注入现有网页。
  • 生成报告的PDF版本,并使用<h:commandLink><h:commandButton>执行将PDF写入浏览器的操作,就像您已经完成的一样。

然而,如问题中所示混合两种方法将不会产生所需的结果。

另见: