Velocity 是一個基於 Java 的模板引擎框架,提供的模板語言能夠使用在 Java 中定義的對象和變量上。Velocity 是 Apache 基金會的項目,開發的目標是分離 MVC 模式中的持久化層和業務層。可是在實際應用過程當中,Velocity 不單單被用在了 MVC 的架構中,還能夠被用在如下一些場景中。編程
Web 應用:開發者在不使用 JSP 的狀況下,能夠用 Velocity 讓 HTML 具備動態內容的特性。數組
源代碼生成:Velocity 能夠被用來生成 Java 代碼、SQL 或者 PostScript。有不少開源和商業開發的軟件是使用 Velocity 來開發的。架構
自動 Email:不少軟件的用戶註冊、密碼提醒或者報表都是使用 Velocity 來自動生成的。使用 Velocity 能夠在文本文件裏面生成郵件內容,而不是在 Java 代碼中拼接字符串。框架
轉換 xml:Velocity 提供一個叫 Anakia 的 ant 任務,能夠讀取 XML 文件並讓它可以被 Velocity 模板讀取。一個比較廣泛的應用是將 xdoc 文檔轉換成帶樣式的 HTML 文件。編程語言
基本模板語言語法使用
在 hellovelocity.vm 裏面能夠看到不少以 #
和 $
符開頭的內容,這些都是 Velocity 的語法。在 Velocity 中全部的關鍵字都是以 #
開頭的,而全部的變量則是以$
開頭。Velocity 的語法相似於 JSP 中的 JSTL,甚至能夠定義相似於函數的宏,下面來看看具體的語法規則。
1、變量
和咱們所熟知的其餘編程語言同樣,Velocity 也能夠在模板文件中有變量的概念。
變量定義函數
#set($name =「velocity」)
code
等號後面的字符串 Velocity 引擎將從新解析,例如出現以$
開始的字符串時,將作變量的替換。xml
#set($hello =「hello $name」)
對象
上面的這個等式將會給$hello
賦值爲「hello velocity」模板引擎
變量的使用
在模板文件中使用$name
或者${name}
來使用定義的變量。推薦使用${name}
這種格式,由於在模板中同時可能定義了相似$name
和$names
的兩個變量,若是不選用大括號的話,引擎就沒有辦法正確識別$names
這個變量。
對於一個複雜對象類型的變量,例如$person
,能夠使用${person.name}
來訪問 person 的 name 屬性。值得注意的是,這裏的${person.name}
並非直接訪問 person 的 name 屬性,而是訪問 person 的 getName() 方法,因此${person.name}
和${person.getName()}
是同樣的。
變量賦值
在第一小點中,定義了一個變量,同時給這個變量賦了值。對於 Velocity 來講,變量是弱數據類型的,能夠在賦了一個 String 給變量以後再賦一個數字或者數組給它。能夠將如下六種數據類型賦給一個 Velocity 變量:變量引用, 字面字符串, 屬性引用, 方法引用, 字面數字, 數組列表。
#set($foo = $bar) #set($foo =「hello」) #set($foo.name = $bar.name) #set($foo.name = $bar.getName($arg)) #set($foo = 123) #set($foo = [「foo」,$bar])
2、循環
在 Velocity 中循環語句的語法結構以下:
#foreach($element in $list) This is $element $velocityCount #end
Velocity 引擎會將 list 中的值循環賦給 element 變量,同時會建立一個$velocityCount
的變量做爲計數,從 1 開始,每次循環都會加 1.
3、條件語句
條件語句的語法以下
#if(condition) ... #elseif(condition) ... #else ... #end
4、關係操做符
Velocity 引擎提供了 AND、OR 和 NOT 操做符,分別對應&&、||和! 例如:
#if($foo && $bar) #end
5、宏
Velocity 中的宏能夠理解爲函數定義。定義的語法以下:
#macro(macroName arg1 arg2 …) ... #end
調用這個宏的語法是:
#macroName(arg1 arg2 …)
這裏的參數之間使用空格隔開,下面是定義和使用 Velocity 宏的例子:
#macro(sayHello $name) hello $name #end #sayHello(「velocity」)
輸出的結果爲 hello velocity
6、#parse
和 #include
#parse
和 #include
指令的功能都是在外部引用文件,而二者的區別是,#parse
會將引用的內容當成相似於源碼文件,會將內容在引入的地方進行解析,#include
是將引入文件當成資源文件,會將引入內容原封不動地以文本輸出。分別看如下例子:
foo.vm
文件:
#set($name =「velocity」)
parse.vm
:
#parse(「foo.vm」)
輸出結果爲:velocity
include.vm:
#include(「foo.vm」)
輸出結果爲:#set($name =「velocity」)
以上內容包含了部分 Velocity 的語法,詳細的語法內容能夠參考 Velocity 的官方文檔。
寫於 2015-07-14