第三周课堂测试第二阶段笔记
这是要求,根据要求选择使用ECharts的map,然后对应的数据使用老师提供的数据库。
一、实体:
因为需要显示省份对应的患者人数、疑似人数(所给库中该列数值都为空,此处不添加了)、治愈人数、死亡人数,所以实体集的字段为---省份名、确诊人数、死亡人数、治愈人数。
package pojo; public class MapData { private String name; private String value; private String dead; private String cure; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getDead() { return dead; } public void setDead(String dead) { this.dead = dead; } public String getCure() { return cure; } public void setCure(String cure) { this.cure = cure; } }
二、主页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css" /> <script src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script> <script src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script> <script src="${pageContext.request.contextPath }/js/echarts.min.js"></script> <script src="${pageContext.request.contextPath }/js/china.js"></script> <title>Insert title here</title> </head> <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: 800px;;height:600px;"></div> <script> var chart = echarts.init(document.getElementById('main')); chart.setOption({ title: { text: '全国地图', subtext: '该页面的数据仅供参考', }, tooltip: { formatter:function(params){ return params.name+'<br />'+'确诊人数:'+params['data']['value']+'<br />'+'死亡人数:' +params['data']['dead']+'<br />'+'治愈人数:'+params['data']['cure']; }//数据格式化 }, toolbox: { show: true, orient: 'vertical', left: 'right', top: 'center', feature: { dataView: {readOnly: false}, restore: {}, saveAsImage: {} } }, visualMap: { min: 0, max: 40000, left: 'left', top: 'bottom', text: ['多','少'], inRange: { color: ['lightskyblue', 'yellow', 'orangered'] }, show:true }, series: [{ type: 'map', map: 'china', label:{ show: true }, nameMap:{ "南海诸岛" : "南海诸岛", '北京' :'北京市', '天津' :'天津市', '上海' :'上海市', '重庆' :'重庆市', '河北' :'河北省', '河南' :'河南省', '云南' :'云南省', '辽宁' :'辽宁省', '黑龙江' : '黑龙江省', '湖南' :'湖南省', '安徽' :'安徽省', '山东' :'山东省', '新疆' :'新疆维吾尔自治区', '江苏' :'江苏省', '浙江' :'浙江省', '江西' :'江西省', '湖北' :'湖北省', '广西' : '广西壮族自治区', '甘肃' :'甘肃省', '山西' :'山西省', '内蒙古' : "内蒙古自治区", '陕西' :'陕西省', '吉林' :'吉林省', '福建' :'福建省', '贵州' :'贵州省', '广东' :'广东省', '青海' :'青海省', '西藏' :'西藏自治区', '四川' :'四川省', '宁夏' :'宁夏回族自治区', '海南' :'海南省', '台湾' :'台湾', '香港' :'香港', '澳门' :'澳门' } } ] }); //异步加载数据 $.ajax({ type : "post", async : true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行) url : "${pageContext.request.contextPath }/getMapData", //请求发送到TestServlet处 success : function(resultJson) { var result= jQuery.parseJSON(resultJson); //请求成功时执行该函数内容,result即为服务器返回的json对象 if (result) { chart.setOption({ //加载数据图表 series: [{ data: result }] }); } }, error : function(errorMsg) { //请求失败时执行该函数 alert("图表请求数据失败!"); } }); </script> </body> </html>
因为数据库中的省份名称跟echarts的china地图中的名称不对应,所以做了参数名的映射。
鼠标移到省份高亮显示echarts已经帮我们完成了,所以只需要完成显示信息即可。
tooltip: { formatter:function(params){ return params.name+'<br />'+'确诊人数:'+params['data']['value']+'<br />'+'死亡人数:' +params['data']['dead']+'<br />'+'治愈人数:'+params['data']['cure']; }//数据格式化 }
为信息的显示,我返回的数据格式是:
{name:'省份名',value:'确诊人数',dead:'死亡人数',cure:'治愈人数'}
在网上搜寻了数小时后终于找到了显示该格式的数据的方法:params['data']['要展示的数据字段名称']
于是数据展示部分也完成了
三、servlet
package web; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.gson.Gson; import dao.InfoDao; import pojo.MapData; import pojo.MyInfo; import pojo.ProvinceInfo; /** * Servlet implementation class GetMapData */ @WebServlet("/getMapData") public class GetMapData extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); InfoDao dao = new InfoDao(); List<ProvinceInfo> infoList = null; try { infoList = dao.getAllInfo(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } List<MapData> myInfoList = new ArrayList<MapData>(); for (ProvinceInfo province : infoList) { MapData info = new MapData(); info.setName(province.getProvince()); info.setValue(province.getConfirmed_num()); info.setDead(province.getDead_num()); info.setCure(province.getCured_num()); myInfoList.add(info); } Gson gson = new Gson(); String json = gson.toJson(myInfoList); response.getWriter().write(json); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
此处没有什么难处,从数据库中查询数据,序列化后给网页。
四、效果:
根据左侧的工具条可以筛选出相应的省份(符合条件的高亮显示):