JSP中生成数据统计图表的源码.docx
《JSP中生成数据统计图表的源码.docx》由会员分享,可在线阅读,更多相关《JSP中生成数据统计图表的源码.docx(14页珍藏版)》请在冰豆网上搜索。
![JSP中生成数据统计图表的源码.docx](https://file1.bdocx.com/fileroot1/2023-2/23/dc36d34e-fba8-49cd-ab9c-748284ec5b0d/dc36d34e-fba8-49cd-ab9c-748284ec5b0d1.gif)
JSP中生成数据统计图表的源码
JSP中生成数据统计图表的源码
马建成
日常我们在做一个项目的时候都会遇到这样的需求,根据用户在Web页面上向服务器提交的数据,根据条件从数据库中取出相应的一系列数据后,要能在web浏览器上以图表的形式显示结果,形成直观的对比,于是就要我们实现饼图、柱图、折线图的动态生成。
我在学习JSP的过程中使用了JFreeChart这么一个东西。
JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:
饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
在这些不同式样的图表上可以满足目前商业系统的要求。
JFreeChart是一种基于JAVA语言的图表开发技术。
JFreeChart可用于Servlet、JSP、Applet、JavaAppication环境中,通过JDBC可动态显示任何数据库数据。
在使用和学习的过程中获得了一些测试心得,同时展示几个例子同大家共同交流学习。
为方便简化实例,我门所有的数据使用静态的数据测试。
一、服务配制
首先我们必须有一个Jsp能够运行的环境,本此采用的开发环境是:
Tomcat5.5+Jdk1.5。
在要发布Web程序目录的\WEB-INF\lib下拷入jfreechart-1.0.1.jar的jar包(根据的版本的不同文件名会有差异),对\WEB-INF\Web.xml做如下配置。
DisplayChart
org.jfree.chart.servlet.DisplayChart
DisplayChart
/servlet/DisplayChart
在做好以上工作后我们可以动手做第一个实例了。
二、需要使用的JavaBean
在Jsp页面生成之前,需要写一个JavaBean,当然也可以直接将代码写在Jsp文件里。
源码如下:
/**
*Title统计分析实例
*@author:
***
*Copyright:
Copyright(c)2008
*/
packagecom.test.chart;
importjava.awt.BasicStroke;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Polygon;
importjava.awt.Shape;
importjava.awt.geom.Rectangle2D;
importjava.io.*;
importjavax.servlet.http.HttpSession;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.ChartRenderingInfo;
importorg.jfree.chart.ChartUtilities;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.axis.AxisLocation;
importorg.jfree.chart.axis.NumberAxis;
importorg.jfree.chart.entity.StandardEntityCollection;
importorg.jfree.chart.labels.ItemLabelPosition;
importorg.jfree.chart.labels.StandardCategoryItemLabelGenerator;
importorg.jfree.chart.plot.CategoryPlot;
importorg.jfree.chart.plot.DefaultDrawingSupplier;
importorg.jfree.chart.plot.DrawingSupplier;
importorg.jfree.chart.plot.PiePlot3D;
importorg.jfree.chart.plot.PlotOrientation;
importorg.jfree.chart.renderer.category.BarRenderer3D;
importorg.jfree.chart.renderer.category.LineAndShapeRenderer;
importorg.jfree.chart.servlet.ServletUtilities;
importorg.jfree.chart.title.TextTitle;
importorg.jfree.data.category.*;
importorg.jfree.data.general.DefaultPieDataset;
importorg.jfree.chart.labels.StandardPieToolTipGenerator;
publicclassTestChart{
/**
*人员构成的分析饼图
*@return
*/
publicStringRygcPieChart(HttpSessionsession,PrintWriterpw,intpicwidth,intpicheight){
Stringfilename="";
try{
DefaultPieDatasetdataset=newDefaultPieDataset();
//初始化数据
dataset.setValue("接触网工",400);
dataset.setValue("变电工",300);
dataset.setValue("电力工",200);
dataset.setValue("其它",100);
PiePlot3Dplot=newPiePlot3D(dataset);//生成一个3D饼图
//plot.setURLGenerator(newStandardPieURLGenerator("DegreedView.jsp"));//设定图片链接
JFreeChartchart=newJFreeChart("",JFreeChart.DEFAULT_TITLE_FONT,plot,true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
chart.setTitle("单位人员构成统计");//可选,设置图片标题
plot.setToolTipGenerator(newStandardPieToolTipGenerator());
StandardEntityCollectionsec=newStandardEntityCollection();
ChartRenderingInfoinfo=newChartRenderingInfo(sec);
//picwidth是图片长度,picheight是图片高度
filename=ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session);
ChartUtilities.writeImageMap(pw,filename,info,false);
pw.flush();
}catch(Exceptione){
filename="error.png";
}
returnfilename;
}
/**
*人员车间分布的分析柱图
*@return
*/
publicStringRyfbBarChart(HttpSessionsession,PrintWriterpw,
intpicwidth,intpicheight){
Stringtitle="车间人员分布分析图";
Stringhtitle="车间名称";
Stringvtitle="人员数量";
Stringfilename=null;
try{
//数据初始化
DefaultCategoryDatasetdataset=newDefaultCategoryDataset();
dataset.addValue(150,"接触网工","车间1");
dataset.addValue(530,"变电工","车间1");
dataset.addValue(160,"电力工","车间1");
dataset.addValue(120,"接触网工","车间2");
dataset.addValue(230,"变电工","车间2");
dataset.addValue(360,"电力工","车间2");
dataset.addValue(600,"接触网工","车间3");
dataset.addValue(430,"变电工","车间3");
dataset.addValue(560,"电力工","车间3");
JFreeChartchart=ChartFactory.createBarChart3D(title,htitle,vtitle,
dataset,PlotOrientation.VERTICAL,true,true,true);
//title标题,htitle水平标题,vtitle垂直标题
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
Fontfont=newFont("黑体",Font.CENTER_BASELINE,20);
//设置图片标题的字体和大小
TextTitle_title=newTextTitle(title);
_title.setFont(font);
chart.setTitle(_title);
CategoryPlotplot=chart.getCategoryPlot();
BarRenderer3Drenderer=newBarRenderer3D();
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
finalNumberAxisrangeAxis=(NumberAxis)plot.getRangeAxis();
rangeAxis.setRange(0.0,1000.0);//垂直坐标的数据上下限
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
renderer.setSeriesPaint(0,Color.GREEN);
//设置每种结果代表的柱的Outline颜色
renderer.setSeriesOutlinePaint(0,Color.BLACK);
//设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.1);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(newStandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(newFont("黑体",Font.PLAIN,12));
renderer.setItemLabelsVisible(true);
ItemLabelPositionitemlabelposition=newItemLabelPosition();
renderer.setPositiveItemLabelPosition(itemlabelposition);
plot.setRenderer(renderer);
plot.setForegroundAlpha(0.4f);//设置柱的透明度
//把生成的图片放到临时目录
ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection());
filename=ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session);
ChartUtilities.writeImageMap(pw,filename,info,true);
pw.flush();
}
catch(Exceptione){
filename="error.png";
}
returnfilename;
}
/**
*上半年生产任务分析图
*@return
*/
publicStringRyqsSLineChart(HttpSessionsession,PrintWriterpw,intpicwidth,intpicheight){
Stringtitle="上半年生产任务分析图";
Stringhtitle="月份";
Stringvtitle="生产数量";
Stringfilename=null;
try{
DefaultCategoryDatasetdataset=newDefaultCategoryDataset();
dataset.setValue(50,"变电所","一月");
dataset.setValue(70,"变电所","二月");
dataset.setValue(60,"变电所","三月");
dataset.setValue(80,"变电所","四月");
dataset.setValue(55,"变电所","五月");
dataset.setValue(50,"变电所","六月");
dataset.setValue(70,"接触网","一月");
dataset.setValue(90,"接触网","二月");
dataset.setValue(65,"接触网","三月");
dataset.setValue(100,"接触网","四月");
dataset.setValue(60,"接触网","五月");
dataset.setValue(80,"接触网","六月");
JFreeChartchart=ChartFactory.createLineChart(title,htitle,vtitle,
dataset,PlotOrientation.VERTICAL,true,true,true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
Fontfont=newFont("黑体",Font.CENTER_BASELINE,20);
//设置图片标题的字体和大小
TextTitle_title=newTextTitle(title);
_title.setFont(font);
chart.setTitle(_title);
finalShape[]shapes=newShape[3];
int[]xpoints;
int[]ypoints;
xpoints=newint[]{-3,3,-3};
ypoints=newint[]{-3,0,3};
shapes[0]=newPolygon(xpoints,ypoints,3);
shapes[1]=newRectangle2D.Double(-2,-3,3,6);
xpoints=newint[]{-3,3,3};
ypoints=newint[]{0,-3,3};
shapes[2]=newPolygon(xpoints,ypoints,3);
finalDrawingSuppliersupplier=newDefaultDrawingSupplier(
DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
shapes
);
finalCategoryPlotplot=chart.getCategoryPlot();
plot.setDrawingSupplier(supplier);
plot.getRenderer().setSeriesStroke(
0,
newBasicStroke(
2.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND,
1.0f,newfloat[]{10.0f,6.0f},0.0f
)
);
plot.getRenderer().setSeriesStroke(
1,
newBasicStroke(
2.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND,
1.0f,newfloat[]{6.0f,6.0f},0.0f
)
);
plot.getRenderer().setSeriesStroke(
2,
newBasicStroke(
2.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND,
1.0f,newfloat[]{2.0f,6.0f},0.0f
)
);
finalLineAndShapeRendererrenderer=(LineAndShapeRenderer)plot.getRenderer();
//renderer.setDrawShapes(true);
renderer.setItemLabelsVisible(true);
//renderer.setLabelGenerator(newStandardCategoryLabelGenerator());
finalNumberAxisrangeAxis=(NumberAxis)plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(false);
rangeAxis.setUpperMargin(0.12);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(newStandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(newFont("黑体",Font.PLAIN,12));
renderer.setItemLabelsVisible(true);
ItemLabelPositionitemlabelposition=newItemLabelPosition();
renderer.setPositiveItemLabelPosition(itemlabelposition);
plot.setRenderer(renderer);
//把生成的图片放到临时目录
ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection());
filename=ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session);
ChartUtilities.writeImageMap(pw,filename,info,true);
pw.flush();
}
catch(Exceptione){
filename="error.png";
}
returnfilename;
}
}
三、Jsp页面
上一步写好了JavaBean,在jsp页面可以这样使用,见源码:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.io.PrintWriter"%>
<%@pageimport="com.test.chart.*"%>
<%@pageimport="java.util.*"%>
<%
TestChartwebchart=newTestChart();
Stringfilename,graphURL;
//*饼图
filename=webchart.RygcP