FreeMarker被設計用來生成HTML Web頁面,特別是基於MVC模式的應用程序
雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據(如下圖)
wKiom1ZNfmryiJiKAAAb_fr77R8479.png
模板 + 數據模型 = 輸出
FreeMarker不是一個Web應用框架,而適合作爲Web應用框架一個組件
FreeMarker與容器無關,因爲它並不知道HTTP或Servlet;FreeMarker同樣可以應用於非Web應用程序環境
FreeMarker更適合作爲Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標記庫
FreeMarker是免費的
(1)實例代碼:
首先導包:freemarker-2.3.23.jar
//測試數據類
package com.learn.freem;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.learn.io.EntityMaker;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class TestFreemakerEntity {
public static void main(String[] args) {
// 配置對象 .html
Configuration conf = new Configuration();
// 模板路徑
String dir = "D:\\學習\\web\\Freemarker\\filt\\";
try {
// 導入模板目錄
conf.setDirectoryForTemplateLoading(new File(dir));
// 獲取模板
Template template = conf.getTemplate("Templatefreemaker.html");
//以下的爲測試數據
// 數據
Map root = new HashMap();
root.put("hello", "數據");
// 返回對象
EntityMaker m = new EntityMaker(1000, "麗麗");
root.put("per", m);
// 遍歷List
List<EntityMaker> list = new ArrayList<EntityMaker>();
for (int i = 0; i < 10; i++) {
EntityMaker maker = new EntityMaker(11 + i, "麗麗" + i);
list.add(maker);
}
root.put("mm", list);
// 遍歷Map
Map map = new HashMap();
map.put("id", "1000");
map.put("name", "麗麗");
map.put("age", "21");
root.put("map", map);
// 遍歷List<Map>
Map map1 = new HashMap();
map1.put("id", "1111");
map1.put("name", "林林");
Map map2 = new HashMap();
map2.put("id", "1002");
map2.put("name", "麗麗");
List<Map> maplist = new ArrayList<Map>();
maplist.add(map1);
maplist.add(map2);
root.put("maplist", maplist);
//時間處理
root.put("dt", new Date());
// 輸出流(生成的靜態頁面)
Writer out = new FileWriter(new File(dir + "creatinghello.html"));
// 生成開始
template.process(root, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("生成完畢");
}
}
//測試數據實體類
package com.learn.io;
public class EntityMaker {
private Integer pesrID;
private String pesrName;
public Integer getPesrID() {
return pesrID;
}
public void setPesrID(Integer pesrID) {
this.pesrID = pesrID;
}
public String getPesrName() {
return pesrName;
}
public void setPesrName(String pesrName) {
this.pesrName = pesrName;
}
public EntityMaker(Integer pesrID, String pesrName) {
super();
this.pesrID = pesrID;
this.pesrName = pesrName;
}
public EntityMaker() {
super();
}
}
<!--模板-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板</title>
</head>
<body>
<h2>數據</h2>
${hello}
<hr>
<h2>返回對象</h2>
編號:${per.pesrID}<br>
姓名:${per.pesrName}
<hr>
<h2>遍歷List</h2>
<#list mm as p>
編號:${p.pesrID}+姓名:${p.pesrName}<br/>
</#list>
<hr>
<h2>遍歷Map</h2>
<#list map?keys as key>
${map[key]}
</#list>
<hr>
<h2>遍歷List Map</h2>
<#list maplist as map>
<#list map?keys as key>
${map[key]}
</#list>
</#list>
<hr>
<h2>if else</h2>
<#list ["麗麗","林林","林麗"] as n>
<#if n!="林麗">
${n}
<#else>
今天林麗值班
</#if>
</#list>
<hr>
<h2>時間處理</h2>
年月時間:${dt?datetime}<br/>
時間:${dt?time}<br>
年月:${dt?date}
</body>
</html>
<!-- (生成的靜態頁面) -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemaker</title>
</head>
<body>
<h2>數據</h2>
數據
<hr>
<h2>返回對象</h2>
編號:1,000<br>
姓名:麗麗
<hr>
<h2>遍歷List</h2>
編號:11+姓名:麗麗0<br/>
編號:12+姓名:麗麗1<br/>
編號:13+姓名:麗麗2<br/>
編號:14+姓名:麗麗3<br/>
編號:15+姓名:麗麗4<br/>
編號:16+姓名:麗麗5<br/>
編號:17+姓名:麗麗6<br/>
編號:18+姓名:麗麗7<br/>
編號:19+姓名:麗麗8<br/>
編號:20+姓名:麗麗9<br/>
<hr>
<h2>遍歷Map</h2>
1000
麗麗
21
<hr>
<h2>遍歷List Map</h2>
1111
林林
1002
麗麗
<hr>
<h2>if else</h2>
麗麗
林林
今天林麗值班
<hr>
<h2>時間處理</h2>
年月時間:2015-11-20 13:18:02<br/>
時間:13:18:02<br>
年月:2015-11-20
</body>
</html>