FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。
模板編寫為FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的編程語言。 那就意味着要准備數據在真實編程語言中來顯示,比如數據庫查詢和業務運算, 之后模板顯示已經准備好的數據。在模板中,你可以專注於如何展現數據, 而在模板之外可以專注於要展示什么數據。
這種方式通常被稱為 MVC (模型 視圖 控制器) 模式,對於動態網頁來說,是一種特別流行的模式。 它幫助從開發人員(Java 程序員)中分離出網頁設計師(HTML設計師)。設計師無需面對模板中的復雜邏輯, 在沒有程序員來修改或重新編譯代碼時,也可以修改頁面的樣式。
其實FreeMarker的原理就是:模板+數據模型=輸出
在maven里面加入或者引入Jar即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
用例測試
package com.dduweb.web.utils; import com.dduweb.common.utils.StringUtils; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import java.io.StringReader; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; /** * Created by Herbert 2020/4/13. */ public class TestCode { public static void main(String[] args) throws Exception { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("name", "Brady"); String templateContent="hello ${name}!"; System.out.println(TestCode.parseContent(templateContent,paramMap)); } private static String parseContent(String content,Map<String, Object> dataMap) { try { String tempname = StringUtils.hashKeyForDisk(content); Configuration configuration = new Configuration(); configuration.setNumberFormat("#"); StringTemplateLoader stringLoader = new StringTemplateLoader(); stringLoader.putTemplate(tempname, content); freemarker.template.Template template = new freemarker.template.Template(tempname, new StringReader(content)); StringWriter stringWriter = new StringWriter(); template.process(dataMap, stringWriter); configuration.setTemplateLoader(stringLoader); content = stringWriter.toString(); }catch (Exception e) { e.printStackTrace(); throw new RuntimeException("模板解析失敗"); } return content; } }
運行后輸出: