日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java velocity 语法_Velocity初探小结--velocity使用语法详解

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java velocity 语法_Velocity初探小结--velocity使用语法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

我對velocity也屬于剛剛入門的階段,所以只是簡單的總結一下一些常用的語法和基礎知識.

#set 語法

#set可以創建一個Velocity的變量,一般用于向一個變量或屬性賦值,下面的第一個例子,大概和java中的String name=user.getName();是一個意思.

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

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

#set($name=$user.name) ? ? ? ? 可以理解為 ? ? user.getName();

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

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

#foreach語法

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

#foreach($user in $userList)

.....

#end--------------------------------基本和java中的for循環是一個意思--------------------------------

for(User user:userList){

.....

}

$userList變量的內容是一個數組, Hashtable 或者 Array. 分配給$user?變量的值是Java的對象和一個變量的引用.

這里userList是一個List,可以使用$foreach.count來進行簡單的循環計數.

#if( $foreach.hasNext ),可以用來判斷是否是最后一次迭代.

如果你想從零開始進行#foreach循環, 你可以使用 $foreach.index 代替$foreach.count..

同樣的, $foreach.first和$foreach.last也提供了$foreach.hasNext方式.如果你想訪問#foreach外面的這些屬性, 你能夠引用它們通過 $foreach.parent或 $foreach.topmost 屬性 ( $foreach.parent.index 或者 $foreach.topmost.hasNext)

如果你的userList中有很多數據,但你只想遍歷前3條,那么可以這么寫:

#foreach( $user in $userList )

#if( $foreach.count > 3 )

#break

#else

.....

#end

#end

注意:在#foreach中產生的變量只在foreach的作用范圍內有效

#if,#elseif,#else語法

條件判斷語句,語法規則和java也是基本一致的,但是在判斷語句的處理上卻有很大不同.

例如#if($user),這里只要$user變量的值不是null,或者不是false,那么就為true.

表達式中支持很多條件判斷,如">","

#parse語法

#parse語法的作用是引用其他模塊,比如你可以把多個vm文件中重復的代碼抽取出來,放到一個單獨的"common.vm"文件中,然后再在每一個模塊的對應位置使用#parse('common.vm')把公共模塊引入到當前模塊.

需要特別注意的一點是,common.vm中的變量的值都可以由#paser()所在的vm文件模板的上下文中取得,也就是說,你只是把一段公共的vm代碼放在一個單獨的模板文件中,除此之外,和兩者在一個模板文件中沒有任何其他區別.

另外#parse()中不僅能引入其他模板文件,也可以引入一個變量.同時需要記得一點,#parse引入的模板文件中,也可以包含#parse.

說到了#parse就要提到另一個引入的指令#include,也是引入外部文件的意思,他們的區別總結如下:

#include()可以同時引入多個文件, #parse()只能一次引入一個文件(或變量).

#include引入的內容不會被Velocity的emplate engine即模板引擎處理, #parse引入的內容會被處理,也就是說#include引入的內容不能包含velocity語法,而后者,當然是可以的.

(轉)Velocity和jsp的區別:

執行方式不一樣: JSP是編譯執行,Velocity是解釋執行.如果JSP文件被修改了,對應的java類就會重新編譯,而Velocity卻不需要,只是會重新生成一棵語法樹.

執行效率不同:理論上來說,編譯執行的效率明顯好于解釋執行,在JSP中方法調用是直接執行的,而在velocity中使用反射執行的,從這方面來講JSP效率會明顯好于Velocity.如果JSP中有大量的jstl或者其他標簽的話,就不一定了.

需要的環境支持不同:JSP的執行依賴Servlet環境,他需要ServletContext,request,response這些類.而渲染Velocity不需要其他環境的支持,所以說velocity的應用環境更廣.

參考資料

深入分析javaWeb技術內幕-第16章

總結

以上是生活随笔為你收集整理的java velocity 语法_Velocity初探小结--velocity使用语法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。