为什么JasperViewer只适用于localhost?

我只是想知道为什么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); }... 

JasperViewer是一个swing组件,它在执行命令的计算机上启动(通常在已安装的应用程序中使用),因此如果在服务器上执行命令,它将在服务器上打开(或抛出HeadlessException ,如果没有配置为具有屏幕) ,结论我们不能在我们的服务器应用程序中使用此命令。

您可以使用applet在客户端计算机上启动命令,但我强烈建议不要使用它(它在浏览器中的支持正在减少 ,因此您无法确定它是否适用于所有客户端)

通常做的是将导出为pdf (html或其他选择的格式)发送到客户端浏览器,客户端可以打开带有喜欢的程序的文件并进行预览。

在您的示例代码中,您已经导出为pdf,将pdf直接传递给客户端 。 因此删除

 JasperViewer.viewReport(print, false); 

您已在源代码中对输出目录进行了硬编码。

可能始终存在服务器不是Windows环境或服务器中没有“C:/ REPORTS_FOLDER”文件夹等问题。

将它作为可配置属性更好。