Ram*_*tha 5 javascript java spring server-push google-maps-api-3
我想每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);
}
Run Code Online (Sandbox Code Playgroud)
我必须每2秒显示一些数据.谁能告诉我怎么做?
任何人都知道Comet Ajax Push技术,它会在这种情况下工作吗?
你有很多选择.
轮询 - 正如在其他答案中提到的,您可以简单地让客户端中的javascript每2秒轮询一次服务器.这是一种非常常见的方法,很简单,适用于大多数浏览器.虽然不像其他一些方法正确设置那样可扩展,但仍然可以轻松扩展到适度的卷(可能比您拥有的用户多!).
长轮询 - 也称为Comet,这本质上是一个长期存在的请求.具体取决于您的应用服务器.在这里看到Tomcat:http://wiki.apache.org/tomcat/WhatIsComet或Jetty捆绑了一些例子.
HTML 5解决方案,而Web传统上是基于请求响应 - 基于事件的处理是HTML 5规范的一部分.因为您的事件似乎只有一种方式(服务器 - >客户端)考虑使用事件源.请参阅:http://www.html5rocks.com/en/tutorials/eventsource/basics/或Jetty示例.这里的注意事项是只有现代浏览器和一些应用服务器支持这些方法 - 例如Apache本身不支持websockets.
总而言之 - 我的直觉是,您的需求和简单的投票方法很好 - 最初不要过于担心性能问题.
如果你想要处于最前沿,学习新东西,你就可以控制你的应用服务器和框架,那么我就会采用HTML 5方法.
彗星是这两者之间的一种中途宿舍.
使用 Spring 的最佳选择是将计划查询的结果存储到内存中的 bean 中,然后让另一个请求范围 bean 在可通过 Web 访问的方法中获取存储的结果,并将其作为文本(或 JSON)返回。或者,您可以在每次请求更新时查询数据库。
然后,您可以从页面发出定时异步请求(您可能需要为此使用 YUI 连接管理器),读取响应并使用 google.maps.Map 中的 panTo 方法来更新您的地图位置。
正如您所看到的,该解决方案分为 Java 和 JavaScript 部分。
对于 Java 端,您必须创建一个控制器来执行对数据库的查询(或者更好的是,将该任务委托给另一层)并将结果作为 JSON 返回,您可以使用http://spring-json.sourceforge.net /为了那个原因。在 Spring 中这有点复杂,因此您可能想创建一个返回数据的简单 servlet。
对于 Javascript 端,一旦您有一个返回 JSON 数据的工作端点,使用YUI 连接管理器和google 地图 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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10252 次 |
最近记录: |