JFreeChart -- Web应用

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中移除时被通知执行该对象的valueBoundvalueUnbound方法

ChartDeleter:

绑定到HttpSession时:不做任何操作

从HttpSession中移除(HttpSession注销或者过期)时:删除Session级别的Chart临时文件

  • DisplayChart
extends HttpServlet  

filename对应的Chart返回给Client,如果该Chart为onetime类型则在返回之后将其删除

 

4) 参考资料

 

JFreeChart 源码

 

5) 相关学习资料

 

JFreeChart Demo (附件jfreechart-1.0.13-demo.jar)

 

JFreeChart Demo Source (附件jfreechartdemo.rar)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值