Web app ------ 从Servlet读取Json数据并显示,生成历史数据曲线图


1、我的Servlet端

创建Servlet;

导入需要的jar包;

接收到客户端的请求;

数据类;

从数据库的读取数据并存入链表;

转成Json格式返回给客户端;

(1)创建Servlet

参考:

(2)导入需要的jar包

下载网址:http://www.java2s.com/Code/Jar/j/Catalogj.htm

(3)接收到客户端的请求

String sID = request.getParameter("sID");//sID

对应的客户端请求代码:$.ajax({...data:"sID="+sID,...});

(4)数据类

package pro8;
?
public class Temp_Data {
private String sDateTime;
private float sValue;
public Temp_Data() {}

    public Temp_Data(String time, float value) {
        sDateTime=time;
        sValue=value;
    }
?
    public void setTime(String time) {
        sDateTime=time;
?
    }
?
    public void setValue(float value) {
        sValue=value;
?
    }
?
    public String getTime() {
        return sDateTime;
?
    }
?
    public float getValue() {
        return sValue;
?
    }
}

(5)从数据库的读取数据并存入链表

参考的是菜鸟教程的代码:https://www.runoob.com/servlet/servlet-database-access.html

包括:①数据库加载驱动②数据库连接③数据库查询④返回结果并存入链表

 

public class Hello extends HttpServlet {
// JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/project1";
    
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456"; 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        Connection conn = null;
        java.sql.Statement stmt = null;
        /*...接收到客户端的请求...*/
        try{
            /*①数据库加载驱动*/
                // 注册 JDBC 驱动器
                Class.forName(JDBC_DRIVER);            
                /*②数据库连接*/
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                /*③数据库查询*/
                stmt = conn.createStatement();
                String sql;
                sql = "select sDateTime,sValue from table1 where sID = '"+sID+"'"+"ORDER BY sDateTime ASC";
                System.out.print(sID);
                ResultSet rs = stmt.executeQuery(sql);
                //这里是链表
                List templist=new ArrayList();
                /*④返回结果并存入链表*/
                while(rs.next()){
                    // 通过字段检索
                    String time = rs.getString("sDateTime");
                    float value = rs.getFloat("sValue");
                    Temp_Data temp=new Temp_Data(time,value);
                    templist.add(temp);
                }
                //out.print(sID);
 /*...转成Json格式返回给客户端...*/
                //System.out.println("array--->"+jarray);
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.close();
            } catch(SQLException se) {
                // 处理 JDBC 错误
                se.printStackTrace();
            } catch(Exception e) {
                // 处理 Class.forName 错误
                e.printStackTrace();
            }finally{
                // 最后是用于关闭资源的块
                try{
                    if(stmt!=null)
                    stmt.close();
                }catch(SQLException se2){
                }
                try{
                    if(conn!=null)
                    conn.close();
                }catch(SQLException se){
                    se.printStackTrace();
                }
            }
        }
}
?

 

 

(6)转成Json格式返回给客户端

JSONArray jarray=JSONArray.fromObject(templist);
out.print(jarray);

2、客户端代码

(1)界面部分

  
    

?

在此处显示曲线图:

在此处显示历史数据:

?

(2)简单的css样式

(3)发送请求给服务器






  

  
  

(4)解析返回的Json数据,并将Time和Value存入x,y数组

var temp=JSON.stringify(msg);
$("#hisData").html(temp);
var arr=JSON.parse(temp);
var x = [];
var y = [];
for (var i = 0; i < arr.length; i++) {
  x[i] = arr[i]['time'];
  y[i] = parseFloat(arr[i]['value']);
  console.log(y[i]);
}

(5)绘制曲线图

参考:https://www.highcharts.com.cn/demo/highcharts/spline-plot-bands

 

var chart = Highcharts.chart('curve', {
chart: {
      type: 'spline'//类型为曲线
},
title: {
      text: '温度变化历史数据'
},
subtitle: {
      text: '传感器'
},
xAxis: {
      categories: x//X轴数据
},
yAxis: {
  title: {
        text: '温度 (℃)'
      },
      min: 0,
      minorGridLineWidth: 0,
      gridLineWidth: 0,
      alternateGridColor: null,
},
tooltip: {
      valueSuffix: ' ℃'
},
plotOptions: {
      spline: {
        lineWidth: 4,
        states: {
      hover: {
        lineWidth: 5
      }
},
marker: {
      enabled: false
}
}
},
series: [{
      name: '温度',
      data: y//Y轴数据
}],
navigation: {
      menuItemStyle: {
      fontSize: '10px'
}
}
});

 

3、运行效果图

4、创建Servlet遇到的问题

(1)工作空间不能与发布目录相同,之前无意中改了工作目录,导致运行后文件丢时。

解决方法:修改工作空间

(2)出现404错误:路径错误

解决方法:检查路径,web.xml下的路径和url

(3)出现500错误:导入的包有问题

相关