使用 jfreechart 生成 曲線、柱狀圖、餅狀圖、分佈圖 展現到JSP

雖然如今JS作報表和圖形展現已經很是廣泛和漂亮了,可是不能忽略有jfreechart 這樣一種東西!html

這些翻閱資料,在看之前寫的示例時發現了關於jfreechart 的簡單示例,無論怎樣發上來分享一下!java

 

 

這個示例使用JSP和Servlet作後臺和前臺展現,下面有源代碼能夠直接運行web

生產線型趨勢圖:sql

 

Java代碼 複製代碼  收藏代碼
  1. package com.xidian.servlet;   
  2. import java.awt.Color;   
  3. import java.awt.Font;   
  4. import java.io.*;   
  5. import java.text.SimpleDateFormat;   
  6. import javax.servlet.ServletException;   
  7. import javax.servlet.http.HttpServlet;   
  8. import javax.servlet.http.HttpServletRequest;   
  9. import javax.servlet.http.HttpServletResponse;   
  10. import org.jfree.chart.*;   
  11. import org.jfree.chart.axis.DateAxis;   
  12. import org.jfree.chart.axis.ValueAxis;   
  13. import org.jfree.chart.plot.XYPlot;   
  14. import org.jfree.chart.renderer.xy.XYItemRenderer;   
  15. import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;   
  16. import org.jfree.chart.title.TextTitle;   
  17. import org.jfree.data.time.Day;   
  18. import org.jfree.data.time.TimeSeries;   
  19. import org.jfree.data.time.TimeSeriesCollection;   
  20. import org.jfree.data.xy.XYDataset;   
  21. /**  
  22.  * 生產線型趨勢圖  
  23.  * @說明   
  24.  * @author cuisuqiang  
  25.  * @version 1.0  
  26.  * @since  
  27.  */  
  28. @SuppressWarnings("serial")   
  29. public class LineServlet extends HttpServlet {   
  30.     @SuppressWarnings("deprecation")   
  31.     @Override  
  32.     protected void service(HttpServletRequest request,   
  33.             HttpServletResponse response) throws ServletException, IOException {   
  34.         response.setContentType("text/html");   
  35.         // 在Mysql中使用 select   
  36.         // year(accessdate),month(accessdate),day(accessdate),count(*)   
  37.         // 其中accessdate 是一個date類型的時間   
  38.         // 時間序列對象集合   
  39.         TimeSeriesCollection chartTime = new TimeSeriesCollection();   
  40.         // 時間序列對象,第1個參數表示時間序列的名字,第2個參數是時間類型,這裏爲天   
  41.         // 該對象用於保存前count天天天的訪問次數   
  42.         TimeSeries timeSeries = new TimeSeries("日訪問", Day.class);   
  43.         // 爲了演示,直接拼裝數據   
  44.         // Day的組裝格式是day-month-year 訪問次數   
  45.         timeSeries.add(new Day(112010), 50);   
  46.         timeSeries.add(new Day(212010), 47);   
  47.         timeSeries.add(new Day(312010), 82);   
  48.         timeSeries.add(new Day(412010), 95);   
  49.         timeSeries.add(new Day(512010), 104);   
  50.         timeSeries.add(new Day(612010), 425);   
  51.         chartTime.addSeries(timeSeries);   
  52.         XYDataset date = chartTime;   
  53.         try {   
  54.             // 使用ChartFactory來建立時間序列的圖表對象   
  55.             JFreeChart chart = ChartFactory.createTimeSeriesChart(   
  56.                     "網站天天訪問統計"// 圖形標題   
  57.                     "日期"// X軸說明   
  58.                     "訪問量"// Y軸說明   
  59.                     date, // 數據   
  60.                     true// 是否建立圖例   
  61.                     true// 是否生成Tooltips   
  62.                     false // 是否生產URL連接   
  63.             );   
  64.             // 設置整個圖片的背景色   
  65.             chart.setBackgroundPaint(Color.PINK);   
  66.             // 設置圖片有邊框   
  67.             chart.setBorderVisible(true);   
  68.             // 得到圖表區域對象   
  69.             XYPlot xyPlot = (XYPlot) chart.getPlot();   
  70.             // 設置報表區域的背景色   
  71.             xyPlot.setBackgroundPaint(Color.lightGray);   
  72.             // 設置橫 縱座標網格顏色   
  73.             xyPlot.setDomainGridlinePaint(Color.GREEN);   
  74.             xyPlot.setRangeGridlinePaint(Color.GREEN);   
  75.             // 設置橫、縱座標交叉線是否顯示   
  76.             xyPlot.setDomainCrosshairVisible(true);   
  77.             xyPlot.setRangeCrosshairVisible(true);   
  78.             // 得到數據點(X,Y)的render,負責描繪數據點   
  79.             XYItemRenderer xyItemRenderer = xyPlot.getRenderer();   
  80.             if (xyItemRenderer instanceof XYLineAndShapeRenderer) {   
  81.                 XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer) xyItemRenderer;   
  82.                 xyLineAndShapeRenderer.setShapesVisible(true); // 數據點可見   
  83.                 xyLineAndShapeRenderer.setShapesFilled(true); // 數據點是實心點   
  84.                 xyLineAndShapeRenderer.setSeriesFillPaint(0, Color.RED); // 數據點填充爲藍色   
  85.                 xyLineAndShapeRenderer.setUseFillPaint(true);// 將設置好的屬性應用到render上   
  86.             }   
  87.             // 配置如下內容方可解決亂碼問題   
  88.             // 配置字體   
  89.             Font xfont = new Font("宋體", Font.PLAIN, 12);    // X軸   
  90.             Font yfont = new Font("宋體", Font.PLAIN, 12);    // Y軸   
  91.             Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部   
  92.             Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題   
  93.             // 圖片標題   
  94.             chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
  95.             // 底部   
  96.             chart.getLegend().setItemFont(kfont);              
  97.             // X 軸   
  98.             ValueAxis domainAxis = xyPlot.getDomainAxis();   
  99.             domainAxis.setLabelFont(xfont);// 軸標題   
  100.             domainAxis.setTickLabelFont(xfont);// 軸數值   
  101.             domainAxis.setTickLabelPaint(Color.BLUE); // 字體顏色   
  102.             // Y 軸   
  103.             ValueAxis rangeAxis = xyPlot.getRangeAxis();   
  104.             rangeAxis.setLabelFont(yfont);   
  105.             rangeAxis.setLabelPaint(Color.BLUE); // 字體顏色   
  106.             rangeAxis.setTickLabelFont(yfont);   
  107.             // 定義座標軸上日期顯示的格式   
  108.             DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();   
  109.             // 設置日期格式   
  110.             dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));   
  111.             // 向客戶端輸出生成的圖片   
  112.             ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,   
  113.                     chart, 500300null);   
  114.         } catch (Exception e) {   
  115.             e.printStackTrace();   
  116.         }   
  117.     }   
  118. }  
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.*;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
/**
 * 生產線型趨勢圖
 * @說明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class LineServlet extends HttpServlet {
	@SuppressWarnings("deprecation")
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		// 在Mysql中使用 select
		// year(accessdate),month(accessdate),day(accessdate),count(*)
		// 其中accessdate 是一個date類型的時間
		// 時間序列對象集合
		TimeSeriesCollection chartTime = new TimeSeriesCollection();
		// 時間序列對象,第1個參數表示時間序列的名字,第2個參數是時間類型,這裏爲天
		// 該對象用於保存前count天天天的訪問次數
		TimeSeries timeSeries = new TimeSeries("日訪問", Day.class);
		// 爲了演示,直接拼裝數據
		// Day的組裝格式是day-month-year 訪問次數
		timeSeries.add(new Day(1, 1, 2010), 50);
		timeSeries.add(new Day(2, 1, 2010), 47);
		timeSeries.add(new Day(3, 1, 2010), 82);
		timeSeries.add(new Day(4, 1, 2010), 95);
		timeSeries.add(new Day(5, 1, 2010), 104);
		timeSeries.add(new Day(6, 1, 2010), 425);
		chartTime.addSeries(timeSeries);
		XYDataset date = chartTime;
		try {
			// 使用ChartFactory來建立時間序列的圖表對象
			JFreeChart chart = ChartFactory.createTimeSeriesChart(
					"網站天天訪問統計", // 圖形標題
					"日期", // X軸說明
					"訪問量", // Y軸說明
					date, // 數據
					true, // 是否建立圖例
					true, // 是否生成Tooltips
					false // 是否生產URL連接
			);
			// 設置整個圖片的背景色
			chart.setBackgroundPaint(Color.PINK);
			// 設置圖片有邊框
			chart.setBorderVisible(true);
			// 得到圖表區域對象
			XYPlot xyPlot = (XYPlot) chart.getPlot();
			// 設置報表區域的背景色
			xyPlot.setBackgroundPaint(Color.lightGray);
			// 設置橫 縱座標網格顏色
			xyPlot.setDomainGridlinePaint(Color.GREEN);
			xyPlot.setRangeGridlinePaint(Color.GREEN);
			// 設置橫、縱座標交叉線是否顯示
			xyPlot.setDomainCrosshairVisible(true);
			xyPlot.setRangeCrosshairVisible(true);
			// 得到數據點(X,Y)的render,負責描繪數據點
			XYItemRenderer xyItemRenderer = xyPlot.getRenderer();
			if (xyItemRenderer instanceof XYLineAndShapeRenderer) {
				XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer) xyItemRenderer;
				xyLineAndShapeRenderer.setShapesVisible(true); // 數據點可見
				xyLineAndShapeRenderer.setShapesFilled(true); // 數據點是實心點
				xyLineAndShapeRenderer.setSeriesFillPaint(0, Color.RED); // 數據點填充爲藍色
				xyLineAndShapeRenderer.setUseFillPaint(true);// 將設置好的屬性應用到render上
			}
			// 配置如下內容方可解決亂碼問題
			// 配置字體
			Font xfont = new Font("宋體", Font.PLAIN, 12);    // X軸
			Font yfont = new Font("宋體", Font.PLAIN, 12);    // Y軸
			Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部
			Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題
			// 圖片標題
			chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
			// 底部
			chart.getLegend().setItemFont(kfont);			
			// X 軸
			ValueAxis domainAxis = xyPlot.getDomainAxis();
			domainAxis.setLabelFont(xfont);// 軸標題
			domainAxis.setTickLabelFont(xfont);// 軸數值
			domainAxis.setTickLabelPaint(Color.BLUE); // 字體顏色
			// Y 軸
			ValueAxis rangeAxis = xyPlot.getRangeAxis();
			rangeAxis.setLabelFont(yfont);
			rangeAxis.setLabelPaint(Color.BLUE); // 字體顏色
			rangeAxis.setTickLabelFont(yfont);
			// 定義座標軸上日期顯示的格式
			DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
			// 設置日期格式
			dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));
			// 向客戶端輸出生成的圖片
			ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
					chart, 500, 300, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

生產柱狀圖:數據庫

 

Java代碼 複製代碼  收藏代碼
  1. package com.xidian.servlet;   
  2. import java.awt.Color;   
  3. import java.awt.Font;   
  4. import java.io.IOException;   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import org.jfree.chart.ChartFactory;   
  10. import org.jfree.chart.ChartUtilities;   
  11. import org.jfree.chart.JFreeChart;   
  12. import org.jfree.chart.axis.CategoryAxis;   
  13. import org.jfree.chart.axis.NumberAxis;   
  14. import org.jfree.chart.plot.CategoryPlot;   
  15. import org.jfree.chart.plot.PlotOrientation;   
  16. import org.jfree.chart.renderer.category.BarRenderer;   
  17. import org.jfree.chart.title.TextTitle;   
  18. import org.jfree.data.category.DefaultCategoryDataset;   
  19.   
  20. /**  
  21.  * 生產柱狀圖  
  22.  * @說明   
  23.  * @author cuisuqiang  
  24.  * @version 1.0  
  25.  * @since  
  26.  */  
  27. @SuppressWarnings("serial")   
  28. public class PillarServlet extends HttpServlet {   
  29.     @Override  
  30.     protected void service(HttpServletRequest request,   
  31.             HttpServletResponse response) throws ServletException, IOException {   
  32.         response.setContentType("text/html");   
  33.         // 使用普通數據集   
  34.         DefaultCategoryDataset chartDate = new DefaultCategoryDataset();   
  35.         // 增長測試數據,第一個參數是訪問量,最後一個是時間,中間是顯示用不考慮   
  36.         chartDate.addValue(55"訪問量""2010-01");   
  37.         chartDate.addValue(65"訪問量""2010-02");   
  38.         chartDate.addValue(59"訪問量""2010-03");   
  39.         chartDate.addValue(156"訪問量""2010-04");   
  40.         chartDate.addValue(452"訪問量""2010-05");   
  41.         chartDate.addValue(359"訪問量""2010-06");   
  42.         try {   
  43.             // 從數據庫中得到數據集   
  44.             DefaultCategoryDataset data = chartDate;   
  45.                
  46.             // 使用ChartFactory建立3D柱狀圖,不想使用3D,直接使用createBarChart   
  47.             JFreeChart chart = ChartFactory.createBarChart3D(   
  48.                     "網站月訪問量統計"// 圖表標題   
  49.                     "時間"// 目錄軸的顯示標籤   
  50.                     "訪問量"// 數值軸的顯示標籤   
  51.                     data, // 數據集   
  52.                     PlotOrientation.VERTICAL, // 圖表方向,此處爲垂直方向   
  53.                     // PlotOrientation.HORIZONTAL, //圖表方向,此處爲水平方向   
  54.                     true// 是否顯示圖例   
  55.                     true// 是否生成工具   
  56.                     false // 是否生成URL連接   
  57.                     );             
  58.             // 設置整個圖片的背景色   
  59.             chart.setBackgroundPaint(Color.PINK);   
  60.             // 設置圖片有邊框   
  61.             chart.setBorderVisible(true);   
  62.             Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部   
  63.             Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題   
  64.             // 圖片標題   
  65.             chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
  66.             // 底部   
  67.             chart.getLegend().setItemFont(kfont);   
  68.             // 獲得座標設置字體解決亂碼   
  69.             CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();   
  70.             categoryplot.setDomainGridlinesVisible(true);   
  71.             categoryplot.setRangeCrosshairVisible(true);   
  72.             categoryplot.setRangeCrosshairPaint(Color.blue);   
  73.             NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();   
  74.             numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());   
  75.             BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();   
  76.             barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));   
  77.             barrenderer.setSeriesItemLabelFont(1new Font("宋體", Font.PLAIN, 12));   
  78.             CategoryAxis domainAxis = categoryplot.getDomainAxis();            
  79.             /*------設置X軸座標上的文字-----------*/  
  80.             domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));   
  81.             /*------設置X軸的標題文字------------*/  
  82.             domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));   
  83.             /*------設置Y軸座標上的文字-----------*/  
  84.             numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));   
  85.             /*------設置Y軸的標題文字------------*/  
  86.             numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));   
  87.             /*------這句代碼解決了底部漢字亂碼的問題-----------*/  
  88.             chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));   
  89.             // 生成圖片並輸出   
  90.             ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,   
  91.                     chart, 500300null);   
  92.         } catch (Exception e) {   
  93.             e.printStackTrace();   
  94.         }   
  95.     }   
  96. }  
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
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.CategoryAxis;
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.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

/**
 * 生產柱狀圖
 * @說明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class PillarServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		// 使用普通數據集
		DefaultCategoryDataset chartDate = new DefaultCategoryDataset();
		// 增長測試數據,第一個參數是訪問量,最後一個是時間,中間是顯示用不考慮
		chartDate.addValue(55, "訪問量", "2010-01");
		chartDate.addValue(65, "訪問量", "2010-02");
		chartDate.addValue(59, "訪問量", "2010-03");
		chartDate.addValue(156, "訪問量", "2010-04");
		chartDate.addValue(452, "訪問量", "2010-05");
		chartDate.addValue(359, "訪問量", "2010-06");
		try {
			// 從數據庫中得到數據集
			DefaultCategoryDataset data = chartDate;
			
			// 使用ChartFactory建立3D柱狀圖,不想使用3D,直接使用createBarChart
			JFreeChart chart = ChartFactory.createBarChart3D(
					"網站月訪問量統計", // 圖表標題
					"時間", // 目錄軸的顯示標籤
					"訪問量", // 數值軸的顯示標籤
					data, // 數據集
					PlotOrientation.VERTICAL, // 圖表方向,此處爲垂直方向
					// PlotOrientation.HORIZONTAL, //圖表方向,此處爲水平方向
					true, // 是否顯示圖例
					true, // 是否生成工具
					false // 是否生成URL連接
					);			
			// 設置整個圖片的背景色
			chart.setBackgroundPaint(Color.PINK);
			// 設置圖片有邊框
			chart.setBorderVisible(true);
			Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部
			Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題
			// 圖片標題
			chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
			// 底部
			chart.getLegend().setItemFont(kfont);
			// 獲得座標設置字體解決亂碼
			CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
			categoryplot.setDomainGridlinesVisible(true);
			categoryplot.setRangeCrosshairVisible(true);
			categoryplot.setRangeCrosshairPaint(Color.blue);
			NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
			numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
			BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
			barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));
			barrenderer.setSeriesItemLabelFont(1, new Font("宋體", Font.PLAIN, 12));
			CategoryAxis domainAxis = categoryplot.getDomainAxis();			
			/*------設置X軸座標上的文字-----------*/
			domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
			/*------設置X軸的標題文字------------*/
			domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
			/*------設置Y軸座標上的文字-----------*/
			numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
			/*------設置Y軸的標題文字------------*/
			numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
			/*------這句代碼解決了底部漢字亂碼的問題-----------*/
			chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
			// 生成圖片並輸出
			ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
					chart, 500, 300, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

生成餅狀統計圖:瀏覽器

 

Java代碼 複製代碼  收藏代碼
  1. package com.xidian.servlet;   
  2. import java.awt.Color;   
  3. import java.awt.Font;   
  4. import java.io.IOException;   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import org.jfree.chart.ChartUtilities;   
  10. import org.jfree.chart.JFreeChart;   
  11. import org.jfree.chart.plot.PiePlot3D;   
  12. import org.jfree.chart.title.TextTitle;   
  13. import org.jfree.data.general.DefaultPieDataset;   
  14. /**  
  15.  * 生成餅狀統計圖  
  16.  * @說明   
  17.  * @author cuisuqiang  
  18.  * @version 1.0  
  19.  * @since  
  20.  */  
  21. @SuppressWarnings("serial")   
  22. public class CakeServlet extends HttpServlet {   
  23.     protected void service(HttpServletRequest request,   
  24.             HttpServletResponse response) throws ServletException, IOException {   
  25.         response.setContentType("text/html");   
  26.         // 默認數據類型   
  27.         DefaultPieDataset dataType = new DefaultPieDataset();   
  28.         // 數據參數 內容,數量   
  29.         dataType.setValue("IE6"156);   
  30.         dataType.setValue("IE7"230);   
  31.         dataType.setValue("IE8"45);   
  32.         dataType.setValue("火狐"640);   
  33.         dataType.setValue("谷歌"245);   
  34.         try {   
  35.             DefaultPieDataset data = dataType;   
  36.             // 生成普通餅狀圖除掉 3D 便可   
  37.             // 生產3D餅狀圖   
  38.             PiePlot3D plot = new PiePlot3D(data);   
  39.             JFreeChart chart = new JFreeChart(   
  40.                     "用戶使用的瀏覽器類型",            // 圖形標題   
  41.                     JFreeChart.DEFAULT_TITLE_FONT, // 標題字體   
  42.                     plot,                          // 圖標標題對象   
  43.                     true                           // 是否顯示圖例   
  44.             );   
  45.             // 設置整個圖片的背景色   
  46.             chart.setBackgroundPaint(Color.PINK);   
  47.             // 設置圖片有邊框   
  48.             chart.setBorderVisible(true);   
  49.             // 配置字體   
  50.             Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部   
  51.             Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題   
  52.             // 圖片標題   
  53.             chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
  54.             // 底部   
  55.             chart.getLegend().setItemFont(kfont);   
  56.             ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,   
  57.                     chart, 500300null);   
  58.         } catch (Exception e) {   
  59.             e.printStackTrace();   
  60.         }   
  61.     }   
  62. }  
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
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.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
/**
 * 生成餅狀統計圖
 * @說明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class CakeServlet extends HttpServlet {
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		// 默認數據類型
		DefaultPieDataset dataType = new DefaultPieDataset();
		// 數據參數 內容,數量
		dataType.setValue("IE6", 156);
		dataType.setValue("IE7", 230);
		dataType.setValue("IE8", 45);
		dataType.setValue("火狐", 640);
		dataType.setValue("谷歌", 245);
		try {
			DefaultPieDataset data = dataType;
			// 生成普通餅狀圖除掉 3D 便可
			// 生產3D餅狀圖
			PiePlot3D plot = new PiePlot3D(data);
			JFreeChart chart = new JFreeChart(
					"用戶使用的瀏覽器類型",            // 圖形標題
					JFreeChart.DEFAULT_TITLE_FONT, // 標題字體
					plot,                          // 圖標標題對象
					true                           // 是否顯示圖例
			);
			// 設置整個圖片的背景色
			chart.setBackgroundPaint(Color.PINK);
			// 設置圖片有邊框
			chart.setBorderVisible(true);
			// 配置字體
			Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部
			Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題
			// 圖片標題
			chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
			// 底部
			chart.getLegend().setItemFont(kfont);
			ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
					chart, 500, 300, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

柱狀分佈統計圖:app

 

Java代碼 複製代碼  收藏代碼
  1. package com.xidian.servlet;   
  2. import java.awt.Color;   
  3. import java.awt.Font;   
  4. import java.io.IOException;   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import org.jfree.chart.ChartFactory;   
  10. import org.jfree.chart.ChartUtilities;   
  11. import org.jfree.chart.JFreeChart;   
  12. import org.jfree.chart.axis.CategoryAxis;   
  13. import org.jfree.chart.axis.NumberAxis;   
  14. import org.jfree.chart.plot.CategoryPlot;   
  15. import org.jfree.chart.plot.PlotOrientation;   
  16. import org.jfree.chart.renderer.category.BarRenderer;   
  17. import org.jfree.chart.title.TextTitle;   
  18. import org.jfree.data.category.DefaultCategoryDataset;   
  19. /**  
  20.  * 柱狀分佈統計圖  
  21.  * @說明   
  22.  * @author cuisuqiang  
  23.  * @version 1.0  
  24.  * @since  
  25.  */  
  26. @SuppressWarnings("serial")   
  27. public class ParagraphsServlet extends HttpServlet {   
  28.     protected void service(HttpServletRequest request,   
  29.             HttpServletResponse response) throws ServletException, IOException {   
  30.         response.setContentType("text/html");   
  31.         DefaultCategoryDataset dataTime = new DefaultCategoryDataset();   
  32.         // 這是一組數據   
  33.         dataTime.addValue(52"0-6""2010-1-1");   
  34.         dataTime.addValue(86"6-12""2010-1-1");   
  35.         dataTime.addValue(126"12-18""2010-1-1");   
  36.         dataTime.addValue(42"18-24""2010-1-1");   
  37.         // 這是一組數據   
  38.         dataTime.addValue(452"0-6""2010-1-2");   
  39.         dataTime.addValue(96"6-12""2010-1-2");   
  40.         dataTime.addValue(254"12-18""2010-1-2");   
  41.         dataTime.addValue(126"18-24""2010-1-2");   
  42.         // 這是一組數據   
  43.         dataTime.addValue(256"0-6""2010-1-3");   
  44.         dataTime.addValue(86"6-12""2010-1-3");   
  45.         dataTime.addValue(365"12-18""2010-1-3");   
  46.         dataTime.addValue(24"18-24""2010-1-3");   
  47.         try {   
  48.             DefaultCategoryDataset data = dataTime;   
  49.             // 使用ChartFactory建立3D柱狀圖,不想使用3D,直接使用createBarChart   
  50.             JFreeChart chart = ChartFactory.createBarChart3D(   
  51.                     "網站時間段訪問量統計",    
  52.                     "時間",    
  53.                     "訪問量",    
  54.                     data,   
  55.                     PlotOrientation.VERTICAL,    
  56.                     true,    
  57.                     false,    
  58.                     false  
  59.             );   
  60.             // 設置整個圖片的背景色   
  61.             chart.setBackgroundPaint(Color.PINK);   
  62.             // 設置圖片有邊框   
  63.             chart.setBorderVisible(true);   
  64.             Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部   
  65.             Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題   
  66.             // 圖片標題   
  67.             chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
  68.             // 底部   
  69.             chart.getLegend().setItemFont(kfont);   
  70.             // 獲得座標設置字體解決亂碼   
  71.             CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();   
  72.             categoryplot.setDomainGridlinesVisible(true);   
  73.             categoryplot.setRangeCrosshairVisible(true);   
  74.             categoryplot.setRangeCrosshairPaint(Color.blue);   
  75.             NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();   
  76.             numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());   
  77.             BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();   
  78.             barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));   
  79.             barrenderer.setSeriesItemLabelFont(1new Font("宋體", Font.PLAIN, 12));   
  80.             CategoryAxis domainAxis = categoryplot.getDomainAxis();            
  81.             /*------設置X軸座標上的文字-----------*/  
  82.             domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));   
  83.             /*------設置X軸的標題文字------------*/  
  84.             domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));   
  85.             /*------設置Y軸座標上的文字-----------*/  
  86.             numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));   
  87.             /*------設置Y軸的標題文字------------*/  
  88.             numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));   
  89.             /*------這句代碼解決了底部漢字亂碼的問題-----------*/  
  90.             chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));     
  91.             ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,   
  92.                     chart, 500300null);   
  93.         } catch (Exception es) {   
  94.             es.printStackTrace();   
  95.         }   
  96.     }   
  97. }  
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
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.CategoryAxis;
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.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
/**
 * 柱狀分佈統計圖
 * @說明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class ParagraphsServlet extends HttpServlet {
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		DefaultCategoryDataset dataTime = new DefaultCategoryDataset();
		// 這是一組數據
		dataTime.addValue(52, "0-6", "2010-1-1");
		dataTime.addValue(86, "6-12", "2010-1-1");
		dataTime.addValue(126, "12-18", "2010-1-1");
		dataTime.addValue(42, "18-24", "2010-1-1");
		// 這是一組數據
		dataTime.addValue(452, "0-6", "2010-1-2");
		dataTime.addValue(96, "6-12", "2010-1-2");
		dataTime.addValue(254, "12-18", "2010-1-2");
		dataTime.addValue(126, "18-24", "2010-1-2");
		// 這是一組數據
		dataTime.addValue(256, "0-6", "2010-1-3");
		dataTime.addValue(86, "6-12", "2010-1-3");
		dataTime.addValue(365, "12-18", "2010-1-3");
		dataTime.addValue(24, "18-24", "2010-1-3");
		try {
			DefaultCategoryDataset data = dataTime;
			// 使用ChartFactory建立3D柱狀圖,不想使用3D,直接使用createBarChart
			JFreeChart chart = ChartFactory.createBarChart3D(
					"網站時間段訪問量統計", 
					"時間", 
					"訪問量", 
					data,
					PlotOrientation.VERTICAL, 
					true, 
					false, 
					false
			);
			// 設置整個圖片的背景色
			chart.setBackgroundPaint(Color.PINK);
			// 設置圖片有邊框
			chart.setBorderVisible(true);
			Font kfont = new Font("宋體", Font.PLAIN, 12);    // 底部
			Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題
			// 圖片標題
			chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
			// 底部
			chart.getLegend().setItemFont(kfont);
			// 獲得座標設置字體解決亂碼
			CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
			categoryplot.setDomainGridlinesVisible(true);
			categoryplot.setRangeCrosshairVisible(true);
			categoryplot.setRangeCrosshairPaint(Color.blue);
			NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
			numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
			BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
			barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));
			barrenderer.setSeriesItemLabelFont(1, new Font("宋體", Font.PLAIN, 12));
			CategoryAxis domainAxis = categoryplot.getDomainAxis();			
			/*------設置X軸座標上的文字-----------*/
			domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
			/*------設置X軸的標題文字------------*/
			domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
			/*------設置Y軸座標上的文字-----------*/
			numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
			/*------設置Y軸的標題文字------------*/
			numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
			/*------這句代碼解決了底部漢字亂碼的問題-----------*/
			chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));	
			ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
					chart, 500, 300, null);
		} catch (Exception es) {
			es.printStackTrace();
		}
	}
}

 

 

JSP上使用IMG圖片來請求Servlet顯示圖片:dom

 

Java代碼 複製代碼  收藏代碼
  1. <%@ page language="java" pageEncoding="UTF-8"%>   
  2. <%   
  3. String path = request.getContextPath();   
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  5. %>   
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  7. <html>   
  8.   <head>   
  9.     <base href="<%=basePath%>">   
  10.     <title></title>   
  11.     <meta http-equiv="pragma" content="no-cache">   
  12.     <meta http-equiv="cache-control" content="no-cache">   
  13.     <meta http-equiv="expires" content="0">       
  14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   
  15.     <meta http-equiv="description" content="This is my page">   
  16.   </head>   
  17.   <body>   
  18.     <center>   
  19.         <img src="LineServlet">   
  20.         <img src="PillarServlet">   
  21.         <img src="ParagraphsServlet">   
  22.         <img src="CakeServlet">   
  23.     </center>   
  24.   </body>   
  25. </html>  
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title></title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  <body>
    <center>
    	<img src="LineServlet">
    	<img src="PillarServlet">
    	<img src="ParagraphsServlet">
    	<img src="CakeServlet">
    </center>
  </body>
</html>

 

 

WEB.xml配置:ssh

 

Java代碼 複製代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   
  6.     <filter>   
  7.         <filter-name>EncodingFilter</filter-name>   
  8.         <filter-class>org.filter.EncodingFilter</filter-class>   
  9.     </filter>   
  10.     <filter-mapping>   
  11.         <filter-name>EncodingFilter</filter-name>   
  12.         <url-pattern>/*</url-pattern>   
  13.     </filter-mapping>   
  14.     <servlet>   
  15.         <servlet-name>LineServlet</servlet-name>   
  16.         <servlet-class>com.xidian.servlet.LineServlet</servlet-class>   
  17.     </servlet>   
  18.     <servlet>   
  19.         <servlet-name>PillarServlet</servlet-name>   
  20.         <servlet-class>com.xidian.servlet.PillarServlet</servlet-class>   
  21.     </servlet>   
  22.     <servlet>   
  23.         <servlet-name>ParagraphsServlet</servlet-name>   
  24.         <servlet-class>   
  25.             com.xidian.servlet.ParagraphsServlet   
  26.         </servlet-class>   
  27.     </servlet>   
  28.     <servlet>   
  29.         <servlet-name>CakeServlet</servlet-name>   
  30.         <servlet-class>com.xidian.servlet.CakeServlet</servlet-class>   
  31.     </servlet>   
  32.     <servlet-mapping>   
  33.         <servlet-name>LineServlet</servlet-name>   
  34.         <url-pattern>/LineServlet</url-pattern>   
  35.     </servlet-mapping>   
  36.     <servlet-mapping>   
  37.         <servlet-name>PillarServlet</servlet-name>   
  38.         <url-pattern>/PillarServlet</url-pattern>   
  39.     </servlet-mapping>   
  40.     <servlet-mapping>   
  41.         <servlet-name>ParagraphsServlet</servlet-name>   
  42.         <url-pattern>/ParagraphsServlet</url-pattern>   
  43.     </servlet-mapping>   
  44.     <servlet-mapping>   
  45.         <servlet-name>CakeServlet</servlet-name>   
  46.         <url-pattern>/CakeServlet</url-pattern>   
  47.     </servlet-mapping>   
  48.     <welcome-file-list>   
  49.         <welcome-file>index.jsp</welcome-file>   
  50.     </welcome-file-list>   
  51. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>org.filter.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<servlet>
		<servlet-name>LineServlet</servlet-name>
		<servlet-class>com.xidian.servlet.LineServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>PillarServlet</servlet-name>
		<servlet-class>com.xidian.servlet.PillarServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>ParagraphsServlet</servlet-name>
		<servlet-class>
			com.xidian.servlet.ParagraphsServlet
		</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>CakeServlet</servlet-name>
		<servlet-class>com.xidian.servlet.CakeServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LineServlet</servlet-name>
		<url-pattern>/LineServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>PillarServlet</servlet-name>
		<url-pattern>/PillarServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>ParagraphsServlet</servlet-name>
		<url-pattern>/ParagraphsServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>CakeServlet</servlet-name>
		<url-pattern>/CakeServlet</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

 

爲了解決亂碼問題,我配置了一個過濾器:jsp

 

Java代碼 複製代碼  收藏代碼
  1. package org.filter;   
  2. import java.io.IOException;   
  3. import javax.servlet.Filter;   
  4. import javax.servlet.FilterChain;   
  5. import javax.servlet.FilterConfig;   
  6. import javax.servlet.ServletException;   
  7. import javax.servlet.ServletRequest;   
  8. import javax.servlet.ServletResponse;   
  9. /**  
  10.  * 處理亂碼  
  11.  * @說明   
  12.  * @author cuisuqiang  
  13.  * @version 1.0  
  14.  * @since  
  15.  */  
  16. public class EncodingFilter implements Filter {   
  17.     public void destroy() {   
  18.     }   
  19.     public void doFilter(ServletRequest request, ServletResponse response,   
  20.             FilterChain chain) throws IOException, ServletException {   
  21.         request.setCharacterEncoding("gbk");   
  22.         response.setCharacterEncoding("gbk");   
  23.         chain.doFilter(request, response);   
  24.     }   
  25.     public void init(FilterConfig arg0) throws ServletException {   
  26.   
  27.     }   
  28. }  
package org.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
 * 處理亂碼
 * @說明 
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class EncodingFilter implements Filter {
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("gbk");
		response.setCharacterEncoding("gbk");
		chain.doFilter(request, response);
	}
	public void init(FilterConfig arg0) throws ServletException {

	}
}
相關文章
相關標籤/搜索