我编写了一个简单的应用程序来从服务器上获取订单。我决定能够运行一些报告并在JasperViewer中显示它们,然后从那里决定我是否要以其他格式打印或导出/保存。当我在NetBeans中运行该项目时,它运行良好,但是一旦将其编译并发布到服务器中,该报表便会运行,但无法在JasperViewer中打开该报表。实际上,查看器根本不会启动。
这是我的代码:
try {
Connection con = DriverManager.getConnection(
"jdbc:mysql://MYDATABASE",
"MY_UN",
"MY_PW");
java.sql.Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT `Product_ID` AS PRODUCT_ID, `Name` AS PRODUCT_DESCRIPTION, `Qty` AS QTY, `Price` AS PRICE_EACH_LINE, `Line_Total` AS LINE_TOTAL_LINE FROM `orderlines`;");
JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(rs);
final Map<String, Object> parameter = new HashMap<String, Object>();
parameter.put("DEALER_NAME", "TY JACOBS");
parameter.put("DEALER_STREET", "MY_ADDRESS");
parameter.put("DEALER_CITY_STATE_ZIP", "MY_CITY_STATE_ZIP");
parameter.put("DEALER_PHONE", "MY_PHONE_NUMBER");
ClassLoader classloader = getClass().getClassLoader();
InputStream url = null;
url = classloader.getResourceAsStream("OK/report3.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(url);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, resultSetDataSource);
JasperViewer.viewReport(jasperPrint, false);
} catch (SQLException|JRException ex) {
Logger.getLogger(DbReportDSFill.class.getName()).log(Level.SEVERE, null, ex);
}
还有一件事,我也可以在本地运行它,没有任何问题。似乎只有将其发布到服务器后,我才能在JasperViewer中获取报告。
最佳答案
我认为,我们也有类似情况。使用JasperViewer.viewReport(jasperPrint,false);
,它显示在部署它的同一服务器上。因此,当您在本地执行时,它在本地部署时可以正常工作。您可以验证尝试从其他系统访问本地URL,并且会看到jasperviewer将在您的系统中打开,而不是从调用它的位置打开。
这是我们所做的:
转换为字节数组,然后将其传递给前端进行显示。
byte[] byteArray = JasperExportManager.exportReportToPdf(jasperPrint);
然后
httpServletResponse.getOutputStream().write(byteArray);
希望这可以帮助!