列宿乃施于上荣兮 日月才经于柍桭

………… 白驹过隙 岁月如斯 梦萦回绕 心灵之声
posts - 57, comments - 8, trackbacks - 0, articles - 41
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JFreeChart结合AJAX实现的WEB实时监控效果

Posted on 2010-07-07 21:01 默认为零 阅读(2054) 评论(0)  编辑  收藏 所属分类: 技术
  JFreeChart是一个开源的图表引擎,AJAX是WEB应用中JavaScript和XML相结合的一种异步技术,实现了页面无刷新动态更新的效果,属于WEB2.0的技术范畴。将两者结合起来,把系统的监控统计数据通过JFreeChart以图表形式展现出来,并通过AJAX定时刷新在页面上,就可以实现一种基于WEB的动态实时监控效果。

  第一部分,首先从JFreeChart主页下载其开发组件,一般为jfreechart-x.x.xx.zip。解压缩后根目录下有一个jfreechart-x.x.xx-demo.jar,这是一个开发demo包,把它运行起来就可以看到丰富多样的图表展现。运行命令:java -jar jfreechart-x.x.xx-demo.jar。
  下面看一个最简单的饼图构造例子(见下图1):

图1
  
  看一下這個很简单的图是怎么构造的。
  首先构造这个饼图的数据集:
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        pieDataset.setValue(
"One"43.2D);
        pieDataset.setValue(
"Two", 10D);
        pieDataset.setValue(
"Three"27.5D);
        pieDataset.setValue(
"Four"17.5D);
        pieDataset.setValue(
"Five", 11D);
        pieDataset.setValue(
"Six"19.4D);
  pieDataset就是这个数据集。下面再渲染展现这个数据集的图表对象:
        JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo 2", pieDataset, truetruefalse);
        PiePlot piePlot 
= (PiePlot) chart.getPlot();
        piePlot.setSectionPaint(
"One"new Color(160160255));
        piePlot.setSectionPaint(
"Two"new Color(128128223));
        piePlot.setSectionPaint(
"Three"new Color(9696191));
        piePlot.setSectionPaint(
"Four"new Color(6464159));
        piePlot.setSectionPaint(
"Five"new Color(3232127));
        piePlot.setSectionPaint(
"Six"new Color(00111));
        piePlot.setNoDataMessage(
"No data!"); //无数据时显示
        piePlot.setExplodePercent("Two"0.2D);
        piePlot.setLabelGenerator(
new StandardPieSectionLabelGenerator("{0} ({2} percent)")); //显示百分占比
        piePlot.setLabelBackgroundPaint(new Color(220220220));
        piePlot.setSimpleLabels(
true);
        piePlot.setInteriorGap(
0.0D);
  将数据集构造成图表对象chart,而chart的绘图区对象piePlot可以设置成多姿多彩的各种形式。完成这些操作之后,将chart对象通过输出流展现为用户可视界面,即为效果图。在这里需要生成可刷新替换的图片,因此通过org.jfree.chart.servlet.ServletUtilities这个JFreeChart工具类将chart转化成图片生成在磁盘介质上。当然,图片文件应该生成在应用环境中,这样,前端请求后就可以通过应用上下文访问到并返回。

  第二部分,即是将已生成的图片通过AJAX技术定时展现到界面上,形成一种动态的监控效果。这里简单介绍下要点,AJAX的实现和不再累述。
  页面中预先定义一个图片img对象:
<img id="image" src="<%=request.getContextPath()%>/images/wait.gif" border="0" usemap="#map">
  这里wait.gif是一个默认的预设等待效果图。
  AJAX异步结果响应后,将返回的图片URL更新到image的src值:
document.getElementById("image").src = "<%=request.getContextPath()%>/" + picURL;
  页面客户端加上JavaScript的定时机制后,定时请求后台响应后输出展现,达到了实时监控的效果。

  当然,前端的请求与后端的图片构造需要后台技术衔接,比如servlet。servlet给AJAX提供了请求入口,同时它也调用了JFreeChart引擎构造出丰富多彩的数据图表。整理后的简单架构示意图如下:


图2


只有注册用户登录后才能发表评论。


网站导航: