複製鏈接
請複製以下鏈接發送給好友

HTTL

鎖定
HTTL(Hyper-Text Template Language)是 [1]  一個高性能的開源JAVA模板引擎,適用於動態HTML頁面輸出,可替代JSP頁面,指令和Velocity相似。
中文名
超文本模板語言
外文名
Hyper-Text Template Language
服務語言
JAVA
使用場景
WEB頁面渲染

HTTL名詞解釋

HTTL [2]  是一個適用於HTML輸出的開源JAVA模板引擎,可用於替代JSP頁面,它的指令類似於Velocity。

HTTL原理

HTTL採用類似於JSP的原理,將模板編譯成Java字節碼運行,但比JSP的EL更進一步,使用強類型推導,減少運行期反射和轉型,更加快速。

HTTL模板語法

HTTL只有六個指令:#set, #if, #else, #for, #break, #macro,並且不會增加。
語法儘可能符合HTML和JAVA開發者的直覺,指令和老牌的Velocity類似,但改進了Velocity中不符合直覺的地方。 只保留最基本的條件迭代控制指令,渲染過程不允許修改原始數據,防止模板帶過多業務邏輯。默認使用HTML註釋語法,避免干擾原生HTML頁面。
改進Velocity不符合直覺的地方:
  • 指令中的變量不用加$符,如:#if(a == b),而不像Velocity那樣:#if($a == $b),加$有點廢話,容易忘寫。
  • ${x}當變量為null時,輸出空白串,而不像Velocity那樣:輸出源碼${x},如果用$!{x},感嘆號容易忘記寫。
  • 支持在輸出時進行表達式計算,如:${i + 1},而不像Velocity那樣:要先#set($j = $i + 1)到一個臨時變量。
  • 採用更直觀的方式,調用靜態工具方法,如:${"a".toChar},而不像Velocity那樣:$(Tool.toChar("a"))。

HTTL性能優化

將模板編譯成JAVA字節碼運行,並使用強類型推導,減少運行期反射和轉型, 渲染速度接近Java硬編碼輸出,比Velocity等其它模板引擎快一個數量級。 比JSP也快,因為JSP只有Scriptlet是編譯的,Tag和EL是解釋執行的,而HTTL是全編譯的。

HTTL設計與實現

模板自描述,在模板內聲明入參變量類型,並基於入參類型推導模板內所有變量類型,使IDE能方便的實現變量方法補全提示, 對開發過程友好。出錯信息精確定位行列,並顯示出錯位置前後相關內容。採用微核+插件體系,所有環節均可擴展,方便集成和二次開發。
嚴格確保質量,請放心使用,HTTL在發佈前已做:
  • 所有語法指令函數模板單元測試,確保所有模板指令的解析和執行正確。
  • 性能對比基準測試,確保性能接近Java硬編碼輸出,高出其它引擎一個數量級。
  • 長時間運行穩定性測試,確保不出現FullGC,內存溢出,死鎖,CPU佔滿,抖動等。
  • 內存佔用和CPU耗時Profiler分析,確保不出現非預期的內存和CPU瓶頸。
  • Web應用集成測試,確保在SpringMVC,Struts,Webx等集成中可用。
  • 環境兼容性測試,確保在Liunx,Windows,OSX,JDK1.5,1.6,1.7等環境可用。
  • FindBugs代碼問題檢測,確保不出現空指針,資源未關閉等明顯錯誤。
  • JDepend分包依賴檢測,確保分包依賴的合理性。
參考資料