做java開發(fā)的朋友一般對JSP是比較熟悉的,大部分人第一次學習開發(fā)View層都是使用JSP來進行頁面渲染的,我們都知道JSP是可以嵌入java代碼的,在遠古時代,java程序員甚至在一個jsp頁面上就完成了所有的業(yè)務(wù)邏輯代碼,能夠?qū)嵱闷脚_的API,這是jsp的一個優(yōu)點,所謂物極必反,這一點在某些方面也成了它的一個缺點,內(nèi)容和表示的界限變得很模糊,使得mvc分層不夠徹底.

Velocity的寫法比較接近java的語法,語法非常簡單,對于java開發(fā)人員來說,從一竅不通到上手使用velocity幾乎不需要花很多時間,還有很重要的一點,我覺得是velocity沒有很多的標簽,自由度比較高.

Velocity渲染模板時,先把模板解析成一顆語法樹,然后去遍歷這棵樹,分別渲染每一個節(jié)點.

我對velocity也屬于剛剛?cè)腴T的階段,所以只是簡單的總結(jié)一下一些常用的語法和基礎(chǔ)知識.

#set 語法

#set可以創(chuàng)建一個Velocity的變量,一般用于向一個變量或?qū)傩再x值,下面的第一個例子,大概和java中的String name=user.getName();是一個意思.

在Velocity語法樹中,#set表達式對應(yīng)的是一個ASTSetDirective類,"="兩邊的表達式值,分別對應(yīng)該類的兩個子節(jié)點,LHS和RHS.

  • #set($user.name="zhangsan")   可以理解為     user.setName("zhangsan")
  • #set(name=name=user.name)         可以理解為     user.getName();

像上述例子中的第一個:不僅可以表示 user.setName("zhangsan"),還可以表示user.setname("zhangsan"),或者user.put("name","zhangsan"),這是動態(tài)語言的特點,不想java語法那樣嚴格的定義.

注意:#set表達式,結(jié)尾不需要#end跟隨,其他表達式基本都需要加#end.

#foreach語法

這是Velocity中唯一一種循環(huán)的語法,類似于java的增強for循環(huán)