一.首先我們可以了解下為什么要用模板引擎:
二.幾個常見的模板引擎分析:
1.Thymeleaf
特性:
1.Thymeleaf 在有網絡和無網絡的環境下皆可運行,即它可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由於它支持 html 原型,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性,所以 thymeleaf 的模板可以靜態地運行;當有數據返回到頁面時,Thymeleaf 標簽會動態地替換掉靜態內容,使頁面動態顯示。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
導進相關依賴后
然后只要將html文件放入classpath:templates文件下,thymeleaf就能自動完成渲染(例如控制器中返回的字符串會直接到該文件夾中找到對應的頁面)
導入Thymeleaf命名空間:在html文件中添加如下代碼
<html lang="en" xmlns:th="http://www.thymeleaf.org">
語法:
獲取變量的值${...}
鏈接@{...}
文本替換th:text=${...} (這里可以替換id值,class值以及內容等)
判斷語句th:if th:unless th:switch等
遍歷th:each
......可參考下圖,如果需要了解更多可以查看對應的API文檔
2.FreeMaker
特性:
在所有采用網頁靜態化手段的網站中,FreeMarker使用的比例大大的超過了其他的一些技術。HTML靜態化也是某些緩存策略使用的手段,對於系統中頻繁使用數據庫查詢但是內容更新很小的應用,可以使用FreeMarker將HTML靜態化。比如一些網站的公用設置信息,這些信息基本都是可以通過后台來管理並存儲在數據庫中,這些信息其實會大量的被前台程序調用,每一次調用都會去查詢一次數據庫,但是這些信息的更新頻率又會很小,因此也可以考慮將這部分內容進行后台更新的時候進行靜態化,這樣就避免了大量的數據庫訪問請求,提高了網站的性能。
(目前主流的模板引擎之一)
優點:
FreeMarker的一個優點在於不能輕易突破模板語言開始編寫Java代碼,因此降低了領域邏輯漏進視圖層的危險幾率,也提高了網站的性能。
缺點:
需要一點附加配置來將其平穩地集成到應用程序中,一些IDE可能並不完全支持它,當然還有開發者或設計者也許需要學習一門陌生的模板語言。
使用:
導入相關依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
在配置文件中添加FreeMaker的配置如下后就可以使用了
# 設定ftl文件路徑 spring.freemarker.tempalte-loader-path=classpath:/templates # 關閉緩存,及時刷新 spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true spring.freemarker.request-context-attribute=request
#設置FreeMaker文件的后綴 spring.freemarker.suffix=.ftl
語法:可以參考API文檔
3.Enjoy
特性:
Enjoy 是基於 Java 語言的極輕量極模板引擎且不依賴任何第三方。極簡設計僅 if、for、switch、set、define、include、render 七個核心指令,讓學習成本低到極致。獨創 DKFF(Dynamic Key Feature Forward) 詞法分析算法與 DLRD (Double Layer Recursive Descent)語法分析算法,避免使用 javacc、antlr、jflex 生成器,令代碼量少到極致。
優點:功能強大,擴展性強,與Java非常契合,學習成本低,輕量級等。
缺點:
使用和語法:本人暫未使用,可參考https://www.jfinal.com/doc如下圖所示
4.Velocity
特性:Velocity是一個基於Java的模板引擎。它允許任何人使用簡單但功能強大的模板語言來引用Java代碼中定義的對象。
優點:使用了模板緩沖,在模板緩沖機制的作用下,模板不再是每次出現請求的時候從磁盤讀取,而是以最理想的方式在內存中保存和解析。在開發期間,模板緩沖通常處於禁用狀態,因為這時請求數量較少,而且要求對頁面的修改立即產生效果。開發完畢之后,模板一般不再改變,此時就可以啟用模板緩沖功能。因此Velocity執行速度明顯優於JSP。
缺點:不是官方標准 用戶群體和,第三方標簽庫較少且對JSP標簽支持不夠好。
使用:本人尚未使用過,可以參考官方文檔。
5.JSP
雖然是一款功能比較強大的模板引擎,並被廣大開發者熟悉,但它前后端耦合比較高。比如說前端的html頁面還要手動修改成jsp頁面,大大加重了工作量,而且動態和靜態資源也是耦合性太高。
其次是JSP頁面的效率沒有HTML高,因為JSP是同步加載。而且JSP需要tomcat,但又不支持nginx等,已經跟不上時代的潮流。
綜上:目前開發中已經很少用JSP了,只是我們很多時候會在碰到一些以前的框架里有用到JSP技術,但是技多不壓身,推薦還是學一下。