1.下载JFreeChart框架
http://www.jfree.org/jfreechart/
这里下载的是最新版本:JFreeChart 1.0.17
2.使用MyEclipse创建一个web项目,名称为jfreechart,导入第1步下载好的jfreechart并将其中的:jfreechart-1.0.17.jar和jcommon-1.0.21.jar 两个jar包,如下图所示:
3.创建处理绘制图表请求的servlet:JFreeChartServlet ,源码如下:
package org.xjh.jfreechart;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartUtilities;
import org.xjh.web.chart.BarChartTest;
import org.xjh.web.chart.LineChartTest;
import org.xjh.web.chart.PieChartTest;
import org.xjh.web.chart.RingChartTest;
/**
* 处理绘制图表请求
*
* @author xjh
*
*/
public class JFreeChartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//根据客户端请求的图表类型,进行相应的图表绘制
String chartType = request.getParameter("chartType");
//如果没有提供图表类型
if(chartType == null || "".equals(chartType.trim())){
//提示错误
request.setAttribute("message", "请提供图表类型!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}
//设置默认图表宽高
int width = 600;
int height = 400;
//根据客户端传递过来的宽高设置图表的宽高
try {
width = Integer.parseInt(request.getParameter("width"));
height = Integer.parseInt(request.getParameter("height"));
} catch (Exception e) {
e.printStackTrace();
}
//设置响应的内容类型为图片形式
response.setContentType("image/png");
//根据客户端请求的图表类型绘制相应的图表
if ("bar".equals(chartType)) { //柱状图
BarChartTest t = new BarChartTest();
ChartUtilities.writeChartAsPNG(response.getOutputStream(),
t.createBarChart2D(), width, height, null); //将图表转成图片形式
} else if ("pie".equals(chartType)) { //饼状图
PieChartTest t = new PieChartTest();
ChartUtilities.writeChartAsPNG(response.getOutputStream(),
t.createPieChart(), width, height, null);
} else if ("line".equals(chartType)) { //线条图
LineChartTest t = new LineChartTest();
ChartUtilities.writeChartAsPNG(response.getOutputStream(),
t.createLineChart(), width, height, null);
} else if ("ring".equals(chartType)) { //环状图
RingChartTest t = new RingChartTest();
ChartUtilities.writeChartAsPNG(response.getOutputStream(),
t.createRingChart(), width, height, null);
}
}
}
4.分别创建用于绘制“柱状图”、“饼状图”、“线条图”、“环状图”的测试类。
4.1 绘制柱状图的类的源码
package org.xjh.web.chart;
import java.awt.Color;
import java.awt.GradientPaint;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.categ