2014-11-04 57 views
0

我正在使用ROME從數據庫中的數據生成提要。RSS提要的大小

在我找到的所有示例中,Servlet從數據庫中提取所有數據,並將其作爲一個提要發送。

現在,如果數據庫包含數千個條目,我應該發送多少條目?

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     SyndFeed feed = getFeed(request); 

     String feedType = request.getParameter("type"); 
     feedType = feedType != null ? feedType : defaultType; 
     feed.setFeedType(feedType); 

     response.setContentType("application/xml; charset=UTF-8"); 
     SyndFeedOutput output = new SyndFeedOutput(); 
     output.output(feed, response.getWriter()); 
    } catch (FeedException ex) { 
     String msg = "Could not generate feed"; 
     log(msg, ex); 
     response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg); 
    } 
} 


protected SyndFeed getFeed(HttpServletRequest request) { 

    // **** Here I query the database for posts, but I don't know how many 
    // I should fetch or where should I stop? *** 
    List<Post> posts = getPosts(); 

    SyndFeed feed = new SyndFeedImpl(); 
    feed.setTitle("My feed"); 
    feed.setLink("http://myurl"); 
    feed.setDescription("my desc"); 

    // create the feeds.Each tutorial will be a feed entry 
    List<SyndEntry> entries = new ArrayList<SyndEntry>(); 
    for (Post post : posts) { 
     SyndEntry entry = new SyndEntryImpl(); 
     SyndContent description; 
     String title = post.getTitle(); 
     String link = post.getLink(); 
     entry.setTitle(title); 
     entry.setLink(link); 

     // Create the description of the feed entry 
     description = new SyndContentImpl(); 
     description.setType("text/plain"); 
     description.setValue(post.getDesc()); 
     entry.setDescription(description); 
     entries.add(entry); 
    } 
    feed.setEntries(entries); 
    return feed; 
} 

回答

0

我建議一個尋呼系統。用戶請求頁面0佔用30個項目。那麼用戶請求頁面1採取下一個30個項目。第一次請求:項目0-> 29,第二次請求:項目30-> 59。模型這個有叫什麼位置skip跟蹤一個整型變量,開始於,例如:

int skip = page * numItems; // first request: 0 * 30 (starts at 0), sec request: 1 * 30 (starts at 30) 

所以,你會跳過這麼多項目,並採取一個numItems才值。然後,客戶端會立即請求客戶想要的多個Feed項目。

+0

感謝您的回覆,但RSS提要不起作用。我不知道誰在調用我的Servlet,因此我必須始終以降序發送最新的帖子。 – 2014-11-04 09:47:04

1

真的沒有一種方法可以做到這一點,所有的rss客戶端都會支持,但我會建議您檢查rfc 5005附錄B,您至少可以給客戶提供參考。 https://tools.ietf.org/html/rfc5005#appendix-B

只要您的默認查詢總是顯示最新的(頁面長度您定義的)項目,排序降序,所有客戶端將顯示正確。需要能夠頁面的客戶端可以實現此標準。

+0

因此,我只是介紹最新的N個帖子,並由客戶來調整提取頻率? – 2014-11-04 09:43:47

+0

是的 - 說實話,這是ATOM/RSS(尤其是RSS)的本質。該RFC有助於實現,但實際上沒有任何描述符文件(如WSDL或WADL)或其他文件,以幫助用戶知道您是否支持標準(RFC)或非標準查詢參數。您可以做的最接近的事情是添加一個OpenSearch描述符文件來提供幫助。 – 2014-11-04 09:45:58