Echarts是什么,它一個使用 JavaScript 實現的開源可視化庫,可以流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器,底層依賴矢量圖形庫 ZRender,提供直觀,交互豐富,可高度個性化定制的數據可視化圖表。
它可以輕易的作出類似這樣:
或這樣的美觀可視化圖:
當別人在使用各種圖來表示各項數據之間的聯系時,我還在使用Low到爆的表格那種用戶體驗感受屬實不太妙。可視化圖相較於表格那一行一行數據,在直觀方面不知優出幾個檔次。但是echarts開源庫的使用在小白的我看來一直是一個難點,看了很多別人的文檔還是不懂如何使用。但是這兩天,我仔細找了各種項目和向大佬尋求幫助,總算是能成功的顯示一個丑丑的圖來,這也算是一個進步吧。好,下面開始我自己的使用教程。
第一步:先找到自己想要的可視化圖模板,並下載簡單的案例。比如像我下圖這個就挺不錯的。
第二步:建立數據庫,並填入相對應的數據,比如想我這個這樣。
第三步:對自己的Web項目添加鏈接數據庫的jar包,並且在DB里面建立連接。
第四步:建立對應數據庫的數據Bean與邏輯Bean,像這里我就是User和UserService
1.User
package cn.edu.ccut.bean; import java.util.Date; public class User { private int id; private String name; private int sex; private Date birthday; private int department; private int position; private int power; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getDepartment() { return department; } public void setDepartment(int department) { this.department = department; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } public int getPower() { return power; } public void setPower(int power) { this.power = power; } }
2.UserService
package cn.edu.ccut.bean; import cn.edu.ccut.DB.DB; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserService { public List<User> getAllUsers() throws SQLException { DB db= DB.getInstance(); ResultSet rs=db.executeQueryNoParam("select * from t_user"); List<User> allUsers=new ArrayList<User>(); User user; while (rs.next()){ user=new User(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setSex(rs.getInt(3)); user.setBirthday(rs.getDate(4)); user.setDepartment(rs.getInt(5)); user.setPosition(rs.getInt(6)); user.setPower(rs.getInt(7)); allUsers.add(user); } db.close(); return allUsers; } }
第五步:創建對應的UserServlet,使之獲取到屬性allUsers,並且可以跳轉到相對應的JSP頁面。
UserServlet
package cn.edu.ccut.servlet; import cn.edu.ccut.bean.User; import cn.edu.ccut.bean.UserService; 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 javax.servlet.http.HttpSession; import java.io.IOException; import java.sql.SQLException; import java.util.List; @WebServlet("/UserServlet") public class UserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UserService userservice=new UserService(); try { List<User> allUsers = userservice.getAllUsers(); HttpSession session=request.getSession(); if(session==null){ session=request.getSession(true); } session.setAttribute("users",allUsers); response.sendRedirect("table.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("exception.jsp"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }
第六步:對自己的Web項目添加JSTL(即JSP標准標簽庫)jar包,這個可以不加,但是這樣的話后面的scripts寫法有所改變而且比較復雜,為了簡便,用JSTL注解來寫邏輯和觀感都會好許多。
第七步:將自己中意的案例源碼放到相對應的JSP頁面,並對里面的靜態數據進行修改,使它可以動態訪問數據庫。(重要)ps:你問Echarts圖表為什么和剛開始的格式不一樣,當然是我改的呀,這樣更好看。
lineecharts
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/3/27 Time: 13:58 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <div id="container" style="height: 100%"></div> <%--//echarts圖表框架--%> <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script> <script type="text/javascript"> var arr = new Array(); var index = 0; <c:forEach items="${sessionScope.users}" var="user" varStatus="s"> arr[index++] = ${user.department}; //echarts數組形式存儲柱體大小 </c:forEach> var dom = document.getElementById("container"); //框架使用名稱 var myChart = echarts.init(dom); var app = {}; option = null; option = { backgroundColor: '#0E2A43', tooltip: { show: true, formatter: "{b}:{c}" }, grid: { left: '5%', top: '12%', right: '1%', bottom: '8%', containLabel: true }, xAxis: { type: 'category', axisTick: { show: false, alignWithLabel: false, length: 5, }, "splitLine": { //網格線 "show": false }, inverse: 'true', //排序 axisLine: { show: false, lineStyle: { color: '#fff', } }, data: [ //echarts下面顯示名稱 <c:forEach items="${sessionScope.users}" var="username" varStatus="s"> ["${username.name}"], </c:forEach> ] }, yAxis: [{ type: 'value', show:false, position: 'top', axisTick: { show: false }, axisLine: { show: false, lineStyle: { color: '#fff', } }, splitLine: { show: false }, }], series: [{ name: '能耗值', type: 'bar', label: { normal: { show: true, position: 'top', formatter: '{c}', textStyle: { color: 'white' //color of value } } }, itemStyle: { //通常情況下: normal: { barBorderRadius: 8, //每個柱子的顏色即為colorList數組里的每一項,如果柱子數目多於colorList的長度,則柱子顏色循環使用該數組 color: function (params) { var colorList = [ ['#b250ff', 'rgba(11,42,84,.3)'], ['#ff9717', 'rgba(11,42,84,.3)'], ['#61dbe8', 'rgba(11,42,84,.3)'], ['#1ace4a', 'rgba(11,42,84, 0.3)'], ]; var index = params.dataIndex; if (params.dataIndex >= colorList.length) { index = params.dataIndex - colorList.length; } return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: colorList[index][0] }, { offset: 1, color: colorList[index][1] } ]); }, }, }, barGap: '0%', barCategoryGap: '50%', data: arr //使用上面定義存儲的數組 }] }; if (option && typeof option === "object") { myChart.setOption(option, true); } </script> </body> </html>
注意:這個在使用各種標記庫里面的標記時,要先在JSP文件的頭部用<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>來注明對它的引用。(很重要,有次錯誤排除好久都找不出來,后來后知后覺才發現問題)
結果:
這樣,就可以看到在頁面里我們看到相對應的Echarts圖表顯示出來啦,是不是比起簡簡單單的表格要更為簡潔和直觀呢。
參考文檔:https://www.jianshu.com/p/1a2764b54f8b,謝謝各位大佬的幫助。