1) Model
index.jsp
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@page import="org.jfree.chart.ChartUtilities"%>
<%@page import="org.jfree.data.time.TimeSeriesCollection"%>
<%@page import="org.jfree.data.time.TimeSeries"%>
<%@page import="org.jfree.data.time.Year"%>
<%@page import="org.jfree.chart.plot.PlotOrientation"%>
<%@page import="org.jfree.chart.JFreeChart"%>
<%@page import="org.jfree.chart.ChartFactory"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JFreeChart Test</title>
<%
String context = request.getContextPath();
TimeSeries t1 = new TimeSeries("Executions", "Year", "Count", Year.class);
t1.add(new Year(1976), new Integer(0));
t1.add(new Year(1977), new Integer(1));
t1.add(new Year(1978), new Integer(0));
t1.add(new Year(1979), new Integer(2));
t1.add(new Year(1980), new Integer(0));
t1.add(new Year(1981), new Integer(1));
t1.add(new Year(1982), new Integer(2));
t1.add(new Year(1983), new Integer(5));
t1.add(new Year(1984), new Integer(21));
t1.add(new Year(1985), new Integer(18));
t1.add(new Year(1986), new Integer(18));
t1.add(new Year(1987), new Integer(25));
t1.add(new Year(1988), new Integer(11));
t1.add(new Year(1989), new Integer(16));
t1.add(new Year(1990), new Integer(23));
t1.add(new Year(1991), new Integer(14));
t1.add(new Year(1992), new Integer(31));
t1.add(new Year(1993), new Integer(38));
t1.add(new Year(1994), new Integer(31));
t1.add(new Year(1995), new Integer(56));
t1.add(new Year(1996), new Integer(45));
t1.add(new Year(1997), new Integer(74));
t1.add(new Year(1998), new Integer(68));
t1.add(new Year(1999), new Integer(98));
t1.add(new Year(2000), new Integer(85));
t1.add(new Year(2001), new Integer(66));
t1.add(new Year(2002), new Integer(71));
t1.add(new Year(2003), new Integer(65));
t1.add(new Year(2004), new Integer(59));
t1.add(new Year(2005), new Integer(60));
TimeSeriesCollection tsc = new TimeSeriesCollection(t1);
JFreeChart chart
= ChartFactory.createXYBarChart(
"Month VS Revenue",
"Month",
true,
"Revenue",
tsc,
PlotOrientation.VERTICAL,
true,
true,
true);
int height = 300;
int width = 400;
String filename = ServletUtilities.saveChartAsJPEG(chart, width, height, null, session);
%>
</head>
<body>
<table>
<tr>
<th style="align : center">
JFreeChart Test
</th>
</tr>
<tr>
<td style="align : center">
<img alt="test chart" src="<%=context %>/chart?filename=<%=filename %>">
</td>
</tr>
</table>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>jfreechart-test</display-name> <servlet> <servlet-name>jfreechart</servlet-name> <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> </servlet> <servlet-mapping> <servlet-name>jfreechart</servlet-name> <url-pattern>/chart</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2) 运行结果
3) org.jfree.chart.servlet 包解析
- ServletUtilities
将Chart保存为JPEG或者PNG格式的文件,并返回对应的文件名。
文件路径为System.getProperty("java.io.tmpdir")
文件名前缀为ServletUtilities.tempFilePrefix(Session级)或者ServletUtilities.tempOneTimeFilePrefix
--Comment:是否为Session级由传递给对应方法的Session对象是否为null决定,null则为非Session级
如果Chart为Session级的则将其保存后的文件名添加到Session中的ChartDeleter.chartNames中,
以便在Session失效时被清除。
- ChartDeleter
implements HttpSessionBindingListener, Serializable
HttpSessionBindingListener :
实现此接口的类的对象在绑定到HttpSession或者从HttpSession中移除时被通知执行该对象的valueBound和valueUnbound方法
ChartDeleter:
绑定到HttpSession时:不做任何操作
从HttpSession中移除(HttpSession注销或者过期)时:删除Session级别的Chart临时文件
- DisplayChart
将filename对应的Chart返回给Client,如果该Chart为onetime类型则在返回之后将其删除
4) 参考资料
JFreeChart 源码
5) 相关学习资料
JFreeChart Demo (附件jfreechart-1.0.13-demo.jar)
JFreeChart Demo Source (附件jfreechartdemo.rar)