Struts2整合jasperreport html展示图片不显示的解决办法

最近用ireport5.0做了一个柱状图的报表,用ireport预览功能显示没问题。

但是用Struts2集成jasperreport(struts2仅仅用它的跳转功能),展示成html格式的时候,柱状图显示不出来。

在网上查了很多资料,做了一些总结。

解决办法如下:

1.在web.xml中添加

<!--JasperReport解决HTML显示图片不出来的问题-->
    <servlet>  
      <servlet-name>ImageServlet</servlet-name>  
      <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>  
    </servlet>  
 
    <servlet-mapping>  
          <servlet-name>ImageServlet</servlet-name>  
          <url-pattern>/image.servlet</url-pattern>  
    </servlet-mapping>

2.在Struts2的Action中,实例化jasperPrint对象,并转向到显示界面。(由于需要jsp页面的分页功能)

if (jasperPrint == null) {
               JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(reprortList);
               try {
                jasperPrint =  JasperFillManager.fillReport(reportPath,reportPams,ds);
            } catch (JRException e) {
                e.printStackTrace();
            }
        }
        
        request.setAttribute("jp", jasperPrint);

       request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

3.在jsp页面中指定,图片的路径

<%  //用request访问页面,
    int pageIndex = 0;   
    int lastPageIndex = 0;
    JasperPrint jasperPrint=null;
    jasperPrint = (JasperPrint)request.getAttribute("jp");

.。。。。。。。。

%>

<%   
     JRHtmlExporter exporter = new JRHtmlExporter();
     
     //设置分页
     exporter.setParameter(JRExporterParameter.PAGE_INDEX,Integer.valueOf(pageIndex));
     //设置导出对象
     exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
     //设置图片请求URI    
     String imageServletUrl = "/image.servlet?image=";
     exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);
     
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);//输出方式     
     exporter.exportReport();
     out.flush();   
 %>

启动jboss,柱状图的图片能显示出来了。

但有几个问题,仍不明白。

我最早的思路是,把柱状图生成的图片保存到服务器端目录中,然后页面显示的时候,从服务器端取出图片。

String imageDIR = request.getSession().getServletContext().getRealPath("images/reportImages");
exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,imageDIR);//设置图片文件存放路径,此路径为服务器上的绝对路径 

//设置图片请求URI

String imageURI = request.getContextPath() + "/images/reportImages/";
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI); 

图片能保存到服务器段,但是显示页面无法找到图片,并且Struts2报错,就是Struts2试图用Action去打开图片的路径。

如果这种思路正确,从服务器段访问图片的路径该怎么设置?


另外一个

在web.xml中配置的net.sf.jasperreports.j2ee.servlets.ImageServlet,这个servlet用来指定报表显示界面中的图片的访问路径的

在web目录中找不到图片的,图片肯定是写在内存中传递的,具体是怎么实现的



你可能感兴趣的:(struts,报表,jasperReport)