Velocity筆記(上) – JAVA編程語言程序開發技術文章

雜七雜八的看瞭一些velocity的資料,把所見所得做個簡單不系統的筆記寫下來,算是增強記憶。

動態語言的特性:


動態語言需要一個解釋器,而這個解釋器一般在服務器中。


MVC


Model:系統和應用的狀態表示,一般是類或者其他數據結構。可以改變系統狀態的Actions和method。典型的javabean。設計初衷就是為瞭數據和顯示的分離


View:顯示結果數據的組成部分,隨著model的不同以及狀態改變,view也要相應的做出變化。


Controller:用戶和應用之間交互的橋梁。Controller捕獲用戶的輸入,並利用既定邏輯決定將這些命令輸入路由到哪一個model進行處理。


隻使用jsp技術叫做model 1


加入servlet後叫做model 2


什麼是Velocity


Velocity is a template language designed to give Web designers an easy way to


present dynamic information to users of a Web site or application.


Velocity有個集合叫做context,說白瞭就是controller和model層的封裝,提供瞭網頁模板。


實現瞭velocity的代碼將利用從context中的對象裡獲取的數據替換模板中的腳本元素。


Velocity的使用簡單代碼:


一個簡單的語言描述過程就是:將velocity初始化並在context中put進去對象,然後template加載某個vm模板,然後用template將這個vm和context進行merge,就生成瞭view頁面瞭。


Context可以把其他類型的數據put進來,velocity會自動的調用這些對象的toString方法。


下面重點說說context。


Context介紹


Context本質上是一個介於java代碼層和velocity模板層之間的一個數據橋梁。Java開發人員將各種各樣的數據對象放到context中,頁面模板設計人員從context取得這些對象的reference。Velocity中定義瞭VelocityContext來提供基本實現。這個實現與java中的hashtable類似,最有用和常用的方法就是


Public Object put(String key, Object value);


Public Object get(String key);


如果理解瞭context的容器特性,那麼什麼東西能放進去呢?context首先支持放一些迭代對象(Iterative Objects),比如對象數組Object[], java.util.Collection, java.util.Map, java.util.Iterator, java.util.Enumeration, 以及任意的有public Iterator iterator()方法的public class。其次context還支持put靜態類(static class),比如context.put(“Math”, Math.class)。當然,在velocity運行時模板 產生的對象也可以放到context中。


Velocity的三種reference


變量variable:對應java對象的一種字符串化的表示,它返回的值是調用瞭java的toString方法後的結果。


方法method:調用所引用對象的某個方法,該方法必須是public類的一個public方法。如果該方法有返回值,那麼velocity在調用完方法後會同樣的對返回值進行toString包裝。對參數的要求是velocity要求所有的方法參數也必須是string的。


屬性property:類似方法,除瞭訪問java類的屬性外,還等價於get***方法。


$!前綴是quiet notation符號,用這個前綴產生的引用在引用對象不存在的時候,會返回“”字符串而不是不存在的對象的名字的字符串。


“””是轉義字符,可以轉義$符號和其他符號


Velocity指令


#stop:用於debug,當engine遇到這個指令,就會停止執行,並將控制權返回給調用程序。


#include:用於包含外部文件,將外部文件的內容直接加入程序中。


#parse:與include類似,但是不同之處在於,include引入的是靜態的文件,而parse會動態的加載模板,也就是說,parse會解析vm文件,然後再加入到源文件中去。


#set:就是一個很強大的賦值指令,不管被賦值的變量是否已經存在或賦值,新的set指令會完全覆蓋。指令格式就是#set(ref=value)。幾個值得註意的set用法如下


List和range的用法可以等同的看做是java裡的ArrayList。


對boolean值的set,set支持短路short circuit<SPAN style="FONT-FAMI

發佈留言