`
wangrusheng5200
  • 浏览: 302509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于jfreechart的几个知识点

阅读更多

关于jfreechart的几个知识点

1、文件生成
 系统临时目录的获取

System.getProperty("java.io.tmpdir")

 
 随机文件名产生

//第一个参数为前缀,第二个为后缀
File.createTempFile("jfreechart", "jpeg");

 
2、图片的自动删除

参考:

http://hi.baidu.com/qingcao_xiaohei/blog/item/aaeebd518599f410377abe1a.html

http://hi.baidu.com/paulau/blog/item/760d9634e2fbd849241f1468.html

主要是

Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。

3、jfreechart源码

DisplayChart.java

package org.jfree.chart.servlet;

import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class DisplayChart extends HttpServlet
{
  public void init()
    throws ServletException
  {
  }

  public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    HttpSession session = request.getSession();
    String filename = request.getParameter("filename");
    if (filename == null) {
      throw new ServletException("Parameter 'filename' must be supplied");
    }

    filename = ServletUtilities.searchReplace(filename, "..", "");

    File file = new File(System.getProperty("java.io.tmpdir"), filename);
    if (!(file.exists())) {
      throw new ServletException("File '" + file.getAbsolutePath() + "' does not exist");
    }

    boolean isChartInUserList = false;
    ChartDeleter chartDeleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");

    if (chartDeleter != null) {
      isChartInUserList = chartDeleter.isChartAvailable(filename);
    }

    boolean isChartPublic = false;
    if ((filename.length() >= 6) && 
      (filename.substring(0, 6).equals("public"))) {
      isChartPublic = true;
    }

    boolean isOneTimeChart = false;
    if (filename.startsWith(ServletUtilities.getTempOneTimeFilePrefix())) {
      isOneTimeChart = true;
    }

    if ((isChartInUserList) || (isChartPublic) || (isOneTimeChart))
    {
      ServletUtilities.sendTempFile(file, response);
      if (isOneTimeChart)
        file.delete();
    }
    else
    {
      throw new ServletException("Chart image not found");
    }
  }
}

 ServletUtilities.java

package org.jfree.chart.servlet;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;

public class ServletUtilities
{
  private static String tempFilePrefix = "jfreechart-";
  private static String tempOneTimeFilePrefix = "jfreechart-onetime-";

  public static String getTempFilePrefix()
  {
    return tempFilePrefix;
  }

  public static void setTempFilePrefix(String prefix)
  {
    if (prefix == null)
      throw new IllegalArgumentException("Null 'prefix' argument.");

    tempFilePrefix = prefix;
  }

  public static String getTempOneTimeFilePrefix()
  {
    return tempOneTimeFilePrefix;
  }

  public static void setTempOneTimeFilePrefix(String prefix)
  {
    if (prefix == null)
      throw new IllegalArgumentException("Null 'prefix' argument.");

    tempOneTimeFilePrefix = prefix;
  }

  public static String saveChartAsPNG(JFreeChart chart, int width, int height, HttpSession session)
    throws IOException
  {
    return saveChartAsPNG(chart, width, height, null, session);
  }

  public static String saveChartAsPNG(JFreeChart chart, int width, int height, ChartRenderingInfo info, HttpSession session)
    throws IOException
  {
    if (chart == null)
      throw new IllegalArgumentException("Null 'chart' argument.");

    createTempDir();
    String prefix = tempFilePrefix;
    if (session == null)
      prefix = tempOneTimeFilePrefix;

    File tempFile = File.createTempFile(prefix, ".png", new File(System.getProperty("java.io.tmpdir")));

    ChartUtilities.saveChartAsPNG(tempFile, chart, width, height, info);
    if (session != null)
      registerChartForDeletion(tempFile, session);

    return tempFile.getName();
  }

  public static String saveChartAsJPEG(JFreeChart chart, int width, int height, HttpSession session)
    throws IOException
  {
    return saveChartAsJPEG(chart, width, height, null, session);
  }

  public static String saveChartAsJPEG(JFreeChart chart, int width, int height, ChartRenderingInfo info, HttpSession session)
    throws IOException
  {
    if (chart == null) {
      throw new IllegalArgumentException("Null 'chart' argument.");
    }

    createTempDir();
    String prefix = tempFilePrefix;
    if (session == null)
      prefix = tempOneTimeFilePrefix;

    File tempFile = File.createTempFile(prefix, ".jpeg", new File(System.getProperty("java.io.tmpdir")));

    ChartUtilities.saveChartAsJPEG(tempFile, chart, width, height, info);
    if (session != null)
      registerChartForDeletion(tempFile, session);

    return tempFile.getName();
  }

  protected static void createTempDir()
  {
    String tempDirName = System.getProperty("java.io.tmpdir");
    if (tempDirName == null) {
      throw new RuntimeException("Temporary directory system property (java.io.tmpdir) is null.");
    }

    File tempDir = new File(tempDirName);
    if (!(tempDir.exists()))
      tempDir.mkdirs();
  }

  protected static void registerChartForDeletion(File tempFile, HttpSession session)
  {
    if (session != null) {
      ChartDeleter chartDeleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");

      if (chartDeleter == null) {
        chartDeleter = new ChartDeleter();
        session.setAttribute("JFreeChart_Deleter", chartDeleter);
      }
      chartDeleter.addChart(tempFile.getName());
    }
    else {
      System.out.println("Session is null - chart will not be deleted");
    }
  }

  public static void sendTempFile(String filename, HttpServletResponse response)
    throws IOException
  {
    File file = new File(System.getProperty("java.io.tmpdir"), filename);
    sendTempFile(file, response);
  }

  public static void sendTempFile(File file, HttpServletResponse response)
    throws IOException
  {
    String mimeType = null;
    String filename = file.getName();
    if (filename.length() > 5)
      if (filename.substring(filename.length() - 5, filename.length()).equals(".jpeg"))
      {
        mimeType = "image/jpeg";
      }
      else if (filename.substring(filename.length() - 4, filename.length()).equals(".png"))
      {
        mimeType = "image/png";
      }

    sendTempFile(file, response, mimeType);
  }

  public static void sendTempFile(File file, HttpServletResponse response, String mimeType)
    throws IOException
  {
    if (file.exists()) {
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

      if (mimeType != null)
        response.setHeader("Content-Type", mimeType);

      response.setHeader("Content-Length", String.valueOf(file.length()));
      SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

      sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
      response.setHeader("Last-Modified", sdf.format(new Date(file.lastModified())));

      BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());

      byte[] input = new byte[1024];
      boolean eof = false;
      while (!(eof)) {
        int length = bis.read(input);
        if (length == -1) {
          eof = true;
        }
        else
          bos.write(input, 0, length);
      }

      bos.flush();
      bis.close();
      bos.close();
    }
    else {
      throw new FileNotFoundException(file.getAbsolutePath());
    }
  }

  public static String searchReplace(String inputString, String searchString, String replaceString)
  {
    int i = inputString.indexOf(searchString);
    if (i == -1) {
      return inputString;
    }

    String r = "";
    r = r + inputString.substring(0, i) + replaceString;
    if (i + searchString.length() < inputString.length()) {
      r = r + searchReplace(inputString.substring(i + searchString.length()), searchString, replaceString);
    }

    return r;
  }
}

 

ChartDeleter.java

 

package org.jfree.chart.servlet;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class ChartDeleter
  implements HttpSessionBindingListener
{
  private List chartNames = new ArrayList();

  public void addChart(String filename)
  {
    this.chartNames.add(filename);
  }

  public boolean isChartAvailable(String filename)
  {
    return this.chartNames.contains(filename);
  }

  public void valueBound(HttpSessionBindingEvent event)
  {
  }

  public void valueUnbound(HttpSessionBindingEvent event)
  {
    Iterator iter = this.chartNames.listIterator();
    while (iter.hasNext()) {
      String filename = (String)iter.next();
      File file = new File(System.getProperty("java.io.tmpdir"), filename);

      if (file.exists())
        file.delete();
    }
  }
}

 

分享到:
评论

相关推荐

    jfreechart几个例子

    标题“jfreechart几个例子”指向的是一个关于JFreeChart库的示例应用。JFreeChart是一个流行的Java库,用于创建高质量的图表,包括折线图、柱状图、饼图、散点图等多种类型。这些图表在数据分析、报告制作、Web应用...

    JFreeChart

    **JFreeChart** 是一个广泛使用的Java库,用于创建高质量的图表,包括折线图、柱状图、饼图、散点图等。...通过理解并掌握这些知识点,开发者可以有效地利用JFreeChart创建出满足需求的数据可视化图表。

    如何在eclipse中配置JFreeChart

    以下是详细步骤和相关知识点: 1. 下载JFreeChart和JCommon库 要开始使用JFreeChart,首先需要下载它的最新稳定版本。这一步是通过访问JFreeChart的官方网站来完成的。在官网上找到下载链接,下载安装包,如本例中...

    jfreechart demo2

    2. **基本用法:** 创建图表通常涉及几个步骤:首先,创建一个`ChartFactory`实例,然后调用相应的工厂方法,如`JFreeChart createLineChart()`或`JFreeChart createBarChart()`,接着设置图表的标题、X轴和Y轴标签...

    jfreechart

    下面是 jfreechart 的一些重要知识点: 1、jfreechart 的优点: jfreechart 是一个功能强大、灵活的图表库,具有以下优点: * 支持多种类型的图表,包括柱状图、饼图、折线图、面积图等。 * 具有丰富的自定义选项...

    转:报表插件JFreeChart的使用

    **JFreeChart知识点** 1. **JFreeChart简介**:JFreeChart是一个开源的Java库,它提供了一套丰富的API,用于生成高质量的2D图表,可以应用于Java Swing、JavaServer Pages (JSP)、Applets以及其他的Java图形环境中...

    解决jfreechart在linux下无法显示中文

    标题“解决jfreechart在Linux下无法显示中文”所涉及的知识点主要集中在Java图形库JFreeChart和在Linux操作系统中的字体配置。JFreeChart是一个强大的Java库,用于创建各种图表,如柱状图、饼图、线图等。在Windows...

    struts2与jfreechart整合

    在将Struts2与JFreeChart整合的过程中,主要涉及以下几个关键知识点: 1. **Struts2架构理解**:Struts2框架提供了Action、Interceptor(拦截器)、Result和ValueStack等核心概念,帮助开发者实现业务逻辑和视图的...

    在线培训:JFreeChart

    在线培训:JFreeChart.rar 在线培训主要学习以下几个知识点: 1、了解JFreeChart 2、利用JFreeChart生成饼状图 3、利用JFreeChart生成柱状图 4、利用JFreeChart生成折线图 5、利用JFreeChart生成时序图

    jfreechart+applet三维图形实例

    在"jfreechart+applet三维图形实例"中,我们主要会涉及到以下几个关键知识点: 1. **JFreeChart库的使用**:首先,我们需要了解如何引入JFreeChart库到项目中。这通常通过Maven或Gradle的依赖管理工具完成。然后,...

    jfreeChart gantt图

    在Java编程中,使用JFreeChart绘制Gantt图涉及以下几个关键知识点: 1. **JFreeChart库引入**:首先,你需要在你的项目中引入JFreeChart库。这可以通过Maven或Gradle等构建工具完成,或者直接将jar文件添加到项目的...

    jfreechart资料

    JFreeChart的基本使用包括介绍类库本身、下载安装、如何开发、定制图表、使用不同数据集绘制图表、将图表导出为各种格式、JFreeChart的包结构介绍等几个方面。下面将详细介绍这些知识点。 1. JFreeChart简介 - ...

    jfreechart-1.0.8-demo.jnlp

    在深入研究JFreeChart时,有几个关键知识点值得关注: 1. **图表类型**:了解JFreeChart支持的各类图表,如折线图、柱状图、饼图、散点图、甘特图等,以及它们各自的用途。 2. **数据模型**:理解如何将数据映射到...

    JFreeChart开发全攻略

    本书将带你探索JFreeChart的核心功能,通过实例代码深入解析其使用方法,涵盖以下几个关键知识点: 1. **JFreeChart基础**:介绍JFreeChart的基本架构,包括如何添加依赖到项目中,以及初始化和创建图表对象的步骤...

    struts2结合jfreechart框架出现图形所需的包

    JFreeChart本身依赖于几个库,包括`jcommon`、`jfreechart`和可能的其他支持库。这些库包含了绘制图表所需的基本组件和数据处理功能。如果缺少任何这些库,或者版本不兼容,图表可能无法正确加载或显示。检查项目中...

    jfreechart-1.0.0-pre2-install.pdf

    根据提供的文档信息,我们可以深入探讨JFreeChart的相关知识点,包括其功能、安装步骤以及使用方法等。 ### JFreeChart概述 #### 1.1 什么是JFreeChart? JFreeChart是一款为Java平台设计的免费图表库。它适用于...

Global site tag (gtag.js) - Google Analytics