top / index / prev / next / target / source

2017-01-01 diary: [FreeMarker] シンプルサンプル

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

[FreeMarker] シンプルサンプル

Java 言語によるプログラミングのなかでテキストのテンプレート処理が必要な場面で役立つ OSS 実装の一つに Apache FreeMarker というプロダクトがあります。こちらが私が実現したかったテキストのテンプレート処理で役立ちそうだったので、これのシンプルな実装サンプルを作成します。

基本的な maven 作成および必要なライブラリの組み込み

シンプルな Java プロジェクトの新規作成

以下の手順に従い、Maven によるシンプルな Java プロジェクトを新規作成してください。

Maven プロジェクト設定を変更してライブラリ組み込み

以下のように pom.xml を変更します。(変更箇所のみ記載)

  <dependencies>
    <!-- 既存の記述... -->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>[2.3.25-incubating,3.0)</version>
    </dependency>
  </dependencies>

Java ソースコードの記述

以下のように Java ソースコードを開きます。

vi src/main/java/my/sandbox/App.java 

以下のように App.java を記述します。

package my.sandbox;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;

import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

public class App {
  public static void main(String[] args) throws IOException, TemplateException {
    final Configuration config = new Configuration(Configuration.VERSION_2_3_25);
    config.setDefaultEncoding("UTF-8");
    config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
    config.setLogTemplateExceptions(false);

    // set my custom template loader.
    config.setTemplateLoader(new TemplateLoader() {
      private long lastModified = System.currentTimeMillis();

      private static final String MY_TEMPLATE_STRING = "My name is ${user} desu.";

      public Object findTemplateSource(String name) throws IOException {
        System.out.println("TemplateName:" + name);
        return MY_TEMPLATE_STRING;
      }

      public long getLastModified(Object templateSource) {
        return lastModified;
      }

      public Reader getReader(Object templateSource, String encoding) throws IOException {
        return new StringReader(MY_TEMPLATE_STRING);
      }

      public void closeTemplateSource(Object templateSource) throws IOException {
        // do nothing.
      }
    });

    final Map<String, String> templateData = new HashMap<String, String>();
    templateData.put("user", "Taro Yamada");

    final Template templateBase = config.getTemplate("basic");
    templateBase.process(templateData, new OutputStreamWriter(System.out));
  }
}

Java アプリの実行

以下のコマンドで、作成した Java アプリケーションを実行することができます。

mvn install exec:java

感想

Apache FreeMarker は基本的なテンプレート操作機能が備わっているように、今のところは感じています。

関連する日記

2017年 あけまして おめでとう ございます

さあ、今年も、健康に1年が過ごせますように。

登場キーワード


この日記について