基于Spring MVC的ECharts动态数据实时展示

基于SpringMVC进行ECharts动态实时数据展示,ECharts的官网示例是前端的js动态随机数据,没有与后端程序进行交互,由于本人之前对Spring MVC和ajax不太了解,所以,走了很多弯路,通过这部分的学习,让自己对MVC架构和简单的ajax有了初步的了解,下面就记录一下自己搭建的这部分程序。

首先需要配置web.xml,设置好servlet和filter,这部分可以参考众多spring示例,这里就不赘述了。

接下来就是需要将echarts的相关代码写入到一个jsp文件,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <title>line</title> 
     <script src="plugin/echarts.js"></script>
     <script src="plugin/jquery-1.8.2.min.js"></script>
    </head> 
     
    <body> 
           <h1>动态数据图表展示</h1>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom --> 
         <div id="main" style="height:400px"></div> 
     
        <script type="text/javascript" language="javascript"> 
            var myChart; 
            var eCharts; 
     
            require.config({ 
                paths : { 
                    ‘echarts‘ : ‘plugin‘ , 
                } 
            }); 
     
            require( 
                [ ‘echarts‘,  
                  ‘echarts/chart/line‘,
                  ‘echarts/chart/bar‘
                ], DrawEChart //异步加载的回调函数绘制图表 
            ); 
     
            //创建ECharts图表方法 
            function DrawEChart(ec) { 
                eCharts = ec; 
                myChart = eCharts.init(document.getElementById(‘main‘)); 
                myChart.showLoading({ 
                   text : "图表数据正在努力加载..." 
                }); 
                //定义图表options 
                var options = { 
                    title : { 
                        text : "未来一周气温变化", 
                        subtext : "纯属虚构", 
                        sublink : "http://www.baidu.com" 
                    }, 
                    tooltip : { 
                           show: true,
                        trigger : ‘axis‘ 
                    }, 
                    legend : { 
                        data : [ "测试" ] 
                    }, 
                    toolbox : { 
                        show : true, 
                        feature : { 
                            mark : { show : true}, 
                            dataView : {show : true,  readOnly : false}, 
                            magicType : {show : true,  type : [ ‘line‘, ‘bar‘ ] }, 
                            restore : {show : true }, 
                            saveAsImage : {show : true } 
                        } 
                    }, 
                    calculable : true, 
                    xAxis : [ { 
                        type : ‘category‘, 
                        boundaryGap : false, 
                        data : [ ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘ ] 
                    } ], 
                    yAxis : [ { 
                        type : ‘value‘, 
                        axisLabel : { 
                            formatter : ‘{value} °C‘ 
                        }, 
                        splitArea : { 
                            show : true 
                        } 
                    } ], 
                   grid : { 
                        width : ‘90%‘ 
                    }, 
                    series : [ { 
                        name : ‘最高气温‘, 
                        type : ‘line‘, 
                        data : [ 1, 11, 18, 11, 15, 11, 8 ],//必须是Integer类型的,String计算平均值会出错 
                        markPoint : { 
                            data : [
                                     {type : ‘max‘, name : ‘最大值‘},
                                     {type : ‘min‘,  name : ‘最小值‘}
                                     ] 
                        }, 
                        markLine : { 
                            data : [
                                     {type : ‘average‘, name : ‘平均值‘}
                                     ] 
                        } 
                    } ] 
                }; 
               
                myChart.setOption(options); //先把可选项注入myChart中 
                myChart.hideLoading();
                timeId = setInterval("getChartData();",2000);
                //getChartData();//aja后台交互  
            } 
        </script> 
     
     
        <script type="text/javascript"> 
            function getChartData() { 
                //获得图表的options对象 
                var options = myChart.getOption(); 
                //通过Ajax获取数据 
                $.ajax({ 
                    type : "post", 
                    async : false, //同步执行 
                    url : "getDynmicLineData.do", 
                    data : {}, 
                    dataType : "json", //返回数据形式为json
                    success : function(result) { 
                        if (result) { 
                            options.legend.data = result.legend; 
                            options.xAxis[0].data = result.category; 
                            options.series[0].data = result.series[0].data; 
                                                //alert(options.series[0].data);
                                               
                                                myChart.hideLoading();
                            myChart.setOption(options); 
                        } 
                    }, 
                    error : function(errorMsg) { 
                        alert("不好意思,大爷,图表请求数据失败啦!"); 
                        myChart.hideLoading(); 
                    } 
                }); 
            } 
        </script> 
    </body> 
    </html>

其中getChartData函数中主要是ajax的请求交互代码部分,url : "getDynmicLineData.do"代码是在调用getChartData函数时,ajax向后端程序所请求的URL,通过spring的配置,在控制类controller中进行设置@RequestMapping,来匹配动态响应的代码。

Controller类的代码如下:

package controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import service.PersonService;
import entity.EchartData;
import entity.Person;
import entity.Series;
@Controller
public class LoginController {
      
       //域名访问跳转到登录页
       @RequestMapping("/")   
       public String index(){   
              return "login";   
       }
      
       //登录跳转到首页
       @RequestMapping(value="/login",method = RequestMethod.POST)
       public ModelAndView login(String nickname){
              ModelAndView mv = new ModelAndView();
              mv.setViewName("home/index");
              mv.addObject("nickname",nickname);
              return mv;
       }
      
//       //获取动态信息
       @RequestMapping(value="/getDynmicLineData.do")
       @ResponseBody //添加该注释后,返回值将由转换器进行转换,转换器为Jackson,所以会转换成json格式
       public EchartData getDynmicLineData() { 
        List<String> legend = new ArrayList<String>(Arrays.asList(new String[]{"最高气温"}));//数据分组 
        List<String> category = new ArrayList<String>(Arrays.asList(new String []{"周一","周二","周三","周四","周五","周六","周日"}));//横坐标 
        List<Series> series = new ArrayList<Series>();//纵坐标 
        
        Random random = new Random();
        int rand = random.nextInt();
        ArrayList<Long> temp = new ArrayList<>();
       
        for (int i = 0; i < 7; i++) {
               rand = Math.abs(random.nextInt()%50);
                     temp.add((long) rand);
              }
        series.add(new Series("最高气温", "line", temp)); 
        EchartData data=new EchartData(legend, category, series); 
        return data; 
    } 
}

至此,就完成了整个的数据交互的过程,前端javascript定时调用js函数,js函数中包含ajax动态请求代码,其中的url匹配到后端的controller类中的@RequestMapping,然后通过return进行数据向前端发送,进而展示,以达到动态实时展示的目的。

时间: 2024-12-06 16:12:18

基于Spring MVC的ECharts动态数据实时展示的相关文章

基于Spring MVC 实现拦截器

Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的,利用拦截器可以实现更加方便的数据验证处理. 1,认识拦截器 所谓的拦截器指的是在用户和具体操作的Action之间做了一个屏障,以保证提交到提交到Action的数据是真实有效的数据: 如果要想实现拦截器的操作处理,那么必须掌握"org.springframework.web.servlet.Handl

基于spring mvc 移动终端后台开发

基于spring mvc 移动终端后台开发 研发背景 到年底了,很多项目都要突击完成,我们自己的"问题及知识管理平台"移动端研发也到了不能再拖的地步,所以需要在后台集成移动端框架.由于后台架构采用spring mvc+hibernate,并且近期也深入的研究过spring mvc,所以就不想沿用已有成熟的整合方案<HTML5企业移动应用解决方案V1.0.doc>,尝试完全应用spring framework技术实现移动端后台架构. 根据技术特点和我的一些架构封装想法,给自己

基于 Spring 和 iBATIS 的动态可更新多数据源持久层

前言 我们时常会遇到一些 web 项目,需要从不同的数据源中抓取数据来进行分析,而这些数据源是有可能变化的,需要用户来进行动态的维护和添加.可是,大多数的 web 程序使用了应用服务器或者容器中间件来管理数据源的生命周期,因此数据源的变化自然不能够独立于程序,而需要由专业人士去进行维护,必要时还需要重新发布程序来适应数据源的变化,而且数据源的个数.数据库的类型也都会有所限制. 那么怎样才可以突破以上这些局限,彻底实现由用户远程对数据源进行维护和管理的需求呢?本文提出了一个有效的解决方案,该方案的

Echarts 学习系列(3)-Echarts动态数据交互

写在前面 上一小节,我们总结了折线(面积)图.柱状(条形)图.饼(圆环)图类型的图表. 但是,都是静态的.接下来的,这一小节,总结的是Echarts 动态数据的交换. 前置条件 开发环境:win10 家庭版 开发工具:Visual Studio 2019 数据库:MySQL 数据连接工具:Navicat Premium 使用技术:.Net Mvc+Dapper 创建数据库 //创建 sys_visitoronhour DROP TABLE IF EXISTS `sys_visitoronhour

基于spring mvc的图片验证码实现

基于spring mvc的图片验证码实现 标签: springmvcspring mvc验证码验证码验证 2016-01-28 10:49 8015人阅读 评论(4) 收藏 举报  分类: 表单处理 版权声明:本文为博主原创文章,未经博主允许不得转载. 本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) public void getAuthCode(HttpServ

spring mvc 的jpa JpaRepository数据层 访问方式汇总

spring mvc 的jpa JpaRepository数据层 访问方式汇总 博客分类: spring jpa springjpaJpaRepository 本文转载至:http://perfy315.iteye.com/blog/1460226 AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,下面就对Spring Data相关知识作一个较为详细的描述. 1.Spring Data所解决的问题 Spring Data :提供了一整套数据访问层(DA

项目构建之maven篇:8.maven发布web工程及基于spring mvc,jetty实现的用户管理demo

web工程目录结构 pom/pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&qu

Spring boot 基于Spring MVC的Web应用和REST服务开发

Spring Boot利用JavaConfig配置模式以及"约定优于配置"理念,极大简化了基于Spring MVC的Web应用和REST服务开发. Servlet: 1 package org.windwant.spring.servlet; 2 3 import javax.servlet.Servlet; 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import j

基于Spring MVC的Web应用开发(三) - Resources

基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的web.xml配置的DispatcherServlet对应的url-pattern为"/",即所有的URL请求都会经过 Spring MVC的处理.实际的Web项目有大量的资源文件,如javascript文件,css文件,png,jpg等图片文件,甚至是Flash等等,我们没有 必要对这些静态