簡介
- 相對html+js的傳統設計,如今不少網站都採用div&css+標籤化+模塊化的設計。模板引擎必定的語義,將數據填充到模板中,產生最終的的HTML頁面。模板引擎主要分兩種:客戶端引擎和服務端引擎。
- 客戶端渲染:模板和數據分別傳送到客戶端,在客戶端由JavaScript模板引擎渲染出最終的HTML視圖。將模板渲染放置在客戶端作,能夠下降服務端的壓力,而且若是前端內容分別來自多個後臺系統,而這些後臺的架構各不相同(Java、.Net、Ruby等),則服務器端渲染須要採用不一樣的技術,模板資源沒法共享。
- 服務端渲染:引擎在服務器端將模板和數據合成,返回最終的html頁面,相對於客戶端渲染,數據存儲更加安全。主要有freemarker、velocity、thymeleaf等。
- 原理:將顯示與數據分離,其本質是將模板文件和數據經過模板引擎生成最終的HTML代碼。

- 模板引擎以簡單爲主,其主要目的是爲了讓程序開發和美工設計人員分工明確;在代碼生成過程當中減小大量機械重複工做,大大提升開發效率,良好的設計使得代碼重用,後期維護都下降成本。一個好的模板引擎的使用要考慮的方面無外乎:功能是否強大,使用是否簡單,整合性、擴展性與靈活性,性能。
JSP、freemarker、velocity、thymeleaf性能對比
JSP
優勢:
- 功能強大,能夠寫java代碼
- 支持jsp標籤(jsp tag)
- 支持表達式語言(el)
- 官方標準,用戶羣廣,豐富的第三方jsp標籤庫
- 性能良好。jsp編譯成class文件執行,有很好的性能表現
缺點:
- 因爲能夠編寫java代碼,若是使用不當,容易破壞MVC結構
freemarker
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或Http。它不只能夠用做表現層的實現技術,並且還能夠用於生成XML、JSP或Java等。css
目前企業中,主要使用FreeMarker作靜態頁面或是頁面展現.html
優勢:
- 不能編寫java代碼,能夠實現嚴格的mvc分離
- 性能很是不錯
- 對jsp標籤支持良好
- 內置大量經常使用功能,使用很是方便
- 宏定義(相似jsp標籤)很是方便
- 使用表達式語言
缺點:
選擇使用freemarker的緣由:
- 性能。velocity應該是最好的,其次是jsp,普通的頁面freemarker性能最差(雖然只是幾毫秒到十幾毫秒的差距)。可是在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的性能比使用tag和el的jsp好。
- 宏定義比jsp tag方便
- 內置大量經常使用功能。好比html過濾,日期金額格式化等等,使用很是方便
- 支持jsp標籤
- 能夠實現嚴格的MVC分離
velocity
優勢:
- 不能編寫java代碼,能夠實現嚴格的MVC分離
- 性能良好,聽說比jsp性能還要好些
- 使用表達式語言,聽說jsp的表達式語言就是學velocity的
缺點:
- 不是官方標準
- 用戶羣體和第三方標籤庫沒有jsp多
- 對jsp標籤支持不夠好
thymeleaf
Thymeleaf是個XML/XHTML/HTML5模板引擎,能夠用於Web與非Web應用。前端
Thymeleaf的主要目標在於提供一種可被瀏覽器正確顯示的、格式良好的模板建立方式,所以也能夠用做靜態建模。你可使用它建立通過驗證的XML與HTML模板。相對於編寫邏輯或代碼,開發者只需將標籤屬性添加到模板中便可。接下來,這些標籤屬性就會在DOM(文檔對象模型)上執行預先制定好的邏輯。Thymeleaf的可擴展性也很是棒。你可使用它定義本身的模板屬性集合,這樣就能夠計算自定義表達式並使用自定義邏輯。這意味着Thymeleaf還能夠做爲模板引擎框架。java
優勢:
- 靜態html嵌入標籤屬性,瀏覽器能夠直接打開模板文件,便於先後端聯調
- springboot官方推薦方案
缺點: