我只是想知道为什么JasperViewer只适用于localhost。当我将项目部署到服务器时,客户端无法再查看报告。
String reportDir = getServletContext().getRealPath("WEB-INF/classes/com/proj/reports");
String fileName = reportDir + "\\" + request.getParameter("reportName") + ".jasper";
File outReportDir = new File("C:/REPORTS_FOLDER");
outReportDir.mkdir();
long millis = System.currentTimeMillis();
String outFileName = outReportDir + "\\" + request.getParameter("reportName") + "_" + millis + ".pdf";
HashMap parameters = new HashMap();
parameters.put("P_BOOKING_MONTH", request.getParameter("selMonth"));
parameters.put("P_BOOKING_YR", request.getParameter("selYear"));
try {
Connection conn = ConnectionUtil.getConnection();
JasperPrint print = JasperFillManager.fillReport(fileName, parameters, conn);
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFileName);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.exportReport();
JasperViewer.viewReport(print, false); }...
答案 0 :(得分:1)
JasperViewer
是一个swing组件,它在执行命令的计算机上启动(通常在已安装的应用程序中使用),因此如果在服务器上执行该命令,它将在服务器上打开(或抛出) a HeadlessException
,如果没有配置屏幕),我们不能在服务器应用程序中使用此命令。
您可以使用applet在客户端计算机上启动该命令,但强烈建议您不要使用此功能(在浏览器中支持decreasing,因此您无法确定它适用于所有客户)
通常做的是将导出为pdf (html或其他选择的格式)发送到客户端浏览器,客户端可以打开带有喜欢的程序的文件并进行预览。
在您的示例代码中,您已导出为pdf,将 pdf直接传递给客户。因此删除
JasperViewer.viewReport(print, false);
答案 1 :(得分:0)
您已在源代码中对输出目录进行了硬编码。
可能始终存在服务器不是Windows环境或文件夹" C:/ REPORTS_FOLDER" 等服务器中没有的问题。
最好将它作为可配置属性。