模板引擎總結(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等)


一.首先我們可以了解下為什么要用模板引擎:

  因為模板引擎可以讓(網站)程序實現界面與數據分離,業務代碼與邏輯代碼的分離,這就大大提升了開發效率,良好的設計也使得代碼重用變得更加容易。我們司空見慣的模板安裝卸載等概念,基本上都和模板引擎有着千絲萬縷的聯系。模板引擎不只是可以讓你實現代碼分離(業務邏輯代碼和用戶界面代碼),也可以實現數據分離(動態數據與靜態數據),還可以實現代碼單元共享(代碼重用),甚至是多語言、動態頁面與靜態頁面自動均衡(SDE)等等與用戶界面可能沒有關系的功能。

二.幾個常見的模板引擎分析:

  1.Thymeleaf

    特性

      1.Thymeleaf 在有網絡和無網絡的環境下皆可運行,即它可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由於它支持 html 原型,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性,所以 thymeleaf 的模板可以靜態地運行;當有數據返回到頁面時,Thymeleaf 標簽會動態地替換掉靜態內容,使頁面動態顯示。

      2.Thymeleaf 開箱即用的特性。它提供標准和spring標准兩種方言,可以直接套用模板實現JSTL、 OGNL表達式效果,避免每天套模板、該jstl、改標簽的困擾。同時開發人員也可以擴展和創建自定義的方言。
      3. Thymeleaf 提供spring標准方言和一個與 SpringMVC 完美集成的可選模塊,可以快速的實現表單綁定、屬性編輯器、國際化等功能。
       (目前主流的模板引擎之一,Spring Boot推薦)
     優點:語法簡潔,功能強大。
     缺點:性能差。
     使用(SpringBoot+IDEA):
      直接在pom文件中引入如下依賴
<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技術,但是技多不壓身,推薦還是學一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM