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

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

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

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

#set 語法

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

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

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

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

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

#foreach語法

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