Java RSS源的大小

Java RSS源的大小,java,rss,rome,Java,Rss,Rome,我正在使用ROME从数据库中的数据生成提要 在我找到的所有示例中,Servlet从数据库中提取所有数据,并将其作为提要发送 现在,如果数据库包含数千个条目,我应该发送多少条 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { SyndFeed feed = ge

我正在使用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;
}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
试一试{
SyndFeed feed=getFeed(请求);
String feedType=request.getParameter(“类型”);
feedType=feedType!=null?feedType:defaultType;
feed.setFeedType(feedType);
setContentType(“application/xml;charset=UTF-8”);
SyndFeedOutput=新的SyndFeedOutput();
output.output(feed,response.getWriter());
}捕获(FeedException ex){
String msg=“无法生成提要”;
日志(msg,ex);
senderro(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,msg);
}
}
受保护的SyndFeed getFeed(HttpServletRequest请求){
//****我在这里查询数据库中的帖子,但我不知道有多少
//我应该去拿,或者在哪里停***
List posts=getPosts();
SyndFeed提要=新的SyndFeedImpl();
feed.setTitle(“我的feed”);
feed.setLink(“http://myurl");
feed.setDescription(“我的描述”);
//创建提要。每个教程都是提要条目
列表项=新的ArrayList();
用于(职位:职位){
SyndEntry条目=新的SyndEntryImpl();
句法内容描述;
字符串title=post.getTitle();
String link=post.getLink();
条目.设置标题(标题);
entry.setLink(link);
//创建提要条目的描述
description=新的SyndContentImpl();
description.setType(“文本/普通”);
description.setValue(post.getDesc());
条目.setDescription(描述);
条目。添加(条目);
}
feed.setEntries(条目);
回馈;
}

我建议使用寻呼系统。用户请求第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的值。然后,客户机一次请求多少个提要项。

要做到这一点,没有一种方法是所有rss客户机都支持的,但我建议查看rfc 5005附录B,您至少可以向客户提供一个参考


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

所以我只介绍了最新的N篇文章,由客户端调整获取频率?是的,老实说,这就是ATOM/RSS(特别是RSS)的本质。RFC有帮助,但实际上并没有任何描述符文件(如WSDL或WADL)或其他文件来帮助用户了解您是否支持标准(RFC)或非标准查询参数。你能做的最接近的事情就是添加一个OpenSearch描述符文件来帮助你。谢谢你的回复,但是RSS提要不是这样工作的。我不知道谁在调用我的Servlet,所以我必须始终按降序发送最新的帖子。