FreeMarker
둘러보기로 가기
검색하러 가기
Java 기반의 Template Engine인 FreeMarker을 정리 한다.
- 홈페이지 : http://freemarker.org/
- 다운로드 : http://freemarker.org/freemarkerdownload.html
- 라이선스 : BSD-style license
- 플랫폼 : Java
목차
프로그램 문법
프로그램 기초
- 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>