为什么JasperViewer只适用于localhost?

时间:2016-04-22 05:01:01

标签: java jasper-reports

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

JasperViewer.viewReport(print, false);

答案 1 :(得分:0)

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

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

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