zoukankan      html  css  js  c++  java
  • 关于jfreechart创建web报表图片的流程初解

    注解:以下步骤最好能够结合jfreechart的源代码

    查看了jfreechart组件的源代码后,发现该组件生成Web报表图片的流程大致分为以下两个步骤:

    第一步: 图片文件的创建
     
     1.通过org.jfree.chart包下的ChartFactory工厂类提供的一些静态方法创建一个JFreeChart类型的对象。
     2.通过org.jfree.chart.servlet包下的ServletUtilities类提供的一些静态保存方法保存生成的图片并返回图片的名字。

     下面讲解一下第二步的过程:

     注解:ServletUtilities类的saveChartAsJPEG()方法做了如下操作:

     a.通过调用ServletUtilities类的createTempDir()临时目录创建方法,确保当前应用程序运行环境(如Web服务器)的临时目录(temp)是否存在,若不 

     存在,则创建它。

     b.确定图片文件的前缀部分,若session为空,则标记为即时文件(即访问到该图片后立刻删掉该图片文件),否则标记为临时文件(即等 

     到用户会话失效后才删除生成的临时图片文件)。
     
     注:String prefix = ServletUtilities.tempFilePrefix;//临时文件
                if (session == null) {
                   prefix = ServletUtilities.tempOneTimeFilePrefix;//即时文件
                }

     c.创建一个空图片文件对象:
     File tempFile = File.createTempFile(prefix, ".jpeg",new File(System.getProperty("java.io.tmpdir")));

     d.通过调用org.jfree.chart包下的ChartUtilities类的保存方法将组件画出的图片对象写入刚才生成的空图片文件中:
     ChartUtilities.saveChartAsJPEG(tempFile, chart, width, height, info);
     
     e.如果session不为空,则将该文件注册到org.jfree.chart.servlet包下的ChartDeleter类的集合中,这个类实现了   

     HttpSessionBindingListener监听接口,等到用户会话session失效时,系统将删除所有的临时图片文件,但不知为何
     没有看到效果???????????????
     
     f.返回生成图片文件名称(return tempFile.getName())。


    第二步:图片文件的读取
     
     注解:该组件专门提供了一个访问图片的Servlet,它在org.jfree.chart.servlet包里,名为DisplayChart。
     
     1.必须在Web程序的web.xml中配置这个servlet。具体配置如下:

     <servlet>
          <servlet-name>DisplayChart</servlet-name>
          <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
       </servlet>

     <servlet-mapping>
          <servlet-name>DisplayChart</servlet-name>
          <url-pattern>/servlet/DisplayChart</url-pattern>
       </servlet-mapping>

     其中<servlet-name>和<url-pattern>可以自定义,而<servlet-class>取决于它在你那个组件的位置。

     2.在图片业务逻辑类部分定义图片访问路径,并将其保存到作用域。

     a.String fileUrl = (DisplayChart servlet)配置的 url-pattern + "?filename = " + 第一步返回的图片名字;       
     b.request.setAttribute("fileUrl", fileUrl);

     3.在图片显示页面操作如下:
     <img src="${requestScope.fileUrl}"/>或者<img src="<%=request.getParameter("fileUrl")%>"/> 

  • 相关阅读:
    IE无法打开internet网站已终止操作的解决的方法
    iOS IAP教程
    splice()函数的使用方法
    socket通信简单介绍
    puppet安装和使用
    解惑:NFC手机怎样轻松读取银行卡信息?
    深入浅出谈开窗函数(一)
    TCP/IP协议,HTTP协议
    动态规划0—1背包问题
    栈的链式存储结构及其基本运算的实现
  • 原文地址:https://www.cnblogs.com/yyuuaannllii/p/3775263.html
Copyright © 2011-2022 走看看