jsp页面中主要用iframe来推出图表显示,采用的是servlet的方法:
<tr>
<td align="center" class="code">
<iframe height="700" id="info" name=info width="708" scrolling="auto" frameborder=0
src="<%=pathPrefix%>/freeChartServlet?chart_title=<bean:write name="statImageForm" property="chartConditionSetting.chart_title"/>
&chart_type=<bean:write name="statImageForm" property="chartConditionSetting.chart_type"/>
&in=<bean:write name="statImageForm" property="chartConditionSetting.in"/>
&cityid=<bean:write name="statImageForm" property="chartConditionSetting.cityid"/>
&prodid=<bean:write name="statImageForm" property="chartConditionSetting.prodid"/>
&start_date=<bean:write name="statImageForm" property="chartConditionSetting.start_date"/>
&end_date=<bean:write name="statImageForm" property="chartConditionSetting.end_date"/>
" align="center">
</iframe>
</td>
</tr>
类的实现
/**
* <p>Title FreeChartServlet.java</p>
* <p>Description FreeChartServlet.java</p>
* <p>Copyright: Copyright (c) 2006-11-16</p>
* <p>Company: ericsson</p>
* @author huangming
* @version 1.0
*/
package com.ericsson.esmp.jfreechart;
import java.awt.Color;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Calendar;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.BarRenderer3D;
import org.jfree.chart.renderer.LineAndShapeRenderer;
import org.jfree.data.CategoryDataset;
import org.jfree.data.PieDataset;
import com.ericsson.esmp.statimage.StatMgr;
import cn.jado.lib.ConvertString;
public class FreeChartServlet extends HttpServlet{
public static final String CONTENT_TYPE = "image/jpeg";
public static final int BAR_CHART= 1; //饼状图
public static final int BAR_CHART_HORIZONTAL = 2; //柱状图
public static final int XY_CHART = 3; //曲线图
//Initialize global variables
public void init() throws ServletException {
}
//Clean up resources
public void destroy() {
}
public void service(ServletRequest req, ServletResponse res) throws
ServletException, IOException {
res.setContentType(CONTENT_TYPE);
HttpServletRequest request = (HttpServletRequest)req;
String chart_type = null;
String chart_title = null;
String chart_character = null;
String months=null;
String cityid=null;
String in=null;
String prodid=null;
String monthType = null;
String begin=null;
String end = null;
//纵轴标签名称
String vertical_label_name = null;
//横轴标签名称
String horizontal_label_name = "统计月份";
String curYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
String curMonth = String.valueOf(Calendar.getInstance().get(Calendar.MONTH) + 1);
String curDay = String.valueOf(Calendar.getInstance().get(Calendar.DATE));
String curDate =curYear+"-"+curMonth+"-"+curDay;
if (req.getParameter("chart_type") != null && req.getParameter(
"chart_type").length() > 0) {//图表类型
chart_type = ConvertString.convertToISO8859_1(req.getParameter("chart_type").trim());
}
System.out.println("chart_type=" + chart_type);
if (req.getParameter("chart_title") != null && req.getParameter(
"chart_title").length() > 0) {//图表标题
chart_title = ConvertString.convertToISO8859_1(req.getParameter("chart_title").trim());
}
System.out.println("chart_title=" + chart_title);
if (req.getParameter("chart_character") != null && req.getParameter(
"chart_character").length() > 0) {//图表性质
chart_character = ConvertString.convertToISO8859_1(req.getParameter(
"chart_character").trim());
}
System.out.println("chart_character=" + chart_character);
if (req.getParameter("in") != null && req.getParameter("in").length() > 0) {//统计类型
in = ConvertString.convertToISO8859_1(req.getParameter("in").trim());
}
System.out.println("in=" +in);
if (req.getParameter("cityid") != null && req.getParameter("cityid").length() > 0)
{//城市
cityid = ConvertString.convertToISO8859_1(req.getParameter("cityid").trim());
}
System.out.println("cityid="+cityid);
if (req.getParameter("prodid") != null && req.getParameter("prodid").length() > 0)
{//产品
prodid = ConvertString.convertToISO8859_1(req.getParameter("prodid").trim());
}
System.out.println("prodid="+prodid);
if (req.getParameter("months") != null && req.getParameter(
"months").length() > 0) {
months = ConvertString.convertToISO8859_1(req.getParameter(
"months").trim());
}
System.out.println("months=" + months);
//begin
if (req.getParameter("begin") != null && req.getParameter("begin").length() > 0) {
begin = ConvertString.convertToISO8859_1(req.getParameter("begin").trim());
}
System.out.println("begin=" + begin);
//end
if (req.getParameter("end") != null && req.getParameter("end").length() > 0) {
end = ConvertString.convertToISO8859_1(req.getParameter("end").trim());
}
System.out.println("end=" + end);
//monthType
if (req.getParameter("monthType") != null && req.getParameter("monthType").length() > 0) {
monthType = ConvertString.convertToISO8859_1(req.getParameter("monthType").trim());
}
System.out.println("monthType=" + monthType);
//获取数据值
CategoryDataset dataset = getDataSet(monthType,chart_character,in,cityid,begin,end); //订户发展统计
PieDataset pdataset=getDataSet1(months,chart_character,cityid,begin,end); //订户比例统计
JFreeChart chart = null;
NumberFormat nf = NumberFormat.getInstance(Locale.CHINA);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("0.00");
DecimalFormat df2 = (DecimalFormat) nf;
df2.applyPattern("0.00%");
if(chart_title!=null&&chart_title.equals("percent"))
{
chart_title="订户统计比例图";
}
if(chart_title!=null&&chart_title.equals("1"))
{
chart_title="订户发展统计图";
}
if(chart_title!=null&&chart_title.equals("out"))
{
chart_title="订户注销情况统计图";
}
switch (Integer.parseInt(chart_type)) {
case BAR_CHART: //1
chart = ChartFactory.createPieChart3D(
chart_title, // 图表标题
pdataset, // 数据集
true, // 是否显示图例(对于简单的柱状图必须是false)
true, // 是否生成工具
false // 是否生成URL链接
);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {2}",
df,df));
plot.setNoDataMessage("没有数据");
plot.setIgnoreNullValues(false);
break;
case XY_CHART: //3 曲线
chart = ChartFactory.createLineChart(
chart_title, // chart title
null, // domain axis label
"数量", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
final StandardLegend legend = (StandardLegend) chart.getLegend();
legend.setDisplaySeriesShapes(true);
legend.setShapeScaleX(1.5);
legend.setShapeScaleY(1.5);
legend.setDisplaySeriesLines(true);
chart.setBackgroundPaint(Color.lightGray);
CategoryPlot plot3 = (CategoryPlot) chart.getPlot();
plot3.setBackgroundPaint(Color.white);
plot3.setRangeGridlinePaint(Color.black);
final NumberAxis rangeAxis = (NumberAxis) plot3.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot3.getRenderer();
renderer.setDrawShapes(true);
renderer.setShapesFilled(true);
renderer.setPositiveItemLabelPosition(new ItemLabelPosition());
renderer.setNegativeItemLabelPosition(new ItemLabelPosition());
break;
default :
chart = ChartFactory.createBarChart3D(
chart_title, // 图表标题
horizontal_label_name, // 目录轴的显示标签
vertical_label_name, // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
CategoryPlot plot1=chart.getCategoryPlot();
BarRenderer3D renderer1 = new BarRenderer3D();
// 设置每个地区所包含的平行柱的之间距离
renderer1.setItemMargin(0.1);
// 显示每个柱的数值,并修改该数值的字体属性
renderer1.setMaxBarWidth(0.05);//double
renderer1.setBaseLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer1.setItemLabelsVisible(true);
plot1.setRenderer(renderer1);
plot1.setNoDataMessage("没有数据");
final NumberAxis rangeAxis1 = (NumberAxis) plot1.getRangeAxis();
rangeAxis1.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
break;
}
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),50, chart, 650, 400, null);
}
/**
* 获取组合数据集对象
* @param start_date:开始时间
* @param end_date:结束时间
* @param vertical_label:纵轴标签
* @param horizontal_label:横轴标签
* @param chart_character:图表性质
* @return CategoryDataset :组合数据集对象
*/
private static CategoryDataset getDataSet(String monthType,String chart_character,String in,String cityid,String begin,String end)
{
CategoryDataset dataset=null;
StatMgr statmgr=new StatMgr();
dataset=statmgr.getDataSet(monthType,chart_character,in,cityid,begin,end);
return dataset;
}
private static PieDataset getDataSet1(String months,String chart_title,String cityid,String begin,String end)
{
PieDataset data=null;
StatMgr statmgr=new StatMgr();
data=statmgr.getPieDataSet(months,chart_title,cityid,begin,end);
return data;
}
}