Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JasperReport:如何下载生成的报告?_Java_Jsp_Jasper Reports - Fatal编程技术网

Java JasperReport:如何下载生成的报告?

Java JasperReport:如何下载生成的报告?,java,jsp,jasper-reports,Java,Jsp,Jasper Reports,我正在开发一个web应用程序,用户可以在上面生成一些数据的报告。我在用JasperReport做。这是我第一次体验JasperReport。所以我一直在关注这个 这里描述的方法可以在服务器上保存报告,但我需要在生成报告后可以下载该报告 非常感谢您的帮助,谢谢。或者: 将文件保存到客户端可直接访问的位置,或 从文件(或其他字节流)流回字节 要执行#1,您必须将其保存在web应用程序中,这在部署战争时是不可能的,如果部署爆发的战争,则需要将其保存在web应用程序中。符号链接和容器游戏可以解决这个问题

我正在开发一个web应用程序,用户可以在上面生成一些数据的报告。我在用JasperReport做。这是我第一次体验JasperReport。所以我一直在关注这个

这里描述的方法可以在服务器上保存报告,但我需要在生成报告后可以下载该报告

非常感谢您的帮助,谢谢。

或者:

  • 将文件保存到客户端可直接访问的位置,或
  • 从文件(或其他字节流)流回字节
  • 要执行#1,您必须将其保存在web应用程序中,这在部署战争时是不可能的,如果部署爆发的战争,则需要将其保存在web应用程序中。符号链接和容器游戏可以解决这个问题

    要执行#2,将其保存在任何位置,并创建一个servlet,该servlet可以获取映射到生成的文件(或任何文件)的请求参数并将其流回——搜索“下载servlet”会提供大量实现

    大多数框架在不编写纯servlet的情况下提供类似的功能。

    或者:

  • 将文件保存到客户端可直接访问的位置,或
  • 从文件(或其他字节流)流回字节
  • 要执行#1,您必须将其保存在web应用程序中,这在部署战争时是不可能的,如果部署爆发的战争,则需要将其保存在web应用程序中。符号链接和容器游戏可以解决这个问题

    要执行#2,将其保存在任何位置,并创建一个servlet,该servlet可以获取映射到生成的文件(或任何文件)的请求参数并将其流回——搜索“下载servlet”会提供大量实现


    大多数框架在不编写纯servlet的情况下提供类似的功能。

    在尝试下载生成的文件时,需要在servlet代码中设置这些功能。可能需要根据具体情况的文件格式更改某些参数

    response.setContentType("APPLICATION/OCTET-STREAM");
    String disHeader = "Attachment;Filename=\"ReportFile.csv" + "\"";
    response.setHeader("Content-Disposition", disHeader);
    

    在尝试下载生成的文件时,需要在servlet代码中设置这些。可能需要根据具体情况的文件格式更改某些参数

    response.setContentType("APPLICATION/OCTET-STREAM");
    String disHeader = "Attachment;Filename=\"ReportFile.csv" + "\"";
    response.setHeader("Content-Disposition", disHeader);
    

    您的代码应该如下所示:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try {
                String path = getServletContext().getRealPath("/reports/report1.jrxml");
                jasReport = JasperCompileManager.compileReport(path);
                System.out.println("Jasper Report : " + jasReport);
    
                Connection con = MyConnFactory.getConnection();
                System.out.println(con);
    
                jasPrint = JasperFillManager.fillReport(jasReport,null,con);//, mapParam, con);
                System.out.println("Jasper Print : " + jasPrint);
    
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    //        JasperExportManager.exportReportToPdfFile(jasPrint, "f:/nn.pdf");
    //            JasperExportManager.exportReportToPdfStream(jasPrint, baos);
    //            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    //            inputStream = bais;
    
                ServletOutputStream sos=resp.getOutputStream();
                JasperExportManager.exportReportToPdfStream(jasPrint, sos);
    
                try {
                    MyConnFactory.getConnection().close();
                    sos.close();
                } catch (SQLException ex) {
                    Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (JRException ex) {
                Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    

    您的代码应该如下所示:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try {
                String path = getServletContext().getRealPath("/reports/report1.jrxml");
                jasReport = JasperCompileManager.compileReport(path);
                System.out.println("Jasper Report : " + jasReport);
    
                Connection con = MyConnFactory.getConnection();
                System.out.println(con);
    
                jasPrint = JasperFillManager.fillReport(jasReport,null,con);//, mapParam, con);
                System.out.println("Jasper Print : " + jasPrint);
    
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    //        JasperExportManager.exportReportToPdfFile(jasPrint, "f:/nn.pdf");
    //            JasperExportManager.exportReportToPdfStream(jasPrint, baos);
    //            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    //            inputStream = bais;
    
                ServletOutputStream sos=resp.getOutputStream();
                JasperExportManager.exportReportToPdfStream(jasPrint, sos);
    
                try {
                    MyConnFactory.getConnection().close();
                    sos.close();
                } catch (SQLException ex) {
                    Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (JRException ex) {
                Logger.getLogger(MyReport.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    

    看看JasperReports服务器。您可以使用它,因为它能够保存和下载报告。或者,您可以了解需要在自己的应用程序中实现什么。您可以使用它,因为它能够保存和下载报告。或者,您也可以了解需要在自己的应用程序中实现什么。