我将实施新闻Feed通知系统,我将在我的网页上显示新项目。像这样:http://jsfiddle.net/8ND53/。
我将调用Servlet说每5秒获取更新,servlet将以json格式返回项目。这似乎很简单,但我如何在服务器端管理所有这些?
我的想法是:
他们做这些事情的标准方式是什么?
答案 0 :(得分:1)
只是一个想法!
我假设您从db表中创建包含feed的bean,dao和service层。
首次检索Feed的网页加载时,从java函数中获取所有Feed,然后使用Feed填充div。
从Feed容器中获取Feed计数。现在通过jQuery $.post
传递计数,然后传递给你的servlet。要实现此目的,请执行以下操作:
e.g:
//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将收到以下内容:
e.g:
String count = request.getParameter("count");
现在你有了计数,验证或只是解析为Integer
,然后在java中做一个列表。我想你有一个功能来从DB获取你的所有信息。
e.g:
//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
}
假设现在您的servlet中有一个名为result
的JSON对象变量,其Feed值填充在上面的for
中。现在从列表声明为feeds
(从上面开始)获取计数。
int feedCountFromDB = feeds.size();
你现在接近完成,比较2个计数。如果feedCountFromDB
超过feedCountFromUI
,则意味着要加载新的Feed。
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 animate函数)
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);
这将始终从您的网络界面检查计数,然后每隔5秒将其与数据库中的计数进行比较,以获得新的Feed。
希望这会有所帮助: - )