JSP中生成数据统计图表的源码.docx

上传人:b****8 文档编号:10955400 上传时间:2023-02-23 格式:DOCX 页数:14 大小:92.23KB
下载 相关 举报
JSP中生成数据统计图表的源码.docx_第1页
第1页 / 共14页
JSP中生成数据统计图表的源码.docx_第2页
第2页 / 共14页
JSP中生成数据统计图表的源码.docx_第3页
第3页 / 共14页
JSP中生成数据统计图表的源码.docx_第4页
第4页 / 共14页
JSP中生成数据统计图表的源码.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

JSP中生成数据统计图表的源码.docx

《JSP中生成数据统计图表的源码.docx》由会员分享,可在线阅读,更多相关《JSP中生成数据统计图表的源码.docx(14页珍藏版)》请在冰豆网上搜索。

JSP中生成数据统计图表的源码.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1