|
31-12-2007 Ни для кого не секрет, что в последнее время RSS каналы стали не только популярным средством продвижения новостных лент, но и эффективным способом обмена информационными потоками между сайтами. В данной статье речь пойдет о том, как реализовать потребность в RSS, используя один из самых популярных фреймворков – Spring.
protected void buildRssDocument(Map model, SyndFeed feed,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
feed.setFeedType( "rss_2.0" );
feed.setTitle("News Feed");
feed.setLink("http://localhost:8080/rssinj/newsrss.rss");
feed.setDescription("All today's news feed");
List<SyndEntry> entries = new ArrayList<SyndEntry>();
SyndEntry entry;
SyndContent description;
Map modelMap = (Map)model.get(Constants.MODEL);
if (modelMap != null) {
List<NewsBean> newsList =
(List<NewsBean>) modelMap.get(Constants.MODEL_NEWS_LIST);
if (newsList != null) {
for (NewsBean news : newsList) {
if (news != null) {
entry = new SyndEntryImpl();
entry.setTitle(news.getTitle());
entry.setLink(news.getLink());
entry.setPublishedDate(
DATE_PARSER.parse(news.getPublishedDate()));
description = new SyndContentImpl();
description.setType("text/html");
description.setValue(news.getDescription());
entry.setDescription(description);
entries.add(entry);
} else {
logger.info("news is null in the model");
}
}// for
} else {
logger.info(Constants.MODEL_NEWS_LIST
+ " not found in the model");
}//if/else
} else {
logger.info(Constants.MODEL + "is null");
}//if/else
feed.setEntries(entries);
}Для завершения задачи нам осталось только разработать контроллер, который выполнит обращение к репозиторию и передаст сформированную модель (Model) в представление (View). За основу мы возьмем org.springframework.web.servlet.mvc.AbstractCommandController и создадим наш com.webtair.articles.rssinj.mvc.NewsRssController, метод handle которого необходимо переопределить: protected ModelAndView handle(HttpServletRequest req,
HttpServletResponse res, Object command, BindException error)
throws Exception {
Map<String, Object> model = new HashMap<String, Object>();
List<NewsBean> newsList = newsDao.getNewsList();
model.put(Constants.MODEL_NEWS_LIST, newsList);
NewsRssView view = new NewsRssView();
return new ModelAndView(view, Constants.MODEL, model);
}В нашей реализации метод получает список новостей (newsList), вкладывает его в модель (model) и передает во вновь созданный экземляр NewsRssView. Теперь осталось только собрать и развернуть проект в servlet-контейнер. Предполагая, что имя проекта будет называться rssinj, запускаем браузер: http://localhost:8080/rssinj/newsrss.rss и наблюдаем корректно сформированный RSS. На последок:В качестве дополнительных "изысков" можно добавить в контроллер обработку ожидаемого типа потока (RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, and Atom 1.0), передать его через модель в наше представление (NewsRssView) и выставить соответствующий feedType: feed.setFeedType( feedType ); что позовлит предоставить пользователям выбор между синдикат-каналами. Ссылки- The Spring Framework - Reference Documentation v2.0.2;
- ROME is an set of open source Java tools for parsing, generating and publishing RSS and Atom feeds;
- jDom;
- Исходные коды проекта: rssinj.zip [~12Kb]
Необходимые библиотеки:- spring.jar ( v.2.0.2 from $SPRING_HOME/dist/ )
- rome.jar ( v.0.9 from https://rome.dev.java.net/ )
- jdom.jar ( v.1.0 from http://www.jdom.org/dist/binary/ )
- commons-logging.jar ( $SPRING_HOME/dist/jakarta-commons/ )
Vyacheslav Yakovenko, Dmitry Rudenko
RSS Injection (Часть 1)
|