【问题标题】:How can I refresh a servlet write.out method every 10 seconds?如何每 10 秒刷新一次 servlet write.out 方法?
【发布时间】:2012-03-15 19:50:14
【问题描述】:

我有一个连接到 mysql 数据库的 servlet,结果集从具有数值的列中获取一些值,这些值进入一个谷歌链接,结果生成一个图表作为图像......这是我的代码为它:

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

            //OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream());
            //System.out.println("SensorGraph");

            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            //sensor Id
            String id = request.getParameter("id");
            // limit in the query
            String limit = request.getParameter("limit");
            DatabaseConnection db_connection =  new DatabaseConnection()._instance;
            Connection connection = null;
            try {
                connection = db_connection.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            Statement statement;
            ResultSet resultSet;
            try {
                statement = (Statement) connection.createStatement();
                resultSet = statement.executeQuery("select * from Sensor_Entries order by EntryTime asc limit 100");
                String values = "";
                while(resultSet.next()) {
                    String value = resultSet.getString("EntryValue");
                    values += (value) + ",";
                }
                //System.out.println(values);
                values = values.substring(0, values.length()-1);


                String image = "http://chart.apis.google.com/chart?" +
                        "chxr=0,0,1000" +
                        "&chxs=0,676767,12.167,-0.5,l,676767" +
                        "&chxt=y" +
                        "&chs=1000x300" +
                        "&cht=ls" +
                        "&chco=3D7930" +
                        "&chds=0,1000" +
                        "&chd=t:" + values+
                        "&chg=14.3,-1,1,1" +
                        "&chls=2,4,0" +
                        "&chma=0,6%7C3" +
                        "&chm=B,C5D4B5BB,0,0,0" +
                        "&chtt=Sensor+Values" +
                        "&chts=F00D0D,14.5";

                //if(request.getParameter("img") != null)
                    out.write("<img src=\"" + image + "\" />");

                statement = (Statement) connection.createStatement();
                /*resultSet = statement.executeQuery("select * from Sensors join " +
                        "(select * from Sensor_Entries order by EntryTime desc) as Sensor_Entries on " +
                        "(Sensors.SensorID=Sensor_Entries.SensorID) where Sensors.SensorID='" + id + "' " +
                        "group by Sensors.SensorID;");*/

                resultSet = statement.executeQuery("select * from Sensors join " +
                        "(select * from Sensor_Entries order by EntryTime desc) as Sensor_Entries on " +
                        "(Sensors.SensorID=Sensor_Entries.SensorID)"); /*where Sensors.SensorID='" + id + "' " +
                        "group by Sensors.SensorID;");*/

                ResultSetMetaData resultSetMetaData = (ResultSetMetaData) resultSet.getMetaData();
                if(resultSet.next()) {
                    out.write("<table>");
                    for(int i = 1; i < resultSetMetaData.getColumnCount() + 1; i++) {
                        String value = "";
                        int type = resultSetMetaData.getColumnType(i);
                        if(type == Types.INTEGER || type == Types.TINYINT) {
                            value = "" + resultSet.getInt(i);
                        } else if(type == Types.VARCHAR) {
                            value = resultSet.getString(i);
                        } else if(type == Types.TIMESTAMP) {
                            value = resultSet.getTimestamp(i).toString();
                        } else if(type == Types.DOUBLE) {
                            value = "" + resultSet.getDouble(i);
                        }

                        //out.write("<tr>" +
                               // "<td>" + resultSetMetaData.getColumnName(i) + "</td>" +
                               // "<td>" + value + "</td>" +
                                //"</tr>");
                    }
                    out.write("</table></center>");
                }
                else
                    out.write(image);
                out.flush();
                out.close();
            } catch (SQLException ignored) { ignored.printStackTrace();  }
        }

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);

}

如果我知道列中的值会随值发生变化,我如何每 10 秒获得一个新图表? ...请帮助我...

【问题讨论】:

    标签: java ajax servlets charts


    【解决方案1】:

    您不能多次刷新 ServletOutputStream。它会抱怨。您必须使用某种标识符创建一个后台处理线程,并从客户端使用 ajax 来获取当前的一组计算并呈现它们。

    【讨论】:

    • 我不知道该怎么做,先生……你能帮我做多少吗? ..代码还是什么? ...请帮帮我先生...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2022-08-06
    • 2016-03-10
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多