底层和业务层都已经写好了。
现在我用的servlet的方式把数据以请求转发的形式发送到jsp页面上。
我想要的操作:
   页面定时可以 异步 调用servlet获取数据,然后在从servlet返回到原jsp页面。
   如果查询出来的是新数据,则用jquery动态添加tr的方式,添加到table首部。
package dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import util.DBManager;
import entity.Information;public class InformationDao { private Connection con = null;
private PreparedStatement pst = null;
private ResultSet rs = null;

// 查询当天所有gtalk报警信息
public List<Information> queryAll() {

// 按方法所需拼写T-SQL语句
String sql = "SELECT gtalk_alarm.Game_Type,gtalk_alarm.`DATE`,gtalk_alarm.Alarm_Type,gtalk_alarm.IP,gtalk_alarm.Srv_ID,gtalk_alarm.Srv_Name,gtalk_alarm.Alarm_Message,gtalk_alarm.Contact,gtalk_alarm.Tel "
   + "FROM gtalk_alarm "
   + "WHERE TO_DAYS(gtalk_alarm.`DATE`) = TO_DAYS(now()) "
   + "GROUP BY gtalk_alarm.Game_Type,gtalk_alarm.`DATE`,gtalk_alarm.Alarm_Type,gtalk_alarm.IP,gtalk_alarm.Srv_ID,gtalk_alarm.Srv_Name,gtalk_alarm.Alarm_Message,gtalk_alarm.Contact,gtalk_alarm.Tel "
   + "ORDER BY gtalk_alarm.`DATE` DESC";

// 创建数据库连接    
con = DBManager.getConnection();

try {
// 创建数据库操作对象
pst = con.prepareStatement(sql);

// 执行数据库操作对象并接受结果集
rs = pst.executeQuery();

// 创建集合
List<Information> infoList = new ArrayList<Information>();

// 遍历结果集
while(rs.next()){

// 实例化信息对象
Information info = new Information();
info.setGameType(rs.getString("gtalk_alarm.Game_Type"));
info.setDate(rs.getString("gtalk_alarm.DATE"));
info.setAlarmType(rs.getString("gtalk_alarm.Alarm_Type"));
info.setIp(rs.getString("gtalk_alarm.IP"));
info.setSrv_id(rs.getString("gtalk_alarm.Srv_ID"));
info.setSrv_name(rs.getString("gtalk_alarm.Srv_Name"));
info.setAlarmMessage(rs.getString("gtalk_alarm.Alarm_Message"));
info.setContact(rs.getString("gtalk_alarm.Contact"));
info.setTel(rs.getString("gtalk_alarm.Tel"));

// 封装对象进集合
infoList.add(info);
}

return infoList;

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally{
DBManager.close(con,pst,rs);
}
}

// 按集合差值limit查询
public List<Information> queryAll(int limit){
// 按方法所需拼写T-SQL语句
String sql = "SELECT gtalk_alarm.Game_Type,gtalk_alarm.`DATE`,gtalk_alarm.Alarm_Type,gtalk_alarm.IP,gtalk_alarm.Srv_ID,gtalk_alarm.Srv_Name,gtalk_alarm.Alarm_Message,gtalk_alarm.Contact,gtalk_alarm.Tel "
   + "FROM gtalk_alarm "
   + "WHERE TO_DAYS(gtalk_alarm.`DATE`) = TO_DAYS(now()) "
   + "GROUP BY gtalk_alarm.Game_Type,gtalk_alarm.`DATE`,gtalk_alarm.Alarm_Type,gtalk_alarm.IP,gtalk_alarm.Srv_ID,gtalk_alarm.Srv_Name,gtalk_alarm.Alarm_Message,gtalk_alarm.Contact,gtalk_alarm.Tel "
   + "ORDER BY gtalk_alarm.`DATE` DESC limit"+limit;

// 创建数据库连接    
con = DBManager.getConnection();

try {
// 创建数据库操作对象
pst = con.prepareStatement(sql);

// 执行数据库操作对象并接受结果集
rs = pst.executeQuery();

// 创建集合
List<Information> infoList = new ArrayList<Information>();

// 遍历结果集
while(rs.next()){

// 实例化信息对象
Information info = new Information();
info.setGameType(rs.getString("gtalk_alarm.Game_Type"));
info.setDate(rs.getString("gtalk_alarm.DATE"));
info.setAlarmType(rs.getString("gtalk_alarm.Alarm_Type"));
info.setIp(rs.getString("gtalk_alarm.IP"));
info.setSrv_id(rs.getString("gtalk_alarm.Srv_ID"));
info.setSrv_name(rs.getString("gtalk_alarm.Srv_Name"));
info.setAlarmMessage(rs.getString("gtalk_alarm.Alarm_Message"));
info.setContact(rs.getString("gtalk_alarm.Contact"));
info.setTel(rs.getString("gtalk_alarm.Tel"));

// 封装对象进集合
infoList.add(info);
}

return infoList;

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally{
DBManager.close(con,pst,rs);
}
}

}
package servlet;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import service.InformationService;
import entity.Information;public class InformationServlet extends HttpServlet { InformationService informationService = new InformationService();
List<Information> infoList = new ArrayList<Information>(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { infoList = informationService.getInformationList();
request.setAttribute("infoList", infoList);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="/gtalk/js/jquery/themes/gray/easyui.css">
<link rel="stylesheet" type="text/css" href="/gtalk/js/jquery/themes/icon.css">
<script type="text/javascript" src="/gtalk/js/jquery/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/gtalk/js/jquery/jquery.easyui.min.js"></script>
</head>
<style type="text/css">
body {
font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica,sans-serif;
color: #4f6b72;
background: #E6EAE9;
}

a {
color: #c75f3e;
}

#mytable {
width: 100%;
padding: 0;
margin: 0;
vertical-align: center;
}

caption {
padding: 0 0 5px 0;
width: 700px;
font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
text-align: right;
}

th {
font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #4f6b72;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
border-top: 1px solid #C1DAD7;
letter-spacing: 2px;
text-transform: uppercase;
text-align: left;
padding: 6px 6px 6px 12px;
background: #CAE8EA no-repeat;
}

th.nobg {
border-top: 0;
border-left: 0;
border-right: 1px solid #C1DAD7;
background: none;
}

td {
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
background: #fff;
font-size: 11px;
padding: 6px 6px 6px 12px;
color: #4f6b72;
}

td.alt {
background: #F5FAFA;
color: #797268;
}

th.spec {
border-left: 1px solid #C1DAD7;
border-top: 0;
background: #fff no-repeat;
font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}

th.specalt {
border-left: 1px solid #C1DAD7;
border-top: 0;
background: #f5fafa no-repeat;
font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #797268;
}  /*---------for IE 5.x bug*/
html>body td {
font-size: 11px;
}

body,td,th {
font-family: 宋体, Arial;
font-size: 12px;
}
</style>
<script>
function checkTime(){
window.location = 'information';
}
</script>
<body >
<table id="mytable" cellspacing="0">
<caption> </caption>
<tr>
<th scope="col">游戏类型</th>
<th scope="col">报警时间</th>
<th scope="col">报警类型</th>
<th scope="col">IP地址</th>
<th scope="col">服务编号</th>
<th scope="col">服务名称</th>
<th scope="col">报警信息</th>
<th scope="col">联系人</th>
<th scope="col">联系方式</th>
</tr>
<c:forEach var="information" items="${infoList}">
<tr>
<td class="row">${information.gameType }</td>
<td class="row">${information.date }</td>
<td class="row">${information.alarmType }</td>
<td class="row">${information.ip }</td>
<td class="row">${information.srv_id }</td>
<td class="row">${information.srv_name }</td>
<td class="row">${information.alarmMessage }</td>
<td class="row">${information.contact }</td>
<td class="row">${information.tel }</td>
</tr>
</c:forEach>
</table>
<script>
window.setInterval("checkTime()",600000);
</script>
</body>

</html>

解决方案 »

  1.   

    Timer,可以写个定时器,可以参考下这个:http://blog.sina.com.cn/s/blog_6a4ddf060100m4gk.html
      

  2.   


    InformationService informationService = new InformationService();
    List<Information> infoList = new ArrayList<Information>(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // 设置返回结果字符编码类型
    response.setContentType("text/html;charset=UTF-8");   
    response.setHeader("Cache-Control","no-cache");   

    // 获取返回结果集
    infoList = informationService.getInformationList();

    // 创建返回结果框架
    JSONArray jsonArray = new JSONArray();
    JSONObject jsonObject = new JSONObject();

    // 构建返回结果框架内容
    for (Information info : infoList) {
    jsonObject.put("GameType", info.getGameType());
    jsonObject.put("Date", info.getDate());
    jsonObject.put("AlarmType", info.getAlarmType());
    jsonObject.put("Ip", info.getIp());
    jsonObject.put("Srv_id", info.getSrv_id());
    jsonObject.put("Srv_name", info.getSrv_name());
    jsonObject.put("AlarmMessage", info.getAlarmMessage());
    jsonObject.put("Contact", info.getContact());
    jsonObject.put("Tel", info.getTel());
    jsonArray.add(jsonObject);
    }

    // 格式化返回结果集
    String information_list = JSONSerializer.toJSON(jsonArray).toString();

    // 输出结果集
    response.getWriter().write(information_list);
    response.getWriter().flush();
    response.getWriter().close();
    }
    现在我servlet写成这样了,前台用ajax写的时候不知道为什么打印不出来。
    function getInformation(){

    $.ajax({
    type : 'get',
    url  : 'information',
    datatype: 'json',
    success:function(data){
    var items = data;       
    for(var i = 0;i<=items.length;i++){          
    var item = items[i];          
    alert(item.GameType);          

    }                              
    }
    });
    }弹不出东西出来。。
      

  3.   

    spring有个定时器的封装文件,xml的,如有需要,给我留言!很好用的,不知道LZ有帮助没?
      

  4.   


    那个传说叫quartz,我知道有这个东西。
    只是现在这个demo不需要框架,简单的用servlet就好。
    用框架了底层还要改很多东西。
      

  5.   

    url  : 'information'这个地址确保能访问?
      

  6.   


    这个我在web.xml里面配置的是一个servlet的地址。
    附上web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet> <servlet-name>InformationServlet</servlet-name>
    <servlet-class>servlet.InformationServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>InformationServlet</servlet-name>
    <url-pattern>/information</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>
      

  7.   

    现在可以访问到servlet里面去了,但是我在ajax里面获取json值的时候,出现了undefind,求解。
    function getInformation(){ $.ajax({
    type : 'post',
    url  : 'information',
    datatype: 'json',
    success:function(data){
    var items = data.split(",");
    for(var i = 0;i<=items.length;i++){          
    var item = items[i];          
    }                              
    }
    });
    }
      

  8.   

    在循环里面,我alert(item.key);出现了undefind。
    不知道为什么
      

  9.   

    我单独在循环外面写alert(items),是可以看到里面的东西的。
    [{"GameType":"aaaaa","Date":"2012-01-16"}]
    但是我在循环里面写alert(item.GameType);
    这样弹不出来
      

  10.   

    success:function(data){
    for(var o in data){  
       alert(o);  
       alert(data[o]);  
       alert("text:"+data[o].GameType+" value:"+data[o].Date);  
     }  
      

  11.   

    问题我自己后来已经解决了,
    是因为没有eval的结果,另外不需要分割字符串。
    然后按照上面我循环遍历的方式,就直接可以item.属性了。
    散分了