2014-11-04 95 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