关于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是一个流行的Java库,用于创建高质量的图表,包括折线图、柱状图、饼图、散点图等多种类型。这些图表在数据分析、报告制作、Web应用...
**JFreeChart** 是一个广泛使用的Java库,用于创建高质量的图表,包括折线图、柱状图、饼图、散点图等。...通过理解并掌握这些知识点,开发者可以有效地利用JFreeChart创建出满足需求的数据可视化图表。
以下是详细步骤和相关知识点: 1. 下载JFreeChart和JCommon库 要开始使用JFreeChart,首先需要下载它的最新稳定版本。这一步是通过访问JFreeChart的官方网站来完成的。在官网上找到下载链接,下载安装包,如本例中...
2. **基本用法:** 创建图表通常涉及几个步骤:首先,创建一个`ChartFactory`实例,然后调用相应的工厂方法,如`JFreeChart createLineChart()`或`JFreeChart createBarChart()`,接着设置图表的标题、X轴和Y轴标签...
下面是 jfreechart 的一些重要知识点: 1、jfreechart 的优点: jfreechart 是一个功能强大、灵活的图表库,具有以下优点: * 支持多种类型的图表,包括柱状图、饼图、折线图、面积图等。 * 具有丰富的自定义选项...
**JFreeChart知识点** 1. **JFreeChart简介**:JFreeChart是一个开源的Java库,它提供了一套丰富的API,用于生成高质量的2D图表,可以应用于Java Swing、JavaServer Pages (JSP)、Applets以及其他的Java图形环境中...
标题“解决jfreechart在Linux下无法显示中文”所涉及的知识点主要集中在Java图形库JFreeChart和在Linux操作系统中的字体配置。JFreeChart是一个强大的Java库,用于创建各种图表,如柱状图、饼图、线图等。在Windows...
在将Struts2与JFreeChart整合的过程中,主要涉及以下几个关键知识点: 1. **Struts2架构理解**:Struts2框架提供了Action、Interceptor(拦截器)、Result和ValueStack等核心概念,帮助开发者实现业务逻辑和视图的...
在线培训:JFreeChart.rar 在线培训主要学习以下几个知识点: 1、了解JFreeChart 2、利用JFreeChart生成饼状图 3、利用JFreeChart生成柱状图 4、利用JFreeChart生成折线图 5、利用JFreeChart生成时序图
在"jfreechart+applet三维图形实例"中,我们主要会涉及到以下几个关键知识点: 1. **JFreeChart库的使用**:首先,我们需要了解如何引入JFreeChart库到项目中。这通常通过Maven或Gradle的依赖管理工具完成。然后,...
在Java编程中,使用JFreeChart绘制Gantt图涉及以下几个关键知识点: 1. **JFreeChart库引入**:首先,你需要在你的项目中引入JFreeChart库。这可以通过Maven或Gradle等构建工具完成,或者直接将jar文件添加到项目的...
JFreeChart的基本使用包括介绍类库本身、下载安装、如何开发、定制图表、使用不同数据集绘制图表、将图表导出为各种格式、JFreeChart的包结构介绍等几个方面。下面将详细介绍这些知识点。 1. JFreeChart简介 - ...
在深入研究JFreeChart时,有几个关键知识点值得关注: 1. **图表类型**:了解JFreeChart支持的各类图表,如折线图、柱状图、饼图、散点图、甘特图等,以及它们各自的用途。 2. **数据模型**:理解如何将数据映射到...
本书将带你探索JFreeChart的核心功能,通过实例代码深入解析其使用方法,涵盖以下几个关键知识点: 1. **JFreeChart基础**:介绍JFreeChart的基本架构,包括如何添加依赖到项目中,以及初始化和创建图表对象的步骤...
JFreeChart本身依赖于几个库,包括`jcommon`、`jfreechart`和可能的其他支持库。这些库包含了绘制图表所需的基本组件和数据处理功能。如果缺少任何这些库,或者版本不兼容,图表可能无法正确加载或显示。检查项目中...
根据提供的文档信息,我们可以深入探讨JFreeChart的相关知识点,包括其功能、安装步骤以及使用方法等。 ### JFreeChart概述 #### 1.1 什么是JFreeChart? JFreeChart是一款为Java平台设计的免费图表库。它适用于...