0

我正在使用 ROME 从我的数据库中的数据生成提要。

在我找到的所有示例中,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;
}
4

2 回答 2

1

确实没有一种方法可以让所有 rss 客户端都支持,但我建议您查看 rfc 5005 附录 B,您至少可以为客户端提供参考。https://www.rfc-editor.org/rfc/rfc5005#appendix-B

只要您的默认查询始终显示最新的(您定义的页面长度)项目,按降序排序,所有客户端都会显示正确。需要能够分页的客户端可以实现这个标准。

于 2014-11-04T02:58:33.313 回答
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的值。然后客户一次请求客户想要的任何数量的提要项目。

于 2014-11-04T02:31:35.880 回答