1

ニュースフィード通知システムを実装して、Webページに新しいアイテムを表示します。このように:http://jsfiddle.net/8ND53/

更新を取得するために5秒ごとにサーブレットを呼び出します。サーブレットはアイテムをjson形式で返します。これは非常に単純に思えますが、サーバー側ですべてを管理するにはどうすればよいですか?

私が思うのは:

  • 次回DBから新しいアイテムをフェッチできるように、ユーザーに送信された最後のアイテム(日付別)を追跡する必要があります。

そのようなことをする彼らの標準的な方法はありますか?

4

1 に答える 1

1

ただのアイデア!

フィードを含むdbテーブルから、Bean、dao、およびサービスレイヤーを作成すると仮定します。


フィードを取得するページが読み込まれた最初の瞬間に、Java関数からすべてのフィードを取得してから、divにフィードを入力します。

フィードコンテナからフィード数を取得します。次に、カウントをjQuery$.postを介して、次にサーブレットに渡します。これを実現するには、次のようにします。

例えば:

//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 });

サーブレットは次のようなものを受け取ります。

例えば:

String count = request.getParameter("count");

これでカウントができたので、検証するか、として解析してIntegerから、Javaでリストを作成します。DBからすべてのフィードを取得する関数があると思います。

例えば:

//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
}

これで、サーブレットで呼び出されたJSONオブジェクト変数がありresult、フィード値が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秒ごとにフィードコンテナに最後のフィードを入力する必要があります。

(この時点で、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 に答える