Velocity 的自定義指令

Velocity 的指令類型簡介

在 Velocity 的指令定義上,有兩種指令類型分別是行指令和塊指令。行指令例如 #set($name= 」 Winter Lau 」 ) 賦值指令,只有一行,中間沒有任何的代碼;而塊指令例如循環指令 #foreach($idx in [1..20]) $idx #end,塊指令須要用 #end 來結束。在 Velocity 自帶的指令中塊指令包括有:#if #elseif #foreach #define 和 #macro 這幾個指令,除此以外都是行指令。數據庫

編寫自定義的 Velocity 指令

Velocity 容許您對指令系統進行擴展,在 Velocity 引擎初始化的時候會加載系統內置指令和用戶的自定義指令。系統的內置指令已經在 Velocity 的 Jar 包中的 directive.properties 文件中定義,不建議直接修改該文件。而自定義的指令要求用戶在 velocity.properties 文件中定義的,例如:userdirective=net.oschina.toolbox.CacheDirective。若是是多個自定義指令則使用逗號隔開。apache

全部的自定義指令要求擴展 org.apache.velocity.runtime.directive.Directive 這個類。爲了更加形象直觀的表現 Velocity 自定義指令的優勢,接下來咱們將以一個實際的應用場景進行講解。緩存

在該應用場景中,全部的頁面請求直接指向 vm 文件,中間沒通過任何的控制器。數據是經過 Velocity 的 toolbox 直接讀取並顯示在頁面上。若是數據是來自數據庫的,並且訪問量很是大的時候,咱們就須要對這些數據進行緩存以便快速響應用戶請求和下降系統負載。一種方法是直接在 toolbox 的讀取數據的方法中進行數據的緩存;另一種就是咱們接下來要介紹的,經過編寫自定義的緩存指令來緩存頁面上的某個 HTML 片斷。spa

首先咱們定義一個這樣的塊指令:#cache( 「 CacheRegion 」 , 」 Key 」 ) ,其中第一個參數爲緩存區域、第二個參數爲對應緩存數據的鍵值。該指令自動將包含在指令內部的腳本執行後的結構緩存起來,當第一次請求時檢查緩存中是否存在此 HTML 片斷數據,若是存在就直接輸出到頁面,不然執行塊指令中的腳本,執行後的結果輸出到頁面同時保存到緩存中以便下次使用。使用方法以下所示:code

相關文章
相關標籤/搜索