FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具,使用純Java編寫
l FreeMarker被設計用來生成HTML Web頁面,特別是基於MVC模式的應用程序
l 雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據(如下圖)
模板 + 數據模型 = 輸出
l FreeMarker不是一個Web應用框架,而適合作爲Web應用框架一個組件
l FreeMarker與容器無關,因爲它並不知道HTTP或Servlet;FreeMarker同樣可以應用於非Web應用程序環境
l FreeMarker更適合作爲Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標記庫
l FreeMarker是免費的
(1)實例代碼:
package freemaker; import java.io.File; import java.io.FileWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; public class FreeMarkerDemo { public static void main(String[] args) { // 配置對象 .html Configuration conf = new Configuration(); // 模板路徑 String dir = "D:\\workspace2\\freemaker\\ftl\\"; try { // 導入模板目錄 conf.setDirectoryForTemplateLoading(new File(dir)); // 獲取模板 Template template = conf.getTemplate("freemaker.html"); // 數據 Map root = new HashMap(); root.put("world", "世界"); // 輸出流 Writer out = new FileWriter(new File(dir + "hello.html")); // 生成開始 template.process(root, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("生成完畢"); } }
(2)返回對象
Person p = new Person(); p.setId(9527); p.setName("華安"); root.put("per", p); 編號:${per.id}<br/> 姓名:${per.name}<br/>
(3)遍歷List
List<Person> list = new ArrayList<Person>(); for(int i =0;i<10;i++){ Person p = new Person(); p.setId(9527+i); p.setName("華安"+i); list.add(p); } root.put("list", list); <#list list as p> ${p.id} -- ${p.name} </#list>
(4)遍歷Map
Map map = new HashMap(); map.put("id", "1001"); map.put("name", "秋香"); root.put("map", map); <#list map?keys as key> ${map[key]} </#list>
(5)遍歷List<Map>
Map map = new HashMap(); map.put("id", "1001"); map.put("name", "秋香"); Map map2 = new HashMap(); map2.put("id", "1002"); map2.put("name", "石榴姐"); List<Map> maplist = new ArrayList<Map>(); maplist.add(map); maplist.add(map2); root.put("maplist", maplist); <#list maplist as map> <#list map?keys as key> ${map[key]} </#list> </#list>
(6)遍歷if else
<#list ["星期一","星期二","星期三"] as n> <#if n!="星期一"> ${n} <#else> 您好今天是星期一 </#if> </#list>
(7)時間處理
root.put("dt", new Date()); 年月時間:${dt?datetime}<br/> 時間:${dt?time}