现在的位置: 首页 > 综合 > 正文

JFreeChart在Servlet中生成图表并写到浏览器端

2013年08月19日 ⁄ 综合 ⁄ 共 2851字 ⁄ 字号 评论关闭
package my.pack.Util;

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.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

import java.awt.Font;


public class TemperatureServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public TemperatureServlet() {
        super();
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doResponse(request,response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doResponse(request,response);
	}

	private void doResponse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String _time = request.getParameter("time");
		String _data = request.getParameter("data");
		System.out.println("time:" + _time);
		System.out.println("data:" + _data);
		
		
		TimeSeries timeSeries = new TimeSeries("阿蜜果blog访问量统计", Month.class);
		//时间曲线数据集合
		TimeSeriesCollection lineDataset = new TimeSeriesCollection();
		
		//构造数据集合
		timeSeries.add(new Month(1, 2007), 11200);
		timeSeries.add(new Month(2, 2007), 9000);
		timeSeries.add(new Month(3, 2007), 6200);
		timeSeries.add(new Month(4, 2007), 8200);
		timeSeries.add(new Month(5, 2007), 8200);
		timeSeries.add(new Month(6, 2007), 12200);
		timeSeries.add(new Month(7, 2007), 13200);
		timeSeries.add(new Month(8, 2007), 8300);
		timeSeries.add(new Month(9, 2007), 12400);
		timeSeries.add(new Month(10, 2007), 12500);
		timeSeries.add(new Month(11, 2007), 13600);
		timeSeries.add(new Month(12, 2007), 2500);
		
		lineDataset.addSeries(timeSeries);
		JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);
	
		//设置子标题
		TextTitle subtitle = new TextTitle("2007年度", new Font("黑体", Font.BOLD, 12));
		chart.addSubtitle(subtitle);
		//设置主标题
		chart.setTitle(new TextTitle("阿蜜果blog访问量统计", new Font("隶书", Font.ITALIC, 15)));
		chart.setAntiAlias(true);
		
		
		/*字体设置(避免中文乱码)*/
        XYPlot plot = (XYPlot) chart.getPlot();
        ValueAxis valueAxis = plot.getDomainAxis();
        // 设置x轴上面的字体
        valueAxis.setTickLabelFont(new Font("隶书", Font.ITALIC, 12));
        // 设置X轴的标题文字
        valueAxis.setLabelFont(new Font("隶书", Font.ITALIC, 12));
        NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
        // 设置y轴上的字体
        numberAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13));
        // 设置y轴上的标题字体
        numberAxis.setLabelFont(new Font("宋体", Font.PLAIN, 13));
        // 设置底部的字体
        chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
        
		
		//将图表以数据流的方式返回给客户端 
	    ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart,500, 300); 
	}
}

抱歉!评论已关闭.