Spark Streaming 项目实战(12)—— Web层开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/85104535

1 Web 层开发

1.1 POM 添加依赖

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

1.2 StatApp.java

package com.streaming.project.spark;

import com.streaming.project.dao.CourseClickCountDAO;
import com.streaming.project.domain.CourseClickCount;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
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.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName StatApp
 * @Description Web层开发
 * @Author tzb
 * @Date 2018/12/19 18:25
 * @Version 1.0
 **/
@RestController
public class StatApp {

    private static Map<String, String> courses = new HashMap<>();

    static {
        courses.put("112", "Hadoop实战");
        courses.put("128", "Spark快速入门");
        courses.put("145", "Scala 入门");
        courses.put("146", "Python 爬虫");
        courses.put("130", "数据结构与算法分析");
        courses.put("131", "Spark SQL项目实战");

    }

    @Autowired
    CourseClickCountDAO courseClickCountDAO;

//    @RequestMapping(value = "/course_click_dynamic", method = RequestMethod.GET)
//    public ModelAndView courseClickCount() throws IOException {
//        ModelAndView view = new ModelAndView("index");
//
//        List<CourseClickCount> list = courseClickCountDAO.query("20181219");
//
//        for (CourseClickCount model : list) {
//            model.setName(courses.get(model.getName().substring(9)));
//        }
//
//        JSONArray json = JSONArray.fromObject(list);
//
//        view.addObject("data_json",json);
//
//        return view;
//    }


    @RequestMapping(value = "/course_click_dynamic", method = RequestMethod.POST)
    @ResponseBody
    public List<CourseClickCount> courseClickCount() throws IOException {

        List<CourseClickCount> list = courseClickCountDAO.query("20181219");

        for (CourseClickCount model : list) {
            model.setName(courses.get(model.getName().substring(9)));
        }

        return list;
    }


    @RequestMapping(value = "/echarts", method = RequestMethod.GET)
    public ModelAndView echarts() {
        return new ModelAndView("echarts");
    }

}


1.3 echarts.html

  • 添加 jquery.js文件
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>stat</title>
    <!-- 引入 ECharts 文件 -->
    <script src="js/echarts.min.js"></script>

    <!--引入 jQuery 文件-->
    <script src="js/jQuery.js"></script>
</head>
<body>

通过 /echarts 请求跳转过来的页面

<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="main"
     style="width: 600px;height:400px;position: absolute;top:50%;left: 50%;margin-top:-200px;margin-left:-300px"></div>

<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    // 指定图表的配置项和数据
    var option = {
        title: {
            text: '实时流处理统计结果之访问量统计',
            subtext: '实战课程访问次数',
            x: 'center'
        },
        tooltip: {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient: 'vertical',
            left: 'left'
        },
        series: [
            {
                name: '访问次数',
                type: 'pie',
                radius: '55%',
                center: ['50%', '60%'],
                data: (function () { //<![CDATA[
                    var datas = [];
                    $.ajax({
                        type: "POST",
                        url: "/spark-streaming/course_clickcount_dynamic",
                        dataType: 'json',
                        async: false,
                        success: function (result) {
                            for (var i = 0; i < result.lenght; i++) {
                                datas.put({"value":result[i].value,"name":result[i].name})
                            }
                        }
                    })
                    return datas;
                    //]]>
                }),
                itemStyle: {
                    emphasis: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
            }
        ]
    };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>

</body>
</html>

访问 http://localhost:8081/spark-streaming/echarts

2 功能扩展

Spring Boot 整合 Echarts 动态获取HBase数据

  1. 动态传递当天的时间:在页面放一个时间插件(jQuery插件),默认只取当天数据;
  2. 自动刷新展示图:每隔一定时间请求刷新当前的数据

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/85104535