springmvc+jfreechart 超鏈接

1.後臺controller類:

package com.pdcss.project.controller;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javacommon.base.BaseSpringController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.IntervalXYItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategorySeriesLabelGenerator;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.chart.urls.StandardXYURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleInsets;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/pages/Jfree")
public class JfreeController extends BaseSpringController {

@RequestMapping("/showXYLine")
public ModelAndView showXYLine(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createXYLineChart(session,"統計圖","X軸","Y軸",550, 450, "imgMap", new PrintWriter(out));

String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/showBar3D")
public ModelAndView showBar3D(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createBarChart(getCategoryBarDataset(), "招生信息總覽",
"應報與實報對照", "人數", 550, 450, session, new PrintWriter(out),
"imgMap", true);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/detailBar3D")
public ModelAndView detailBar3D(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

String type = request.getParameter("type");
type = new String(type.getBytes("ISO-8859-1"), "UTF-8");
String school = request.getParameter("school");
school = new String(school.getBytes("ISO-8859-1"), "UTF-8");

CategoryDataset data = getCategoryBar3DDataset(type, school);

HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createBarChart(data, school + type + "男女情況3D圖",
"男女人數", "人數", 550, 450, session, new PrintWriter(out),
"imgMap", true);

String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}
@RequestMapping("/showBar")
public ModelAndView showBar(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createBarChart(getCategoryBarDataset(), "招生信息總覽",
"應報與實報對照", "人數", 550, 450, session, new PrintWriter(out),
"imgMap", false);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/detailBar")
public ModelAndView detailBar(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

String type = request.getParameter("type");
type = new String(type.getBytes("ISO-8859-1"), "UTF-8");
String school = request.getParameter("school");
school = new String(school.getBytes("ISO-8859-1"), "UTF-8");

CategoryDataset data = getCategoryBar3DDataset(type, school);
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createBarChart(data, school + type + "男女情況平面圖",
"男女人數", "人數", 550, 450, session, new PrintWriter(out),
"imgMap", false);

String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/showPie3D")
public ModelAndView showPie3D(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createPieChart(getPieDataset(), "全國水果產量圖", 550, 400,
session, new PrintWriter(out), "imgMap", true);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/detailPie3D")
public ModelAndView detailPie3D(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

String fruit = request.getParameter("fruit");
fruit = new String(fruit.getBytes("ISO-8859-1"), "UTF-8");

DefaultPieDataset data = getDetailPieDataSet(fruit);
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createPieChart(data, "全國" + fruit + "產量圖", 550, 400,
session, new PrintWriter(out), "imgMap", true);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");

return mav;
}

@RequestMapping("/showPie")
public ModelAndView showPie(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createPieChart(getPieDataset(), "全國水果產量圖", 550, 400,
session, new PrintWriter(out), "imgMap", false);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");
return mav;
}

@RequestMapping("/detailPie")
public ModelAndView detailPie(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

String fruit = request.getParameter("fruit");
fruit = new String(fruit.getBytes("ISO-8859-1"), "UTF-8");

DefaultPieDataset data = getDetailPieDataSet(fruit);
HttpSession session = request.getSession();
Writer out = response.getWriter();

String filename = createPieChart(data, "全國" + fruit + "產量圖", 550, 400,
session, new PrintWriter(out), "imgMap", false);
String file = request.getContextPath()
+ "/servlet/DisplayChart?filename=" + filename;
ModelAndView mav = new ModelAndView();
mav.addObject("file", file);
mav.setViewName("/jfree");

return mav;
}

public DefaultPieDataset getDetailPieDataSet(String fruit) {
DefaultPieDataset data = new DefaultPieDataset();
if ("蘋果".equals(fruit)) {
data.setValue("山東", 100);
data.setValue("廣東", 200);
data.setValue("湖南", 300);
data.setValue("湖北", 150);
data.setValue("四川", 150);
data.setValue("重慶", 50);
data.setValue("雲南", 250);
}
if ("梨子".equals(fruit)) {
data.setValue("山東", 150);
data.setValue("廣東", 250);
data.setValue("湖南", 350);
data.setValue("湖北", 150);
data.setValue("四川", 450);
data.setValue("重慶", 100);
data.setValue("雲南", 550);
}
if ("葡萄".equals(fruit)) {
data.setValue("山東", 150);
data.setValue("廣東", 250);
data.setValue("湖南", 650);
data.setValue("湖北", 150);
data.setValue("四川", 750);
data.setValue("重慶", 500);
data.setValue("雲南", 550);
}
if ("香蕉".equals(fruit)) {
data.setValue("山東", 150);
data.setValue("廣東", 250);
data.setValue("湖南", 650);
data.setValue("湖北", 150);
data.setValue("四川", 750);
data.setValue("重慶", 1500);
data.setValue("雲南", 550);
} else {
data.setValue("山東", 150);
data.setValue("廣東", 250);
data.setValue("湖南", 650);
data.setValue("湖北", 150);
data.setValue("四川", 750);
data.setValue("重慶", 1500);
data.setValue("雲南", 1550);
}
return data;
}

public DefaultPieDataset getPieDataset() {
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("蘋果", 1000);
pieDataset.setValue("梨子", 2000);
pieDataset.setValue("葡萄", 3000);
pieDataset.setValue("香蕉", 4000);
pieDataset.setValue("荔枝", 5000);
return pieDataset;
}

public CategoryDataset getCategoryBar3DDataset(String type, String school) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
if ("計劃".equals(type)) {
if ("清華大學".equals(school)) {
dataset.addValue(150, "男", "清華大學");
dataset.addValue(50, "女", "清華大學");
} else if ("天津大學".equals(school)) {
dataset.addValue(60, "男", "天津大學");
dataset.addValue(40, "女", "天津大學");
} else {
dataset.addValue(130, "男", "鄭州大學");
dataset.addValue(70, "女", "鄭州大學");
}
}
if ("實報".equals(type)) {
if ("清華大學".equals(school)) {
dataset.addValue(150, "男", "清華大學");
dataset.addValue(250, "女", "清華大學");
} else if ("天津大學".equals(school)) {
dataset.addValue(120, "男", "天津大學");
dataset.addValue(85, "女", "天津大學");
} else {
dataset.addValue(170, "男", "鄭州大學");
dataset.addValue(115, "女", "鄭州大學");
}
}
return dataset;
}

public CategoryDataset getCategoryBarDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(200, "計劃", "清華大學");
dataset.addValue(400, "實報", "清華大學");
dataset.addValue(100, "計劃", "天津大學");
dataset.addValue(205, "實報", "天津大學");
dataset.addValue(200, "計劃", "鄭州大學");
dataset.addValue(285, "實報", "鄭州大學");
return dataset;
}
private XYDataset getXYDataset() {
XYSeries xyseries = new XYSeries("第一條線"); // 先產生XYSeries 對象
xyseries.add(1.0D, 1.0D);
xyseries.add(2D, 4D);
xyseries.add(3D, 3D);
xyseries.add(4D, 5D);
xyseries.add(5D, 5D);
xyseries.add(6D, 7D);
xyseries.add(7D, 7D);
xyseries.add(8D, 8D);

XYSeries xyseries1 = new XYSeries("第二條線");
xyseries1.add(1.0D, 5D);
xyseries1.add(2D, 7D);
xyseries1.add(3D, 6D);
xyseries1.add(4D, 8D);
xyseries1.add(5D, 4D);
xyseries1.add(6D, 4D);
xyseries1.add(7D, 2D);
xyseries1.add(8D, 1.0D);

XYSeries xyseries2 = new XYSeries("第三條線");
xyseries2.add(3D, 4D);
xyseries2.add(4D, 3D);
xyseries2.add(5D, 2D);
xyseries2.add(6D, 3D);
xyseries2.add(7D, 6D);
xyseries2.add(8D, 3D);
xyseries2.add(9D, 4D);
xyseries2.add(10D, 3D);

XYSeriesCollection xyseriescollection = new XYSeriesCollection(); // 再用XYSeriesCollection添加入XYSeries
// 對象
xyseriescollection.addSeries(xyseries);
xyseriescollection.addSeries(xyseries1);
xyseriescollection.addSeries(xyseries2);
return xyseriescollection;
}

public String createXYLineChart(HttpSession session,String title,String xtitle,String ytitle,int width,int height,String useMap,PrintWriter pw) {
XYDataset xydataset = getXYDataset();
String filename = "";

JFreeChart jfreechart = ChartFactory.createXYLineChart(
title, //圖表標題名稱
xtitle, //橫座標顯示標籤
ytitle, //縱座標顯示標籤
xydataset, //數據源
PlotOrientation.VERTICAL, //PlotOrientation.VERTICAL-->垂直顯示、PlotOrientation.HORIZONTAL-->水平顯示
true, //是否顯示圖例(對於簡單的柱狀圖必須是false)
true, //是否生產工具
true //是否生成URL鏈接
);
jfreechart.setTitle(new TextTitle(title,new Font("黑體",Font.ITALIC,20)));//重新設置圖表標題,改變字體

jfreechart.getTitle().setFont(new Font("黑體",Font.ITALIC,20)); //解決標題亂碼

jfreechart.setBackgroundPaint(Color.white); //設定背景色爲白色

XYPlot xyplot = (XYPlot) jfreechart.getPlot(); // 獲得 plot:XYPlot!!

xyplot.setBackgroundPaint(Color.lightGray); //設定圖表數據顯示部分背景色

xyplot.setDomainGridlinePaint(Color.white); //橫座標網格線白色

xyplot.setDomainGridlinesVisible(true); //網格線:true-->可見,false-->不可見

xyplot.setRangeGridlinePaint(Color.white); //縱座標網格線白色

xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); // 設定座標軸與圖表數據顯示部分距離

ValueAxis categoryAxis = xyplot.getDomainAxis();//取得橫軸

//categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//設置分類標籤以45度角傾斜

categoryAxis.setLabelFont(new Font("宋體",Font.TYPE1_FONT,16));//設置橫軸顯示標籤的字體

categoryAxis.setTickLabelFont(new Font("宋體", Font.TYPE1_FONT, 16)); //解決橫座標亂碼

NumberAxis numberAxis = (NumberAxis)xyplot.getRangeAxis();//取得縱軸

numberAxis.setLabelFont(new Font("宋體",Font.TYPE1_FONT,16));//設置縱軸顯示標籤的字體

numberAxis.setTickLabelFont(new Font("宋體", Font.TYPE1_FONT, 16)); //解決縱座標亂碼

numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//使縱座標的最小單位格爲整數

numberAxis.setAutoRangeIncludesZero(true);

// 獲得 renderer 注意這裏是XYLineAndShapeRenderer !!
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
.getRenderer();
xylineandshaperenderer.setShapesVisible(true); // 數據點可見
xylineandshaperenderer.setShapesFilled(true); // 數據點被填充即不是空心點

xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一個XYSeries數據點間連線不可見
xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二個XYSeries數據點不可見
xyplot.setRenderer(xylineandshaperenderer);

xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F,
new float[] {10F, 6F}, 0.0F)); //定義series爲”First”的(即series1)點之間的連線 ,這裏是虛線,默認是直線
xylineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F,
new float[] {6F, 6F}, 0.0F)); //定義series爲”Second”的(即series2)點之間的連線
xylineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F,
new float[] {2.0F, 6F}, 0.0F)); //定義series爲”Third”的(即series3)點之間的連線

xylineandshaperenderer.setBaseItemLabelGenerator(new IntervalXYItemLabelGenerator("({1},{2})",NumberFormat.getNumberInstance(),NumberFormat.getNumberInstance()));
xylineandshaperenderer.setURLGenerator(new StandardXYURLGenerator("showXYLine.do","seriesName","itemName"));

//設置底部標題字體
xylineandshaperenderer.setLegendTextFont(0, new Font("宋體",Font.TYPE1_FONT,16));
xylineandshaperenderer.setLegendTextFont(1, new Font("宋體",Font.TYPE1_FONT,16));
xylineandshaperenderer.setLegendTextFont(2, new Font("宋體",Font.TYPE1_FONT,16));

StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);

try {
filename = ServletUtilities.saveChartAsPNG(jfreechart, width, height,
info, session);
ChartUtilities.writeImageMap(pw, useMap, info, false);// 輸出MAP信息
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}

public String createBarChart(CategoryDataset dataset, String title,
String xtitle, String ytitle, int width, int height,
HttpSession session, PrintWriter pw, String useMap, boolean is3D) {
String filename = "";
JFreeChart chart = ChartFactory.createBarChart3D(title,// 圖表標題
xtitle,// 目錄軸的顯示標籤(x軸)
ytitle,// 數值軸的顯示標籤(y軸)
dataset, PlotOrientation.VERTICAL,// 圖表方向:水平、垂直
true,// 是否顯示圖例(對於簡單的柱狀圖必須是false)
true,// 是否tooltip
true// 是否生成URL鏈接
);
Font font = new Font("宋體", Font.BOLD, 16);
TextTitle barTitle = new TextTitle(title, font);
// 設置正上方的標題
chart.setTitle(barTitle);
// 設置底部標題
chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
//chart.getLegend().setItemLabelPadding(new RectangleInsets());
CategoryPlot plot = chart.getCategoryPlot();// 獲得圖表區域對象

// 設置圖表的縱軸和橫軸org.jfree.chart.axis.CategoryAxis
CategoryAxis domainAxis = plot.getDomainAxis();// X軸
domainAxis.setLowerMargin(0.1);// 設置距離圖片左端距離此時爲10%
domainAxis.setUpperMargin(0.1);// 設置距離圖片右端距離此時爲百分之10
domainAxis.setCategoryLabelPositionOffset(10);// 圖表橫軸與標籤的距離(10像素)
domainAxis.setCategoryMargin(0.2);// 橫軸標籤之間的距離20%
// 設置X座標上的文字
domainAxis.setTickLabelFont(font);
// 設置X軸標題
domainAxis.setLabelFont(font);
// domainAxis.setMaximumCategoryLabelLines(1);
// domainAxis.setMaximumCategoryLabelWidthRatio(0);
// 設定柱子的屬性
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setUpperMargin(0.1);// 設置最高的一個柱與圖片頂端的距離(最高柱的10%)
// 設置Y座標上的文字
rangeAxis.setTickLabelFont(font);
// 設置Y軸標題
rangeAxis.setLabelFont(font);

// 設置圖表的顏色
// BarRenderer3D renderer = new BarRenderer3D();
BarRenderer renderer;
if (is3D) {
renderer = new BarRenderer3D();
renderer
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator(
"detailBar3D.do", "type", "school"));
} else {
renderer = new BarRenderer();
renderer
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator(
"detailBar.do", "type", "school"));
}
// 顯示每個柱的數值,並修改該數值的字體屬性
renderer.setIncludeBaseInRange(true);
renderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator(
"{0}={2}人",NumberFormat.getNumberInstance()));
renderer.setBaseOutlinePaint(Color.red);
renderer.setSeriesPaint(0, new Color(0, 255, 255));// 計劃柱子的顏色爲青色
renderer.setSeriesOutlinePaint(0, Color.BLACK);// 邊框爲黑色
renderer.setSeriesPaint(1, new Color(0, 255, 0));// 實報柱子的顏色爲綠色
renderer.setSeriesOutlinePaint(1, Color.red);// 邊框爲紅色
renderer.setItemMargin(0.1);// 組內柱子間隔爲組寬的10%
//java.lang.String labelFormat:"{0}={1}({2})":會顯示成:apple=120(5%)
//java.text.NumberFormat類有三個方法可以產生下列數據的標準格式化器:
//數字:NumberFormat.getNumberInstance();
//貨幣:NumberFormat.getCurrencyInstance();
//百分數:NumberFormat.getPercentInstance();

//設置底部
renderer.setLegendItemLabelGenerator(new StandardCategorySeriesLabelGenerator("{0}"));
renderer.setBaseItemLabelsVisible(true);
plot.setRenderer(renderer);// 使用我們設計的效果

// 設置縱橫座標的顯示位置
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);// 學校顯示在下端(柱子豎直)或左側(柱子水平)
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); // 人數顯示在下端(柱子水平)或左側(柱子豎直)
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
try {
filename = ServletUtilities.saveChartAsPNG(chart, width, height,
info, session);
ChartUtilities.writeImageMap(pw, useMap, info, false);// 輸出MAP信息
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}

public String createPieChart(Dataset dataset, String title, int width,
int height, HttpSession session, PrintWriter pw, String useMap,
boolean is3D) {
String filename = "";
PiePlot plot = null;
if (is3D) {
plot = new PiePlot3D((DefaultPieDataset) dataset);// 3D餅圖
plot.setURLGenerator(new StandardPieURLGenerator("detailPie3D.do",
"fruit", "pieIdex"));// 設定熱區超鏈接
} else {
plot = new PiePlot((DefaultPieDataset) dataset);
plot.setURLGenerator(new StandardPieURLGenerator("detailPie.do",
"fruit", "pieIdex"));// 設定熱區超鏈接
}
plot.setPieIndex(1);
JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT,
plot, true);
chart.setBackgroundPaint(java.awt.Color.white);// 可選,設置圖片背景色
chart.setTitle(title);// 可選,設置圖片標題

// 指定餅圖輪廓線的顏色
// plot.setBaseSectionOutlinePaint(Color.BLACK);
// plot.setBaseSectionPaint(Color.BLACK);
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
plot.setNoDataMessage("無對應數據顯示");

// 圖片中顯示百分比:默認方式
// plot.setLabelGenerator(new
// StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 圖片中顯示百分比:自定義方式,{0} 表示選項, {1} 表示數值, {2} 表示所佔比例 ,小數點後兩位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 圖例顯示百分比:自定義方式, {0} 表示選項, {1} 表示數值, {2} 表示所佔比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})"));
// 設置背景色爲白色
chart.setBackgroundPaint(Color.white);
// 指定圖片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.8f);
// 指定顯示的餅圖上圓形(true)還橢圓形(false)
plot.setCircular(true);
// 設置第一個 餅塊section 的開始位置,默認是12點鐘方向
plot.setStartAngle(90);
plot.setLabelFont(new Font("宋體", Font.BOLD, 12));
chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 12));
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
try {
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
session);
ChartUtilities.writeImageMap(pw, useMap, info, false);// 輸出MAP信息
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}

}



2.web.xml配置文件:

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>
org.jfree.chart.servlet.DisplayChart
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>


3.springmvc_servlet.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName" >

<!-- 自動搜索@Controller標註的類 -->
<context:component-scan base-package="com.**.controller"/>
<bean class="cn.org.rapid_framework.spring.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<!-- <property name="caseSensitive" value="true"/> -->
<!-- 前綴可選 -->
<property name="pathPrefix" value="/pages"></property>
<property name="interceptors">
<bean class="com.pdcss.project.inteceptor.TimeBasedAccessInterceptor"/>
</property>
</bean>

<!-- Default ViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"></property>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="i18n/messages"/>

<!-- Mapping exception to the handler view -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
</props>
</property>
</bean>
</beans>


4.前臺jsp頁面:jfree.jsp:

<%@ page contentType="text/html;charset=UTF-8"%>
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
</HEAD>
<BODY>
<P ALIGN="CENTER">
<img src="${requestScope.file }" border=0 usemap="#imgMap">
</P>
</BODY>
</HTML>

http://localhost:8080/springmvc_hibernate/pages/Jfree/showBar.do

[img]http://dl.iteye.com/upload/attachment/511780/7afdb1d5-eda8-38cb-9875-c86f7076680e.png[/img]

http://localhost:8080/springmvc_hibernate/pages/Jfree/detailBar.do?type=%E8%AE%A1%E5%88%92&school=%E6%B8%85%E5%8D%8E%E5%A4%A7%E5%AD%A6

[img]http://dl.iteye.com/upload/attachment/511782/6be7a7d2-6066-3247-80f5-e2772560e280.png[/img]

http://localhost:8080/springmvc_hibernate/pages/Jfree/showPie3D.do

[img]http://dl.iteye.com/upload/attachment/511784/fde8d184-f9ac-3154-ae81-c1f6cc4025d6.png[/img]

http://localhost:8080/springmvc_hibernate/pages/Jfree/detailPie3D.do?fruit=%E8%8D%94%E6%9E%9D&pieIdex=1

[img]http://dl.iteye.com/upload/attachment/511786/135f9458-871f-31b2-a3ca-2375d5e13e2f.png[/img]

http://localhost:8080/springmvc_hibernate/pages/Jfree/showXYLine.do

[img]http://dl.iteye.com/upload/attachment/511788/9876bdfc-c7a1-3c19-8906-a4905b13c103.png[/img]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章