我想每2秒将数据推送到jsp,而客户端请求它.
我在这里使用Spring with Hibernate.
我正在显示谷歌地图标记,我想通过从数据库获取数据每2秒更新标记位置,但是我已经从数据库获取数据每2秒,但我无法将数据推送到此JSP.
@Scheduled(fixedRate = 2000)
public void getData(){
// TODO Auto-generated method stub
DeviceDetails deviceDetails = realTimeDataDAO.getDeviceDetails(deviceId);
System.out.println(deviceDetails);
}
我必须每2秒显示一些数据.谁能告诉我怎么做?
任何人都知道Comet Ajax Push技术,它会在这种情况下工作吗?
最佳答案
使用Spring最好的办法是将计划查询的结果存储到内存中的bean中,然后让另一个请求范围bean将该结果存储在Web可访问的方法中,并将其作为文本(或JSON)返回.或者,您可以在每次请求更新时查询数据库.
然后,您可以从页面发出定时异步请求(您可能需要使用YUI Connection Manager),阅读响应并使用google.maps.Map中的panTo方法更新地图位置.
如您所见,该解决方案分为Java和JavaScript部分.
对于Java端,您必须创建一个控制器来执行对数据库的查询(或者更好,将该任务委托给另一个层)并将结果作为JSON返回,您可以使用http://spring-json.sourceforge.net/.它在Spring中有点复杂,因此您可能希望创建一个返回数据的简单servlet.
对于Javascript方面,一旦有了一个返回JSON数据的工作端点,使用YUI Connection Manager和google maps api:
function update(){
var callback = {
success: function (o) {
var response = YAHOO.lang.JSON.parse(o.responseText);
map.panTo({lat: response.lat,lng: response.longi}); // map is the google.maps.Map representing your map
},failure: function (o) {
}
}
var sUrl = '/getData.htm'; // This is the request mapping for your bean
YAHOO.util.Connect.asyncRequest('GET',sUrl,callback);
}
function init(){
setTimeout("update()",2000);
}