在做專案的時候,身為開發者的我們經常會有「產生動態文字內容」這樣的需求,具體來說像是產生網頁、email內容、甚至寫程式來產生程式碼等等。如果為了一時貪求快速,而把這些文字處理的動作寫在程式裡面,這麼一來整體的維護性就會大打折扣。「模版引擎」(template engine) 就是因應這樣的需求而誕生的!
Java界的模版引擎有很多套,其中比較容易上手,功能也相當完備的,當屬 FreeMarker。
上面這張圖片來自官網,很簡單明白地說明了 FreeMarker 作為模版引擎的功能,把樣版文字(Template)與封裝資料的物件 (Java objects)融合成新的內容,然後輸出。以下就帶大家完成一個Hello World專案吧!
- 建立一個 Maven 專案,加入以下 dependency
12345<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.26-incubating</version></dependency> - 在 src/main/resources/templates/ 底下 新增 helloworld.ftl
123456<html><header></header><body><h1>Hello, ${name}!</h1></body></html> - 新增封裝資料的物件
1234567891011121314151617181920212223242526272829package com.appx.demo.freemarker;public class User {private String name;private String location;public User(String name, String location) {this.name = name;this.location = location;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}} - 主程式
123456789101112131415161718192021222324252627package com.appx.demo.freemarker;import java.io.StringWriter;import freemarker.template.Configuration;public class App {public static void main(String[] args) throws Exception {//初始化freemarker設定Configuration cfg = new Configuration(Configuration.VERSION_2_3_26);//指定樣版所在位置 (這裡是classpath的templates資料夾底下)cfg.setClassForTemplateLoading(App.class, "/templates");cfg.setDefaultEncoding("UTF-8");//封裝資料的物件,可以是一般物件,也可以是List, Map 等集合物件User user = new User("Terry", "Taiwan");//取得樣版處理後輸出到 StringWriterStringWriter sw = new StringWriter();cfg.getTemplate("helloworld.ftl").process(user, sw);//透過StringWriter的toString()取得內容,後續可以進行處理System.out.println(sw);}} - console 輸出,可以發現樣版中的 ${name},被取代為 “Terry”
這樣我們就完成一個最基本的 FreeMarker 範例囉,下一篇將繼續為大家介紹FreeMarker樣版中各種便利的功能!
Facebook Comments