m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

JavaのFreeMakerでテンプレート処理を行う

テンプレート処理

HTMLなどでヘッダー部分やフッター部分など
ある程度共通の部分は別ファイルで管理して読み込みたいことがありますのでテンプレートとして使用します。

FreeMaker

Javaのテンプレートエンジンとのこと
仕事でJava使うのはほとんどなかったので調べてみる。

設定

pom.xml
  <dependencies>
    
    <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.23</version>
    </dependency>

  </dependencies>

テンプレートファイル

sampl1.ftl
<#-- name -->
name: ${name}
<#-- age -->
age: ${age}

<#-- biko -->
<#if biko?has_content>
biko: ${biko}
</#if>

うん、まあ意味は分かる。変数を割り当てるような感じ

実装

Sample01.java
package com.example;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class Sample01 {

	public static void main(String[] args) throws IOException, TemplateException {
		
		// 初期化
		Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
		
		// ディレクトリを指定
		cfg.setDirectoryForTemplateLoading(new File("src/main/resources/template"));
		
		// テンプレートファイルを指定
		Template temp = cfg.getTemplate("sample1.ftl");
		
		// データモデル
		Map<String, String> root = new HashMap<String, String>();
		root.put("name", "hoge");
		root.put("age", "100");
		root.put("vvvv", "ddddd");	// 未定義のものは設定してもエラーにならない
		
		// テンプレート処理
		Writer out = new StringWriter();
		temp.process(root, out);
		out.flush();
		
		// 結果出力
		String displayStr = out.toString();
		System.out.print(displayStr);
	}
}

※標準出力に返すサンプルが多かったけどあんまり好きじゃないので文字列に設定してみました。

name: hoge
age: 100

できました(^^)

所感

とりあえず、こんな感じ
これだけじゃああまり有用ではないので他のファイルを読み込めることを調べてみる