FreeMarker 是一個用 Java 語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與 Web 容器無關,即在 Web 運行時,它並不知道 Servlet 或 HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成 XML,JSP 或 Java 等。可用作生成靜態html。
入門案例:
案例結構:
pom.xml引入依賴包:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
案例模板test.ftl:
<html> <head> <meta charset="utf-8"> <title>FreemarkerDemo</title> </head> <body> <#--我只是一個注釋,我不會有任何輸出 --> <#--插值 可以理解為占位符--> ${name},你好。${message} <br/> <#--指令-----------------------------------------------------start--> <#--assign指令 定義變量--> <#assign linkman="劉德華" /> 聯系人:${linkman} <br/> <#--定義對象類型變量--> <#assign info={"mobile":"13888888888",'address':'中國香港'} /> 電話:${info.mobile} 地址:${info.address} <#--include指令 嵌入其他文件--> <#include "head.ftl" /> <#--if指令 判斷--> <#if success =true> 成功 <#else> 失敗 </#if> <br/><br/> <#--list指令 循環--> <#list list as m> 下標+1:${m_index+1}; 值:${m.name} <br/> </#list> <#--指令---------------------------------------------------------end--> <#--內建函數---------------------------------------------------start--> <#--內建函數 size 獲取集合size--> list中共${list?size}條記錄 <br/><br/> <#--內建函數 eval 將字符串轉換成json對象--> <#assign text="{'bank':'工商銀行','account':'10101920201920212'}" /> <#assign data=text?eval /> 開戶行:${data.bank} 賬號:${data.account} <br/><br/> <#--日期格式化的內建函數--> 當前日期:${now?date} <br> 當前時間:${now?time} <br> 當前日期+時間:${now?datetime} <br> 日期格式化: ${now?string("yyyy年MM月")} <br/><br/> <#--內建函數 c 將數字轉換成字符串--> 累計積分:${point?c} <br/><br/> <#--內建函數-----------------------------------------------------end--> <#--空值處理---------------------------------------------------start--> <#--判斷某變量是否存在:“??”--> <#if aaa??> aaa變量存在 <#else> aaa變量不存在 </#if> <br/><br/> <#--使用!對null值做轉換處理--> ${aaa!'aaa為空時的默認值'} <br/><br/> <#--空值處理-----------------------------------------------------end--> </body> </html>
head.ftl:
<h1>我是head.ftl中的文本</h1>
java代碼 FreemarkerDemo:
package com.zy.demo; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileWriter; import java.io.Writer; import java.util.*; public class FreemarkerDemo { public static void main(String[] args) throws Exception { //第一步:創建一個 Configuration 對象,直接 new 一個對象。構造方法的參數就是 freemarker的版本號。 Configuration configuration = new Configuration(Configuration.getVersion()); //第二步:設置模板文件所在的路徑。 configuration.setDirectoryForTemplateLoading(new File("D:\\IDEAWorkSpace\\freemarker_demo\\src\\main\\resources\\")); //第三步:設置模板文件使用的字符集。一般就是 utf -8. configuration.setDefaultEncoding("utf-8"); //第四步:加載一個模板,創建一個模板對象。 Template template = configuration.getTemplate("test.ftl"); //第五步:創建一個模板使用的數據集,可以是 pojo 也可以是 map。一般是 Map。 Map map = new HashMap(); map.put("name", "張學友"); map.put("message", "共你有過最美的邂逅,共你有過一些風雨憂愁。"); map.put("success", false); List<Map> list = new ArrayList<Map>(); for (int i = 1; i <= 5; i++) { Map m = new HashMap(); m.put("name", i); list.add(m); } map.put("list", list); map.put("now", new Date()); map.put("point", 123456789); //第六步:創建一個 Writer 對象,一般創建一 FileWriter 對象,指定生成的文件名。 Writer out = new FileWriter(new File("d:\\test.html")); //第七步:調用模板對象的 process 方法輸出文件。 template.process(map, out); //第八步:關閉流 out.close(); } }
1 算數運算符
FreeMarker表達式中完全支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , %
2 邏輯運算符
邏輯運算符有如下幾個: 邏輯與:&& 邏輯或:|| 邏輯非:! 邏輯運算符只能作用於布爾值,否則將產生錯誤
3 比較運算符
表達式中支持的比較運算符有如下幾個: 1 =或者==:判斷兩個值是否相等. 2 !=:判斷兩個值是否不等. 3 >或者gt:判斷左邊值是否大於右邊值 4 >=或者gte:判斷左邊值是否大於等於右邊值 5 <或者lt:判斷左邊值是否小於右邊值 6 <=或者lte:判斷左邊值是否小於等於右邊值
**注意**: =和!=可以用於字符串,數值和日期來比較是否相等,但=和!=兩邊必須是相同類型的值,否則會產生錯誤,而且FreeMarker是精確比較,"x","x ","X"是不等的.其它的運行符可以作用於數字和日期,但不能作用於字符串,大部分的時候,使用gt等字母運算符代替>會有更好的效果,因為 FreeMarker會把>解釋成FTL標簽的結束字符,當然,也可以使用括號來避免這種情況,如:<#if (x>y)>
更多用法可參考官方在線手冊 freemarker在線手冊