基于Servlet的Echarts例子(2018-12-26更新)

引子

ECharts是百度出品的,一个使用 JavaScript 实现的开源可视化库。程序员在Web页面上引入并稍做配置就能作出漂亮的数据图表。javascript

本篇文章简单介绍一下如何在JSP中使用Echarts,例子图以下:
html

上手

图表显示是须要数据的,可是Echarts官网教程中为了演示方便直接在页面js中填入数据,如Demo-将来一周气温变化所示。“周1、周二..”等数据都直接在页面写好:前端

xAxis : [
        {
            type : 'category',
            boundaryGap : false,
            data : ['周一','周二','周三','周四','周五','周六','周日']
        }
    ]

一般展现数据的页面须要动态的从远程服务器将数据取出放入图表。熟悉ajax的人,天然能够将上面的代码稍做修改实现动态取数据,这里尝试使用JSP来从服务器端获取数据。java

HTML页面端参考代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 引入 ECharts 文件 -->
<script src="js/echarts.common.min.js"></script>
<script src="js/jquery-3.2.1.js"></script>
<title>Echarts4示例</title>
</head>
<body>
<div>Echarts4示例</div>
    <!-- 为 ECharts 准备一个具有大小(宽高)的 DOM -->
    <div id="main" style="width: 600px; height: 400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        var url = 'GetAllDataServlet';//得到销量、营业额、x轴的数据
        $.getJSON(url).done(function(json) {//向url请求数据,若是成功,将数据放到json
            // 2.从json中得到数据
            salesVolume = json.salesVolume;//销量
            bussinessVolume = json.bussinessVolume;//营业额
            months = json.months;//月份

            // 3.配置option
            var option = {
                title : {
                    text : 'ECharts 入门示例'
                },
                tooltip : {},
                legend : {
                    data : [ '销量' ],
                    data : [ '营业额' ]
                },
                xAxis : {
                    data : months
                },
                yAxis : {},
                series : [ {
                    name : '销量',
                    type : 'bar',
                    data : salesVolume
                }, {
                    name : '营业额',
                    type : 'line',
                    data : bussinessVolume
                } ],
                toolbox : {
                    show : true,
                    feature : {
                        mark : {
                            show : true
                        },
                        dataView : {
                            show : true,
                            readOnly : false
                        },
                        magicType : {
                            show : true,
                            type : [ 'line', 'bar' ]
                        },
                        restore : {
                            show : true
                        },
                        saveAsImage : {
                            show : true
                        }
                    }
                }
            }
            myChart.setOption(option);
        })
    </script>
</body>
</html>

这里的$.getJSON(url).done(function(json) ..使用了jQuery的ajax API,访问url指向的servlet,从servlet返回的数据放到json变量中。jquery

服务器端参考代码

@WebServlet("/GetAllDataServlet")
public class GetAllDataServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public GetAllDataServlet() {
            super();
        }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*销量*/
        Integer[] salesVolume = {10,100,20,56,35,80};
        /*营业额*/
        double[] bussinessVolume = {10*10,100*8.5,20*9.5,56*9,35*9.5,80*9};
        /*横轴, 月份数据*/
        String[] months = {"1","2","3","4","5","6"};
        
        Map<String, Object> map = new HashMap<>();
        map.put("salesVolume", salesVolume);
        map.put("bussinessVolume",bussinessVolume);
        map.put("months", months);
        
        response.getWriter().println(JSON.toJSONString(map));
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

这里使用了阿里开发的FastJson库将map中的值转换成Echarts可识别的json字符串,格式形如:ios

{"bussinessVolume":[100.0,850.0,190.0,504.0,332.5,720.0],"months":["1","2","3","4","5","6"],"salesVolume":[10,100,20,56,35,80]}

其余:
实际上你也能够不用json工具,彻底手写获得上述格式化字符串。git

项目代码阅读指南:程序员

  1. GetAllDataServlet.java,echart4.html是前端访问Servlet得到echarts所需数据的一个示例。
  2. index.jsp里面包含了有用的参考连接。重点掌握其中使用jQuery实现ajax带参数请求,详见里面jQuery $.post() 方法

参考资料:

项目相关Git地址,若是不会使用Git,建议克隆下来,而后将相关代码复制粘贴到新建的Dynamic Web Project相应目录中。
本项目的EclipseJEE的参考代码-代码较老
Echarts Example,里面包含了不少图表示例是文档。
JQuery Ajax, Axios, Fetch区别之我见,该文主要讲解发起Ajax的请求的几种经常使用方法,如今经常使用Axios,2018-12更新。ajax

相关文章
相关标签/搜索