テンプレートエンジンfreemarkerでRSSを出力してみる
2009/02/06 13:59Update
freemarkerでテンプレートからRSSを出力するサンプルです。
freemarkerとは
FreeMarker - Javaで動作するテンプレートエンジン
freemarkerを使うのに、freemarker-x.y.z.jarというライブラリファイルをclasspathに通す必要があります。
※x.y.zとはfreemarkerのバージョンをあらわします。
※jarファイルをclasspathに通す方法について、ここでは省きます。
では、簡単のサンプルから見てみると思います。
今回はfreemarkerを利用して、テンプレートからRSSを出力するとのプログラムを作成してみたいと思います。
■フォルダ構成例:
c:\freemarker\src\com\syboos\freemarker\TestFreemarker.java
c:\freemarker\src\com\syboos\freemarker\TestFreemarker.class
c:\freemarker\src\templates\rss.tmpl
■WEBアプリケーションの場合
WEB-INF/classes/com/syboos/freemarker/TestFreemarker.class
WEB-INF/classes/templates/rss.tmpl
■freemarker実装手順
1)freemarker用のテンプレートを用意する
テンプレート記述例:
rss.tmpl
<?xml version="1.0" encoding="${encoding}"?>
<rss version="2.0">
<channel>
<title><![CDATA[${rss.title}]]></title>
<link>${rss.link}</link>
<description><![CDATA[${rss.description?default("No Description Given")}]]></description>
<generator>pmplat@syboos.com</generator>
<#list rss.items as item>
<item>
<title>${item.title}</title>
<description><![CDATA[ ${item.description}]]></description>
<guid isPermaLink="true">${item.link}</guid>
<link>${item.link}</link>
<pubDate><![CDATA[${item.publishDate}]]> GMT</pubDate>
</item>
</#list>
</channel>
</rss>
※freemarkerテンプレートの書き方について、
FreeMarker - Javaで動作するテンプレートエンジン
http://www.syboos.jp/opensource/bookmark/detail/20080123141906030.html
という記事の「参考資料」をご参照ください。
2)テンプレートにあったデータクラスを実装する
上のテンプレートの場合、データクラスは以下のようになるでしょう。
public class RssData {
private List items;
private String title;
private String description;
private String encoding;
private String link;
private String publishDate;
...//コンストラクタ、setter/getterメソッドなど(略)
}
3)freemarkerを利用してデータをテンプレートに書き込む
3.1)freemarkerテンプレートを取得する
import freemarker.template.Configuration;
import freemarker.template.Template;
...
private static Configuration templateCfg = null;
public Template getTemplate(String filename) throws Exception {
if (templateCfg == null) {
try {
templateCfg = new Configuration(); //
templateCfg.setClassForTemplateLoading(this.getClass(), "/rss/"); //どこでRSSテンプレートを探すかを指定します
templateCfg.setTemplateUpdateDelay(2); //再ロードタイミング?
} catch (Exception e) {
throw e;
}
}
try {
return templateCfg.getTemplate(filename); //テンプレートのファイル名からTemplate取得
} catch (Exception e) {
throw e;
}
}
...
呼び出し方例:
Template templ = getTemplate("rss.tmpl");
これで、freemarkerテンプレートの取得ができました。
3.2)データを準備
テンプレートに何を書き込むかのデータを用意します。
RssData rssData = new RssData(); rssData.setXxxx(...); //... ...
Javaの基本なので、ここでは説明を省きます。
3.3)データをテンプレートに書き込む
Template templ = getTemplate("rss.tmpl"); //テンプレート取得
StringWriter sw = new StringWriter(); //java.io.Writer
SimpleHash templateContext = new SimpleHash(); //コンテキスト
templateContext.put("encoding", "utf-8"); //データ:${encoding}
templateContext.put("rss", rssData); //データ:${rss.xxxx}
templ.process(templateContext, sw); //書き込む
sw.toString(); //Stringへ出力
.
Sponsored Link
Comments
- Relative Articles
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Method.invoke - Javaメソッドの動的に実行 - (2009/02/13 11:59)
- Java Generics使い方 - Genericsメソッドを定義してみる - (2009/02/20 16:02)
- サンプルから学ぶclasspathの設定とJavaプログラムの実行 - (2009/04/13 18:18)
- Java オブジェクトのclone - シャローコピーとディープコピー - (2009/06/04 11:21)
- 自作Javaアノテーション実装例 - サンプル01 - (2010/03/31 18:12)
- Java パッケージ概要 - (2008/10/03 23:58)
- Javaクラスのコンストラクタメソッドの定義方法 - (2009/09/30 16:56)
- Java List/ArrayListよくある使い方 - (2009/01/30 13:02)
- サンプルから学ぶJava言語の Boolean/String/boolean型の変換 - (2009/02/20 11:31)