ECharts官方文档
快速上手 - Handbook - Apache ECharts
使用IDEA新建一个基于Servlet+jsp的Javaweb框架,并引入需要的资源和使用Tomcat服务器运行。
在src文件目录下新建一个DBconn类,用于连接数据库,配置好自己的连接名还有用户名和密码。
DBconn.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; //连接数据库类 public class DBconn { public static Connection getConnection() throws ClassNotFoundException, SQLException { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.通过DirverManager获取数据库连接 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT+8"; //数据库链接 String name = "test"; //数据库用户名 String password ="123456"; //数据库密码 Connection conn = DriverManager.getConnection(url, name, password); return conn; } }
复制
如下,我的数据库名为test表名为view_bar。
新建一个DBtest类,添加主函数进行数据库的连接测试,查看控制台输出结果。
DBtest.java
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBtest { public static void main(String[] args) { try { Connection conn = DBconn.getConnection(); //3.通过Connectiond对象获取Statement对象 Statement sttm = conn.createStatement(); //4.执行SQL语句 String sql ="select * from view_bar"; ResultSet rs = sttm.executeQuery(sql); while (rs.next()){ //获取数据库 列 String name0 = rs.getString("name"); int value0 = rs.getInt("value"); System.out.println(name0+";"+value0); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } }
复制
控制台出现以下输出结果那就说明数据库连接成功了。
进入ECharts官方文档复制一个图表例子,下面是我复制的一个例子,并写入Ajax方法,并设置间隔时间。
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- <script type="text/javascript" src="echarts.min.js"></script>--> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script type="text/javascript" src="https://assets.pyecharts.org/assets/v5/echarts.min.js"></script> <title>ajax+servlet</title> </head> <body> <div id="bar" style="width:700px; height:500px;"></div> <script> function data_async() { $.ajax({ type: "post", async: true, url: "bar_servlet", dataType:"json", contentType: "application/x-www-form-urlencoded;charset=UTF-8", success: function (data) { // console.log(data.value); var xAxis_data = data.name; var series_data = data.value; // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('bar')); // 绘制图表 var option_bar = { title: { text: 'ECharts 入门示例' }, tooltip: {}, xAxis: { data: xAxis_data, }, yAxis: {}, series: [ { name: '销量', type: 'bar', data: series_data, } ] }; myChart.setOption(option_bar); }, error: function () { alert("数据请求失败!"); } }); } // 设置时间间隔 setInterval(data_async, 1000); </script> </body> </html>
复制
新建一个Bar_Servlet类,用来和数据库交互数据,这里需要注意的就是ECharts只能识别json的数据类型,所以需要用Java的有关Json库把数据库获取的数据转换为json格式才行。
Bar_Servlet.java
import net.sf.json.JSONArray; import net.sf.json.JSONObject; 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 java.io.IOException; import java.io.PrintWriter; import java.sql.*; @WebServlet("/bar_servlet") public class Bar_servlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setHeader("Content-type","text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); // 转换数据为json格式 JSONArray jsonarr_name = new JSONArray(); JSONArray jsonarr_value = new JSONArray(); JSONObject jsonObject = new JSONObject(); try { // 连接数据库 Connection conn = DBconn.getConnection(); //3.通过Connectiond对象获取Statement对象 Statement sttm = conn.createStatement(); //4.执行SQL语句 String sql ="select * from view_bar"; ResultSet rs = sttm.executeQuery(sql); while (rs.next()){ //获取数据库 列 String name0 = rs.getString("name"); int value0 = rs.getInt("value"); // 控制台打印输出结果 jsonarr_name.add(name0); jsonarr_value.add(value0); jsonObject.put("name", jsonarr_name); jsonObject.put("value", jsonarr_value); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } // System.out.println(jsonObject); //向前台的页面输出结果 PrintWriter out = response.getWriter(); out.println(jsonObject); out.flush(); out.close(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
复制
用Tomcat服务器运行一下。
修改一下数据库数据,就会发现图表的图形发生变化,而且还有动画效果。
以上就是Ajax+Servlet实现的ECharts图表的数据实时刷新。