テンプレートエンジンfreemarkerでRSSを出力してみる

2009/02/06 13:59Update
TAGS: freemarker | サンプル | コード | RSS | フェード | atom | メール

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へ出力

.

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation