1. 程式人生 > >Velocity模板的學習

Velocity模板的學習

Velocity:是一個基於Java的模板引擎,可以讓檢視的設計者在web頁面中引用java程式碼中定義的資料物件和命令。web designers只需要將精力用於檢視外觀設計上,而java程式設計師只需要關心如何寫出高效簡潔的java物件以實現業務邏輯。Velocity會將它們組裝到一起,相比傳統的jsp,velocity徹底的將避免在檢視設計中出現java程式碼。
VTL(Velocity Template Language):使用引用(references)這種方式將動態內容(一般指java程式碼生成的資料物件)加入到你的web site中。VTL宣告所有的語句都是以#開頭,且包含一個指示符,Velocity將所有的變數以符號$開頭,所附的值要用雙引號括起來。

1,Velocity基本語法:
“#”:用來標識Velocity的關鍵字,包括#set,#if,#else,#foreach,#end,#include,#parse,#marco等;
“$”:用於標識Velocity中的變數,如:$i,$msg,$TagUtil.options()等;
“{}”:用於明確標識Velocity的變數;
“!”:用於強制把不存在的變數顯示為空白,例如:當找不到username時,$username返回的字串為“$username”,而$!username返回的是空字串.

2.Velocity引擎提供了AND,OR,和NOT操作符,分別對應與&&,||和!,如:

#if($foo&&$bar)
...
#end

3,巨集:Velocity中的巨集可以理解為函式定義,定義的語法如下:

#marco(marcoName arg1 arg2)
...
#end

呼叫這個巨集的語法為:

#marcoName(arg1 arg2)

舉例如下:

#marco(sayHello &name)
    hello $name
#end
呼叫:#sayHello("velocity")
輸出為:hello velocity

4.#parse,#include指令的功能都是在外部引用檔案。區別就是:#parse會將所引用的內容當成類似於原始碼檔案,會將內容在引入的地方進行解析;#include是將引入的檔案當成資原始檔,會將引入的內容原封不動的以文字輸出。例如

foo.vm
#set($name="velocity)

parse.vm
#parse("foo.vm")
結果為:velocity

include.vm
#include("foo.vm")
結果為:#set($name="velocity")

5.註釋:Velocity中有兩種註釋方式
(1)單行註釋:##
(2)多行註釋

{#*
...
*#
}

6.單雙引號:單引號不解析引用的內容,雙引號解析引用的內容。

#set($var="hello")
    '$var'結果為:$var
    "$var"結果為hello

Velocity的總結:模板引擎是為了使使用者介面與業務資料內容分離而產生的的,它可以生成特定格式的文件。MVC中,M(model)包括後臺的事務邏輯,真正處理事務的程式碼和商業邏輯等,它們是整個網站中最重要的工作部分;V(view)是網頁的顯示部分,這部分主要接受來自後臺程式結果或資料,進行顯示;C(controller)在檢視和模型之間傳遞控制,並根據要求呼叫相應的檢視顯示模型返回的資料,主要負責排程工作。這樣指責劃分明確,簡化了開發過程中相關人員工作,而平時的jsp頁面,可以在jsp頁面中寫java相關邏輯,這樣在V中混淆了邏輯程式碼,所以java模板引擎出現,模板引擎的出現,它嚴格的區分程式開發功能能和指責的劃分。

Velocity與JSP的區別
優點有:JSP:(1)功能強大,可以寫java程式碼;
(2)支援JSP標籤(Jsp tag)
(3)支援表示式語言(EL)
(4)官方標準,第三方jsp標籤庫,j2ee規範
而Velocity不能編寫java程式碼,可以實現嚴格的MVC分離,比JSP效能好些。
缺點有:JSP中可以寫java程式碼,當jsp中寫過多的java業務邏輯,容易破壞mvc的結構;
Velocity中,不能編寫java程式碼,使用者群體和第三方標準庫沒有jsp多,對jsp標 籤支援的不夠好。