Home > スポンサー広告 > Spring Framework 3.0の新機能 Part3

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Comments:-

Comment Form

Trackback+Pingback:-

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/23-ea60de73
Listed below are links to weblogs that reference
スポンサーサイト from Netforest Developer's Note

Home > スポンサー広告 > Spring Framework 3.0の新機能 Part3

Home > Springframework > Spring Framework 3.0の新機能 Part3

Spring Framework 3.0の新機能 Part3

take©です。 今回はSpring3.0の新機能の1つである、AbstractRssFeedViewを試してみました。 AbstractRssFeedViewを使用すると、簡単にRSSを配信することができます。
ニュースを配信するRSSを例に手順をメモします。

<手順>
  • pom.xmlの設定
  • web.xmlの設定
  • applicationContext.xmlの設定
  • RSSを配信するコントローラを用意
  • AbstractRssFeedViewを継承したNewsRssFeedViewを用意
  • 実行してみる

pom.xmlの設定

AbstractRssFeedViewはRSSの構築にROMEを使います。 ROMEはRSSとAtomフィードの解析や生成を行うためのライブラリです。 pom.xmlにROMEへの依存関係を記述します。 (ROMEについてはこちら
また、マイルストーン版であるSpring3.0はセントラルリポジトリに登録されていないので、Springのリポジトリ登録も行います。

<project>
	<modelVersion>4.0.0</modelVersion>
	<groupId>rss</groupId>
	<artifactId>rss</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<repositories>
		<repository>
			<id>com.springsource.repository.bundles.milestone</id>
			<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Milestones</name>
			<url>http://repository.springsource.com/maven/bundles/milestone</url>
		</repository>
		<repository>
			<id>com.springsource.repository.bundles.external</id>
			<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Externals</name>
			<url>http://repository.springsource.com/maven/bundles/external</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>org.springframework.web.servlet</artifactId>
			<version>3.0.0.M4</version>
		</dependency>
		<dependency>
			<groupId>rome</groupId>
			<artifactId>rome</artifactId>
			<version>0.9</version>
		</dependency>
	</dependencies>
</project>

web.xmlの設定

web.xmlを記述します。 今回はクラスパスの直下にapplicationContext.xmlを配置してみました。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<display-name>rss</display-name>
	
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:/applicationContext.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

applicationContext.xmlの設定

今回はViewの解決にBeanNameViewResolverを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="sample"/>
	<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
</beans>

RSSを配信するコントローラを用意

ModelにNewsをセットします。戻り値はBeanNameViewResolverで解決できるBean名です。 (News.javaとNewsService.javaの記述は省略)

package sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class NewsFeedController {
	@Autowired
	private NewsService newsService;
	
	@RequestMapping("/news.rss")
	public String rss(Model model) {
		model.addAttribute("allNews", newsService.getAllNews());
		return "newsRssFeedView";
	}
}

AbstractRssFeedViewを継承したNewsRssFeedViewを用意

AbstractRssFeedViewを継承して以下の2つのメソッドを実装します。
#buildFeedItemsでは、Modelオブジェクトを介して、Newsリストを取得します。

  • #buildFeedMetadata
  • #buildFeedItems
package sample;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.feed.AbstractRssFeedView;

import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Description;
import com.sun.syndication.feed.rss.Item;

@Component
public class NewsRssFeedView extends AbstractRssFeedView {
	@Override
	protected void buildFeedMetadata(
		Map<String, Object> model,
		Channel feed,
		HttpServletRequest request) {
		feed.setTitle("サンプルニュース");
		feed.setDescription("これはサンプルのニュースです。");
		feed.setLink("http://sample/");
	}
	
	@Override
	protected List<Item> buildFeedItems(
		Map<String, Object> model,
		HttpServletRequest request,
		HttpServletResponse response)
	throws Exception {
		List<News> allNews = (List<News>) model.get("allNews");
		List<Item> items = new ArrayList<Item>(allNews.size());
		for (News news : allNews) {
			Item item = new Item();
			item.setTitle(news.getTitle());
			item.setPubDate(news.getPublished());
			Description description = new Description();
			description.setType("text/html");
			description.setValue(news.getArticle());
			item.setDescription(description);
			items.add(item);
		}
		return items;
	}
}

実行してみる

http://localhost:8080/コンテキスト名/news.rss
右の画像はFirefoxで表示してみた結果です。ちゃんとRSS配信できてます。 Springはこういった他のプロジェクト(今回はROME)との連携が柔軟でいいですね。


以上です。
次回はContentNegotiatingViewResolverについてレポートしたいと思います。

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/23-ea60de73
Listed below are links to weblogs that reference
Spring Framework 3.0の新機能 Part3 from Netforest Developer's Note

Home > Springframework > Spring Framework 3.0の新機能 Part3

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。