Web开发系列 - FusionCharts

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

去年有好几个项目需要用到图表显示, 原打算使用JFreeChart的, 但感觉其在外观展示与交互性方面都不如一些Flash Chart来得酷, 在网上搜索相关资料时候发现很多人推荐FusionCharts, 自己看了一下效果, 确实挺不错的. 也考虑过使用VML来实现统计图表的显示, 就像我在上一篇博文Web开发系列 - VML介绍VML中所说, VML仅限于IE浏览器, 最终还是决定使用FusionCharts. FusionCharts是一个基于Flash的图表组件,可以用来提供数据驱动的动态图标,FusionCharts可用于任何网页脚本语言如, HTML格式,JSP, Asp.Net, PHP技术等等。提供交互式和强大的动态图标,FusionCharts充分利用流体美丽的Flash为模板,使用XML作为其数据接口,创造紧凑,互动和真正的动态图表. 更多内容可以阅读去年我转载的一篇介绍FusionCharts文章[转载] FusionCharts的研究, 其官方主页为http://www.fusioncharts.com/,  相关例子可以访问http://www.fusioncharts.com/LiveDemos.asp.

   结合自己在JSP项目中用户操作日志统计模块的实现, 来介绍FusionCharts中常见几种图表的实现过程. 当用户点击页面上的统计按钮时, 通过JavaScript对用户输入合法性进行验证判断后提交该请求, 由后台Servlet或Action对数据库中数据按照所需条件进行检索汇总, 得到的结果集按照FusionCharts控件所需的XML格式进行响应输出, 然后通过AJAX技术获取该XML内容给FusionCharts控件使用. 特别值得一提的是, FusionCharts附带的使用文档制作得很好, 非常全面具体, 按照其提供的文档去实现图表非常方便.

首先, 我们需要准备好用到的swf与FusionCharts.js等文件, 在JSP页面头部引入所需的JS文件. 这里AJAX库采用了精简之后的prototype, 大家可以采用自己熟悉擅长的,如JQuery, ext等JS库.

<script type="text/javascript" src="Admin/ecside/js/prototype_mini.js"></script>
<script type="text/javascript" language="javascript" src="Admin/JS/FusionCharts.js"></script>

其次, 提供图表显示所需的容器如一个Div, 这里我们提供了一个ID为chart1div的div

<div id="mbDIV" style="display: none;"></div>
<div id="loginDIV" style="top: 120px;left: 150px;display: none;" class="noprint">
<div id="loginTopDIV">
<div style="float:left;">日志统计情况div>
<div style="float:right;"><a href="javascript:onhidden();">[ 关闭 ]</a></div>
</div>
<div style="padding:15px;" class="noprint">
<div id="chart1div" ></div>
</div>
</div>

最后, 需要书写提交请求以及获取XML形式结果的JavaScript脚本

复制代码
  function  onShow()
ExpandedBlockStart.gif 
{
    
var logType=$('txtLogType').value;
    
var dt1=$('dt1').value;
    
var dt2=$('dt2').value;
    
    
// Define REST web service URL 
    var url = 'CountServlet';
    
// Prepare parameters to send into REST web service
    var pars="status=logCount&txtLogType="+logType+"&dt1="+dt1+"&dt2="+dt2;

    
// Make web service AJAX request via prototype helper, 
    // upon response, call showResponse method        
ExpandedSubBlockStart.gif
    new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: showResponse });
                       
    
//To pass parameters, URLEncode the dataURL. Use escape() in JavaScript 
    //var url = escape("CountServlet?status=logCount&txtLogType="+logType+"&dt1="+dt1+"&dt2="+dt2);
 }

 
  
//  Method invoked when page receives AJAX response from REST web service 
  function  showResponse(originalRequest)    
ExpandedBlockStart.gif 
{
    
var obj=document.getElementById('loginDIV');
    obj.style.top 
= "60px";
    obj.style.left 
= "200px";
    
var logType=document.getElementById('txtLogType').value;
    
var chartSWF;
    
if(logType == "-1")
ExpandedSubBlockStart.gif    
{
        chartSWF
="Admin/Charts/FCF_Column3D.swf";
    }

    
else
ExpandedSubBlockStart.gif    
{
        chartSWF
="Admin/Charts/Pie3D.swf";
    }

   
    chartSWF 
= chartSWF + "?ChartNoDataText=当前查询结果为空";
    
//Create another instance of the chart.
    var chart1 = new FusionCharts(chartSWF, "chart1Id""550""400""0""0");                   
    
var strXML = originalRequest.responseText;
    chart1.setDataXML(strXML);
    chart1.render(
"chart1div");
    show(
"loginDIV");
    show(
"mbDIV")
 }

 
复制代码

FCF_Column3D.swf

< graph  caption ="日志统计情况"  xAxisName ="日志类型"  yAxisName ="Amount"  rotateYAxisName ="0"  decimalPrecision ="0"  
formatNumberScale
="0"  baseFont ="Arial"  baseFontSize ="12" >
< set  name ="用户操作"  value ="70"  color ="AFD8F8"   />  
</ graph >  
 



Pie3D.swf

< graph   showNames = "1"   decimalPrecision = "0"   baseFont = "Arial"   baseFontSize = "12" >
< set   name = "Web客户端用户登录"   value = "10"   />  
< set   name = "Web客户端用户退出"   value = "5"   />  
< set   name = "客户端登录"   value = "12"   />  
< set   name = "客户端退出"   value = "12"   />  
< set   name = "录像回放"   value = "3"   />  
< set   name = "实时监控"   value = "28"   />  
</ graph >  


ScrollColumn2D.swf

复制代码
< chart  caption ="系统日志统计"  xAxisName ="用户"  yAxisName ="次数"  showValues ="0"  palette ="2"  shownames ="1"  legendBorderAlpha ="0"  useRoundEdges ="1"  
animation
="1"  decimalPrecision ="0"  formatNumberScale ="0"  baseFont ="Arial"  baseFontSize ="12" >
 
< categories >
  
< category  label ="管理员"   />  
  
< category  label ="FJSDXHXY"   />  
  
< category  label ="监控中心"   />  
  
< category  label ="维护人员"   />  
  
< category  label ="师大监控中心"   />  
  
</ categories >
  
< dataset  seriesName ="报警"  color ="AFD8F8"  showValues ="0" >
  
< set  value ="68"   />  
  
< set  value ="0"   />  
  
< set  value ="0"   />  
  
< set  value ="0"   />  
  
< set  value ="0"   />  
  
</ dataset >
  
< dataset  seriesName ="用户操作"  color ="8BBA00"  showValues ="0" >
  
< set  value ="4600"   />  
  
< set  value ="0"   />  
  
< set  value ="71"   />  
  
< set  value ="0"   />  
  
< set  value ="0"   />  
  
</ dataset >
</ chart >
复制代码



ScrollLine2D.swf
ContractedBlock.gif ScrollLine2D.swf



园友们相关文章

FusionCharts等产品简介

 

FusionCharts Free 图表库

FusionCharts 的XML标签属性

FusionCharts 组件 全Flash图表

蜡人张 FusionCharts Free


FusionCharts Free(1)

FusionCharts Free(2)

FusionCharts Free(3)

野路子实现的轻量级伪OLAP展示


另外附上C# WinForm开发系列相关文章如下: 

C# WinForm开发系列 - GDI+

C# WinForm开发系列 - ZedGraph

C# WinForm开发系列 - OWC

C# WinForm开发系列 - Chart Controls

C# WinForm开发系列 - Report

C# WinForm开发系列 - Print

C# WinForm开发系列 - 文章索引

Web开发系列 - VML


本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/07/25/1531087.html,如需转载请自行联系原作者。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5天前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
26 2
|
3天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
【7月更文挑战第24天】在 Python Web 开发领域, RESTful API 设计成为一种艺术, 关注用户体验与开发者友好性。
21 7
|
4天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
【7月更文挑战第23天】在Python Web开发中,RESTful API利用HTTP协议构建强大、灵活的应用。GET获取资源,如`/products/:id`;POST创建新资源;PUT更新;DELETE删除。正确使用状态码,如200、201、404、500,至关重要。JSON化数据与版本控制(如`/v1/products`)增强API实用性。认证(OAuth, JWT)保障安全性,而清晰的错误消息提升用户体验。掌握这些细节,方能设计出高性能、易用的RESTful API。
21 7
|
2天前
|
安全 IDE 测试技术
PHP 7新特性及其对现代Web开发的影响
【7月更文挑战第25天】在探索PHP最新版本的旅程中,我们将深入其核心,揭开PHP 7的新特性如何革新现代Web开发的神秘面纱。从性能优化到语法改进,本文将引导你领略PHP 7带来的变革,同时探讨这些变化如何影响开发者的日常编码实践和项目架构设计。
13 4
|
3天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
【7月更文挑战第24天】在Python的Web开发领域,掌握RESTful API至关重要。利用Flask框架,可迅速搭建API,进行用户管理的CRUD操作。需先安装Flask (`pip install Flask`),然后定义路由处理GET、POST、PUT、DELETE请求,实现用户数据的检索、创建、更新和删除。
20 5
|
4天前
|
API 数据安全/隐私保护 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
【7月更文挑战第23天】Python的RESTful API设计在Web开发中流行,提升效率与体验。REST强调HTTP方法(GET, POST, PUT, DELETE)操作资源。使用Flask框架可快速实现API,如管理用户信息。示例代码展示如何创建、读取、更新和删除用户,通过不同HTTP方法和URL路径。实际应用中,增加验证、错误处理和权限控制可增强API的安全性和稳定性。安装Flask后,可运行代码测试API功能。
25 6
|
5天前
|
数据挖掘 编译器 PHP
PHP 8新特性解析及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言带来了一系列创新特性,旨在提升性能、增强语法的易用性以及支持最新的编程范式。本文将深入探讨PHP 8中的JIT编译器、联合类型、匹配表达式等关键特性,并通过实际案例分析它们如何优化代码结构、提高执行效率,并简化日常开发工作,从而全面评估PHP 8对现代Web开发实践的深远影响。
|
1天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
7 1
|
4天前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
4天前
|
安全 算法 编译器
PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这个广泛使用的服务器端脚本语言带来了一系列令人兴奋的更新和改进。本文将深入探讨PHP 8中引入的关键新特性,以及这些变化如何影响现代Web开发实践。我们将通过实际案例和性能数据来分析这些新特性的实际应用,为开发者提供升级和采纳新版本的见解。