我将实施一个新闻提要通知系统,我将在我的网页上显示新项目。像这样:http: //jsfiddle.net/8ND53/。
我将每 5 秒调用一次 Servlet 以获取更新,并且 Servlet 将以 json 格式返回项目。这看起来很简单,但是我如何在服务器端管理这一切呢?
我的想法是:
- 我必须跟踪发送给用户的最后一个项目(按日期),以便下次我可以从数据库中获取新项目。
他们有做这些事情的标准方式吗?
我将实施一个新闻提要通知系统,我将在我的网页上显示新项目。像这样:http: //jsfiddle.net/8ND53/。
我将每 5 秒调用一次 Servlet 以获取更新,并且 Servlet 将以 json 格式返回项目。这看起来很简单,但是我如何在服务器端管理这一切呢?
我的想法是:
他们有做这些事情的标准方式吗?
只是一个想法!
我将假设您从包含提要的 db 表中创建了一个 bean、dao 和服务层。
在将检索提要的页面加载的第一刻,从 java 函数中获取所有提要,然后用提要填充 div。
从您的提要容器中获取提要计数。现在通过 jQuery 传递计数$.post
,然后传递给您的 servlet。要实现这一点,请执行以下操作:
例如:
//Find divs inside the parent div that will contain your feeds
function getCount(){
return $('#feedContainer').children().find('div').size().toString();
}
//Don't forget to pass it to your jQuery post like this
//(Please, continue reading to understand where to put this)
$.post('/servlet', count:getCount(), function(data){ //manage your new feeds });
您的 servlet 将收到如下内容:
例如:
String count = request.getParameter("count");
现在你有了计数,验证或只是解析为一个Integer
然后在 java 中做一个列表。我想您有一个功能可以从数据库中获取所有提要。
例如:
//Parse it as integer
int feedCountFromUI = Integer.valueOf(count);
//Do a list and call your function to get all feeds from DB.
MyService myService = new MyService();
List<MyBean> feeds = myService.getAll();
//JSON variable
JSONObject result = new JSONObject();
//Fill your JSON variable
for(MyBean mb : feeds) {
//Build a json with your feeds and fill result
}
假设现在您有一个result
在您的 servlet 中调用的 JSON 对象变量,其中您的提要值填写在for
上面完成的内容中。feeds
现在从声明为(也从上面)的列表中获取计数。
int feedCountFromDB = feeds.size();
您现在接近完成,比较 2 个计数。如果feedCountFromDB
大于feedCountFromUI
,则表示有新的提要要加载。
if(feedCountFromDB > feedCountFromUI){
//Send your json variable (result) to your jquery post callback
out.println(result);
} else {
//Means there is nothing new, print 0
out.println(0);
}
此时,您只需要每 5 秒将最后一个 Feed 填满您的 Feed 容器,如下所示:
(此时您还可以从您的 jsFiddle 添加您的 jQuery 动画功能)
setInterval(function(){
$.post('/servlet', count:getCount(), function(data){
//If data has feeds (it's not 0)
if(data != 0) {
var lastFeed = data[data.length - 1];
$('#feedContainer').append('<div>' + lastFeed.title + '<br/>' + lastFeed.description + '</div>';
}
});
}, 5000);
这将始终检查您的 Web 界面中的计数,然后每 5 秒将其与 DB 中的计数进行比较,以获取您的新提要。
希望这可以帮助 :-)