FreeMarker

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

Java 기반의 Template Engine인 FreeMarker을 정리 한다.


프로그램 문법

프로그램 기초

  • web.xml 선언
<servlet>
  <servlet-name>freemarker</servlet-name>
  <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    
  <init-param>
    <param-name>TemplatePath</param-name>
    <param-value>/</param-value>
  </init-param>
  <init-param>
    <param-name>NoCache</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>ContentType</param-name>
    <param-value>text/html; charset=UTF-8</param-value> 
  </init-param>
   
  <init-param>
    <param-name>template_update_delay</param-name>
    <param-value>0</param-value> 
  </init-param>
  <init-param>
    <param-name>default_encoding</param-name>
    <param-value>ISO-8859-1</param-value> 
  </init-param>
  <init-param>
    <param-name>number_format</param-name>
    <param-value>0.##########</param-value>
  </init-param>

  <load-on-startup>1</load-on-startup>
</servlet> 

<servlet-mapping>
  <servlet-name>freemarker</servlet-name>
  <url-pattern>*.ftl</url-pattern>
</servlet-mapping>  
  • 선언 및 사용
import freemarker.template.*;
import java.util.*;
import java.io.*;
	
Map root = null;
Configuration cfg = null;
Template temp = null; 
Writer out = null;

root = new HashMap();
root.put("user", "Big Joe");

cfg = new Configuration();
cfg.setLocale("ko_KR");
cfg.setNumberFormat("0.####");
cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));
cfg.setObjectWrapper(new DefaultObjectWrapper());  

out = new OutputStreamWriter(System.out);
temp = cfg.getTemplate("test.ftl"); 
temp.process(root, out);
out.flush();

내장 상수

상수/변수

  • Shared variables
cfg.setSharedVariable("company", "Foo Inc.");

함수

데이터 할당

  • 데이터 할당
root.put("user", "Big Joe");

기타 확장 문법

  • 사용자 정의 함수
public class IndexOfMethod implements TemplateMethodModel {
    public TemplateModel exec(List args) throws TemplateModelException {
        if (args.size() != 2) {
            throw new TemplateModelException("Wrong arguments");
        }
        return new SimpleNumber(
            ((String) args.get(1)).indexOf((String) args.get(0)));
    }
}  
root.put("indexOf", new IndexOfMethod());

${indexOf("met", x)}
  • 사용자 정의 Directives

Template 문법

FTL tags (FreeMarker Template Language tags)는 FreeMarker에서 템플릿 개발에 사용되는 간단한 언어 이다.

Template 기초

  • Directives
<#directivename  parameters>
</#directivename>
  • 주석
<#-- ~ -->
  • white space와 carriage return을 제외하고 브라우저에 전달
<#compress>
~
</#compress>

Template 상수/변수

  • 변수 정의 및 값 지정
<#assign 로컬변수명 = 초기화값>
<#assign 로컬변수명 = 초기화값 in my>
  • JSP TagLibrary 지정
<#assign s=JspTaglibs["/WEB-INF/tld/struts-tags.tld"] /> 
<#assign page=JspTaglibs["/WEB-INF/tld/sitemesh-page.tld"] />

<@s.textfield name = "username" label = "User Name" /> 
  • 변수 Type
String, Number, Boolean, Date
Hash, Sequence, Collection
  • 내장 객체
.main 
.vars

<#global x = 1>
${.globals .x}
  • 변수
{$var}
{$var!"Default value"}
{$var[2, 4]} : 문자열의 특정 부분을 잘라내어 반환

Template 함수

Template 포함

  • 외부 파일 포함
<#include "/copyright_footer.html">
  • Namespaces를 지정하여 외부 파일 포함
  • 변수명이나 함수명, 매크로명 앞에 Namespaces인 "my."이 붙는다.
<#import "/lib/my_test.ftl" as my>

Template 분기 및 순환

  • if 문
<#if 조건식>
<#elseif 조건식>
<#else>
</#if>
  • List 반복문
<#list 배열객체 as 로컬엘리어스명>
    <#break>
</#list>

Template 확장 문법

  • 매크로
<@매크로명 변수1, 변수2, ... />
<#macro greet person="Default">
    Hello ${person}!
    <#nested>
</#macro>

<@greet person="Fred">
    Nested에 포함된 문자열
</@greet>

관리자 매뉴얼

참고 문헌