我正在使用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;
}
答案 0 :(得分:1)
确实没有一种方法可以支持所有rss客户端,但我建议查看rfc 5005附录B,你至少会有一个参考来给客户。 https://tools.ietf.org/html/rfc5005#appendix-B
只要您的默认查询始终显示最新的(您定义的页面长度)项目,按降序排序,所有客户端都将显示正确。需要能够分页的客户端可以实现此标准。
答案 1 :(得分: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项。