现手上有个项目,要做一个实时监控刷新图表(折线图),网上资料大多是直接从官网上下载的例子,实时从后台取数据到前台展示的资料不多,现把最近几天研究的Demo分享一下:
1. Jsp: liveTest.jsp
代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>折线图</title>
<script type="text/javascript"
src="<%= path%>/script/utils/jquery.min.js"></script>
<script type="text/javascript">
//很多参数不懂,看api去吧
$(function () {
Highcharts.setOptions({
global: {
useUTC: false
}
});
var chart;
$(document).ready(function() {
var options = {
chart: {
renderTo: 'container',
type: 'spline',
marginRight: 10,
events: {
load: function() {
var series = this.series;
setInterval(function() {
var url = "<%=basePath%>/singins.do?method=getDataToJsonNew"; // 实时获取最新数据
$.ajax({
url: url,
type: "post",
cache: false,
dataType: "json",
data: {},
ifModified: false,
success: function(result){
jQuery.each(result, function(m, obj) {
var x = (new Date()).getTime();
var y0 = obj.value0;
var y1 = obj.value1;
var y2 = obj.value2;
series[0].addPoint([x, parseInt(y0)], true, true);
series[1].addPoint([x, parseInt(y1)], true, true);
series[2].addPoint([x, parseInt(y2)], true, true); //第三个参数为true,才能实时重画图表
});
}
});
}, 15000);
}
}
},
title: {
text: '10000号实时监控系统'
},
subtitle: {
text: '排班量,话务量'
},
xAxis: {
type: 'datetime',
tickPixelInterval: 100,
},
yAxis: {
title: {
text: 'Value'
},
startOnTick: true, //为true时,设置min才有效
min: 0,
//minorTickInterval: 'auto',// y轴样式 网格的形式
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
legend: {
align: 'left',
verticalAlign: 'top',
y: 20,
floating: true,
borderWidth: 0
},
tooltip: {
crosshairs: true,
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>值:'+
Highcharts.numberFormat(this.y, 2) +'<br/>时间:'+
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x);
}
},
credits: {
enabled: false
},
plotOptions: {
series: {
cursor: 'pointer',
point: {
events: {
click: function() {
hs.htmlExpand(null, {
pageOrigin: {
x: this.pageX,
y: this.pageY
},
headingText: this.series.name,
maincontentText: '值:' + this.y +':<br/>时间:'+
Highcharts.dateFormat('%Y-%m-%e %H:%M:%S', this.x),
width: 200
});
}
}
},
marker: {
lineWidth: 1
}
}
},
series: [{
name: '排班量'
}, {
name: '话务量'
}, {
name: '接通量'
}]
};
var url = "<%=basePath%>/singins.do?method=getDataToJson";
$.ajax({
url: url,
type: "post",
cache: false,
dataType: "json",
data: {},
ifModified: false,
success: function(result){
var paiBan = [];
var huaWu = [];
var jieTong = [];
var time = (new Date()).getTime();
jQuery.each(result, function(m, obj) {
paiBan.push([
time + (m -19) * 15000,
parseInt(obj.value0) //此处相当重要,就是这里,让我纠结了N小时,直接obj.value是不行的,不知道为什么
]);
huaWu.push([
time + (m -19) * 15000,
parseInt(obj.value1) //此处相当重要,就是这里,让我纠结了N小时,直接obj.value是不行的,不知道为什么
]);
jieTong.push([
time + (m -19) * 15000,
parseInt(obj.value2) //此处相当重要,就是这里,让我纠结了N小时,直接obj.value是不行的,不知道为什么
]);
});
options.series[0].data = paiBan;
options.series[1].data = huaWu;
options.series[2].data = jieTong;
chart = new Highcharts.Chart(options);
}
});
});
});
</script>
</head>
<body>
<script src="<%= path%>/js/highcharts.js"></script>
<script src="<%= path%>/js/modules/exporting.js"></script>
<script type="text/javascript"
src="
>
<script type="text/javascript"
src="
http://www.highcharts.com/highslide/highslide.config.js"
charset="utf-8"></script>
<link rel="stylesheet" type="text/css"
href="
http://www.highcharts.com/highslide/highslide.css" />
<div id="container"
style="min-width: 400px; height: 400px; margin: 0 auto"></div>
</body>
</html>
2.后台相关代码:
/**
*
* @Title getDataToJson
* @Description 把后台数据转换为JSON
* @param mapping
* @param form
* @param request
* @param response
* @return
* @date Aug 8, 2012
*/
@SuppressWarnings("unchecked")
public ActionForward getDataToJson(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
List list90 = singinService.getSinginList(null);
List<TestBean> list = new ArrayList<TestBean>(); //模拟数据
for (int i = -19; i <= 0; i++) {
TestBean tb = new TestBean();
Random random = new Random();
String value0 = String.valueOf(random.nextInt(10));
String value1 = String.valueOf(random.nextInt(10));
String value2 = String.valueOf(random.nextInt(10));
tb.setValue0(value0);
tb.setValue1(value1);
tb.setValue2(value2);
list.add(tb);
}
JSONArray jsonArray = JSONArray.fromObject(list); //封装成Json
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/json;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
* @Title getDataToJsonNew
* @Description 最新时间点数据
* @param mapping
* @param form
* @param request
* @param response
* @return
* @date Aug 10, 2012
*/
public ActionForward getDataToJsonNew(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
try {
List<TestBean> list = new ArrayList<TestBean>();
TestBean tb = new TestBean();
Random random = new Random();
String value0 = String.valueOf(random.nextInt(10));
String value1 = String.valueOf(random.nextInt(10));
String value2 = String.valueOf(random.nextInt(10));
tb.setValue0(value0);
tb.setValue1(value1);
tb.setValue2(value2);
list.add(tb);
JSONArray jsonArray = JSONArray.fromObject(list); //封装成Json
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/json;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3.有图有真相
- 大小: 86.9 KB
分享到:
相关推荐
Highcharts是一款强大...总结,通过Java后端与Highcharts和Ajax的结合,我们可以实现动态实时的图表展示。这在数据分析、监控系统等场景中非常实用。理解并熟练掌握这一技术,将有助于提升Web应用的用户体验和交互性。
这种架构在实时监控、数据分析、仪表盘等场景下非常常见,因为它可以实现实时刷新的图表,用户无需手动刷新页面即可看到最新的数据变化。 总结来说,这个例子涉及到的关键知识点有: 1. Highcharts:JavaScript...
这种实践对于实时数据监控、数据分析展示等场景非常有用,它允许用户在不刷新页面的情况下获取最新的数据信息。 总结起来,"Highcharts json demo"项目展示了如何利用Highcharts与JSON数据结合,实现异步请求和数据...
可以使用定时器(如`setInterval`)每隔一定时间更新数据源,然后调用`series.setData()`方法刷新图表。同时,为了模拟电脑CPU实时动态变化,可以设计一个模拟函数生成随机数据。 ```javascript function ...
在大屏监控面板中,jQuery可以帮助我们更高效地实现数据轮播、图表刷新等功能。 五、数据可视化库 对于数据展示,JavaScript库如D3.js、ECharts、Highcharts等非常实用。这些库提供了丰富的图表类型(如折线图、...
- **AJAX**:异步更新数据,实现图表的实时刷新。 - **jQuery**:可能用于简化DOM操作和事件处理,与Highcharts库集成。 5. **部署与运行环境**: - **Tomcat或Jetty**:作为常见的Java Web服务器,用于部署和...
同时,还可以利用Ajax技术实时更新数据,使得图表能够动态反映系统的实时状态。 总结起来,jQuery统计图插件是数据可视化的强大工具,它们通过线形图、饼形图和柱形图等形式,帮助开发者将复杂的数据转化为易于理解...
同时,也需要一个图表库,如Highcharts、ECharts、D3.js等,这些库能根据接收到的数据绘制出各种类型的图表,如柱状图、折线图、饼图、散点图等。 以下是一个简单的Ajax图表生成的步骤: 1. **数据请求**:使用...
在IT行业中,自定义表格自动刷新数据是一种常见的需求,特别是在数据可视化、数据分析或者实时监控的场景下。这个主题涉及到前端开发、后端服务以及数据处理等多个方面。下面将详细讲解这个知识点。 首先,自定义...
在实际的应用场景中,可能需要实时更新数据,可以通过设置定时器(如`setInterval`)定期重新加载数据并调用`chart.redraw()`方法来刷新图表。 总结起来,通过结合jQuery和Highcharts库,我们可以方便地在网页上...
这种实时性对于监控大量动态数据的应用至关重要,如服务器性能监控、物联网设备状态显示或者金融市场的实时图表。 要实现这样的控件,开发者需要考虑以下几个关键点: 1. **服务器端实现**:在服务器端,你需要...
【摘要】本文主要探讨了如何设计一个基于PHP和MYSQL的校园电能监测网站,该网站能够实时监控并展示校园不同区域的用电情况,实现能源的分布式监控与集中管理。通过前端Bootstrap框架和jQuery库构建用户界面,采用B/S...
可能包括使用JavaScript库如jQuery、D3.js或者Highcharts等来生成图表,以及如何通过HTML和CSS进行页面布局和样式设计。 标签“源码”和“工具”暗示了可能会有具体的代码示例或者推荐的工具来帮助实现这个功能。...
2. **数据可视化**:JavaScript库如D3.js、Chart.js或Highcharts等用于将监控数据转化为图表,如折线图、柱状图、饼图等,帮助运营人员直观地理解系统性能。 3. **事件监听**:JavaScript可以监听用户操作,如点击...
4. **AJAX**:可能会讲解AJAX(Asynchronous JavaScript and XML)技术,它是实现Web页面不刷新情况下更新内容的重要手段,对于动态图表的实时更新至关重要。 5. **JSON与XML数据交换**:在现代Web应用中,通常使用...
图像化展示通常会使用JavaScript库,例如D3.js或Highcharts,来创建交互式的图表,使得数据更易于理解和分析。 【标签】"java 服务器 ajax"揭示了这个项目的三个关键技术领域: 1. **Java**:这是后端的主要编程...
4. **图表库**:为了展示统计数据,可能采用了像`ECharts`、`D3.js`、`Highcharts`这样的图表库,它们提供丰富的图表类型,如柱状图、折线图、饼图等,且支持自定义配置和交互功能。 5. **数据接口和API通信**:...
在IT行业中,实时数据可视化是数据分析和展示的重要环节,特别是在Web应用中。...通过结合这些技术,我们可以实现在Web应用中展示实时动态曲线图的功能,这对于监控系统状态、数据分析等场景非常有用。