1

我将实施一个新闻提要通知系统,我将在我的网页上显示新项目。像这样:http: //jsfiddle.net/8ND53/

我将每 5 秒调用一次 Servlet 以获取更新,并且 Servlet 将以 json 格式返回项目。这看起来很简单,但是我如何在服务器端管理这一切呢?

我的想法是:

  • 我必须跟踪发送给用户的最后一个项目(按日期),以便下次我可以从数据库中获取新项目。

他们有做这些事情的标准方式吗?

4

1 回答 1

1

只是一个想法!

我将假设您从包含提要的 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 中的计数进行比较,以获取您的新提要。

希望这可以帮助 :-)

于 2012-07-20T21:13:54.720 回答