spring内置的AbstractRssFeedView实现rss文档
2017-06-02 15:24
447 查看
AbstractRssFeedView类是一个抽象类,继承了AbstractFeedView类。AbstractRssFeedView类里有一个抽象方法buildFeedItems必须自己实现。有一个newFeed方法返回一个channel需要重写。AbstractFeedView类里有一个final方法renderMergedOutputModel,这个方法是创建rss,返回rss的主要方法。这个方法如下:
@Override
protected final void renderMergedOutputModel(
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
T wireFeed = newFeed();
buildFeedMetadata(model, wireFeed, request);
buildFeedEntries(model, wireFeed, request, response);
setResponseContentType(request, response);
if (!StringUtils.hasText(wireFeed.getEncoding())) {
wireFeed.setEncoding("UTF-8");
}
WireFeedOutput feedOutput = new WireFeedOutput();
ServletOutputStream out = response.getOutputStream();
feedOutput.output(wireFeed, new OutputStreamWriter(out, wireFeed.getEncoding()));
out.flush();
}
从这个方法中大概能看出来创建rss的调用过程,首先是newFeed()方法,AbstractRssFeedView类里重写了buildFeedEntries函数,重写后的函数中调用了buildFeedItems方法,而这个方法必须自己实现,所以实际上调用的是自己的buildFeedItems,最后输出结果到浏览器。具体做法如下:
1.加入依赖:
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
<version>1.7.0</version>
</dependency>
2.重写protected Channel newFeed(){}
3实现buildFeedItems函数
4.如果想要扩展一些自定义的节点可以使用setForeignMarkup(List<Element> )方法。这个方法的参数是List<Element> 类型。具体做法是:创建一个List<Element> 变量;再创建一个自定义节点Element node;将创建的新节点add进List<Element>中;然后调用setForeignMarkup方法。
需要注意的是:rss规范中要求的一些必须的节点是必须有的,如果没有加进去运行时会报错的。
@Override
protected final void renderMergedOutputModel(
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
T wireFeed = newFeed();
buildFeedMetadata(model, wireFeed, request);
buildFeedEntries(model, wireFeed, request, response);
setResponseContentType(request, response);
if (!StringUtils.hasText(wireFeed.getEncoding())) {
wireFeed.setEncoding("UTF-8");
}
WireFeedOutput feedOutput = new WireFeedOutput();
ServletOutputStream out = response.getOutputStream();
feedOutput.output(wireFeed, new OutputStreamWriter(out, wireFeed.getEncoding()));
out.flush();
}
从这个方法中大概能看出来创建rss的调用过程,首先是newFeed()方法,AbstractRssFeedView类里重写了buildFeedEntries函数,重写后的函数中调用了buildFeedItems方法,而这个方法必须自己实现,所以实际上调用的是自己的buildFeedItems,最后输出结果到浏览器。具体做法如下:
1.加入依赖:
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
<version>1.7.0</version>
</dependency>
2.重写protected Channel newFeed(){}
3实现buildFeedItems函数
4.如果想要扩展一些自定义的节点可以使用setForeignMarkup(List<Element> )方法。这个方法的参数是List<Element> 类型。具体做法是:创建一个List<Element> 变量;再创建一个自定义节点Element node;将创建的新节点add进List<Element>中;然后调用setForeignMarkup方法。
需要注意的是:rss规范中要求的一些必须的节点是必须有的,如果没有加进去运行时会报错的。
相关文章推荐
- 新浪微博RSS Feed实现中的问题
- 用spring,rome实现rss,atom
- 开涛spring3(4.2) - 资源 之 4.2 内置Resource实现
- 【第四章】 资源 之 4.2 内置Resource实现 ——跟我学spring3
- spring_security_3.0.1中文参考文档PartII结构和实现
- rss 开发实例2 getFeed()方法得实现
- iOS 实现仿微信内置浏览器 LYWebViewController
- Spring提供的许多内置事务管理器实现
- FeedParser处理RSS文档
- 自己动手实现Spring View
- iPhone 使用UIScrollView实现Spring滚屏效果
- Spring 3 MVC And RSS Feed Example
- SpringMVC—UrlFilenameViewController控制器实现跳转页面
- Spring3.x_Struts2.x_Hibernate3.x整合之OpenSessionInView的实现
- Javascript Ajax异步读取RSS文档具体实现
- 新浪微博RSS Feed实现中的问题
- 【第四章】 资源 之 4.2 内置Resource实现 ——跟我学spring3
- 实现拖拽文件到单文档应用程序的View中
- 【第四章】 资源 之 4.2 内置Resource实现 ——跟我学spring3
- RecycleView利用谷歌内置的SwipRefreshLayout实现下拉刷新和滑动加载