jsp,velocity,freemark頁面引擎的比較

破棉襖發表於2015-04-22
在java領域,表現層技術主要有三種:jsp、freemarker、velocity。


jsp是大家最熟悉的技術
優點:
1、功能強大,可以寫java程式碼
2、支援jsp標籤(jsp tag)
3、支援表示式語言(el)
4、官方標準,使用者群廣,豐富的第三方jsp標籤庫
5、效能良好。jsp編譯成class檔案執行,有很好的效能表現
缺點:
jsp沒有明顯缺點,非要挑點骨頭那就是,由於可以編寫java程式碼,如使用不當容易破壞mvc結構。


velocity是較早出現的用於代替jsp的模板語言
優點:
1、不能編寫java程式碼,可以實現嚴格的mvc分離
2、效能良好,據說比jsp效能還要好些
3、使用表示式語言,據說jsp的表示式語言就是學velocity的
缺點:
1、不是官方標準
2、使用者群體和第三方標籤庫沒有jsp多。
3、對jsp標籤支援不夠好


freemarker
優點:
1、不能編寫java程式碼,可以實現嚴格的mvc分離
2、效能非常不錯
3、對jsp標籤支援良好
4、內建大量常用功能,使用非常方便
5、宏定義(類似jsp標籤)非常方便
6、使用表示式語言
缺點:
1、不是官方標準
2、使用者群體和第三方標籤庫沒有jsp多


選擇freemarker的原因:
1、效能。velocity應該是最好的,其次是jsp,普通的頁面freemarker效能最差(雖然只是幾毫秒到十幾毫秒的差距)。但是在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的效能比使用tag和el的jsp好。
2、宏定義比jsp tag方便
3、內建大量常用功能。比如html過濾,日期金額格式化等等,使用非常方便
4、支援jsp標籤

5、可以實現嚴格的mvc分離

下面是一個使用FreeMarker能夠實現,而Velocity不能實現的不太全面的特性清單:
(1)數字和日期支援
可以對任何數字型別進行算術運算和比較,包括精度型別
可以比較和顯示(格式化)日期/時間值
(2)國際化 
根據各種內建和定製的數字格式,格式化本地敏感的數字
根據各種內建和定製的日期格式,格式化本地敏感和時區敏感的日期
標識(變數名)可以包含非英語字元,如重音字元、阿拉伯字元、中文字元等
(3)迴圈處理 
可以跳出迴圈
可以在迴圈外訪問迴圈體內的控制變數
可以測試是否達到最後一次迴圈
(4)模板級別的陣列處理
可以使用類似[i]語法的索引方式訪問陣列元素
可以查詢陣列長度
(5)宏 
宏可以有區域性變數
可以遞迴呼叫宏,同樣可以在模板的後面定義要呼叫的宏
呼叫宏時,可以按位置或名字的方式傳遞引數
宏引數可以有預設值,使得在呼叫時忽略引數也有效
呼叫的宏可以有巢狀的體內容(body@myMacro>),能夠在宏被呼叫時進行處理
宏是純變數的,可以基於表示式來執行宏,或者作為引數傳遞給另一個宏
(6)名稱空間
可以對變數使用多名稱空間,這對建立宏庫很重要,因為這可以避免應用程式中指定的變數和宏庫中變數的名字衝突
(7)使用內建的函式/運算子維護Java無關的string、list和map
可以將字串轉換成大/小寫、首字元大/小寫,對HTML、XML或RTF進行轉義處理,substring、split、查詢字串長度、find/replace子串等等
透過索引訪問list元素,獲得子list,合併list,查詢list長度,對list排序
透過key變數訪問map元素,檢查map是否為空,獲得key或值的list
(8)揭示模板中的錯誤
當訪問一個未定義的變數,FreeMarker不會沉默;你可以配置FreeMarker來停止render模板顯示錯誤資訊,或者跳過錯誤部分;無論哪種,FreeMarker會記錄問題(日誌)
在寫錯指令名時,FreeMarker會丟擲異常
(9)高階render控制
可以使用一組標記來封裝模板的一塊區域,以便在塊區中所有要修改的地方應用HTML或XML轉義(或其它使用FreeMarker表示式表示的轉換)
FreeMarker有轉換器,它們是模板的一塊區域,在render時,透過轉換過濾;內建的轉換器包括空白字元壓縮、HTML和XML轉義;你可以實現自己的轉換器;當然轉換器可以巢狀
可以使用flush指令顯式的flush輸出
可以使用stop指令停止render
(10)文字
除了通常的字串、數字和布林值文字,也可以在模板中定義list和map文字
支援所有的Java轉義文字:\b、\t、\n、\f、\r、\”、\’、\\,也支援\xXXXX使用UNICODE指定字元
(11)高階空白字元移除
FreeMarker堅持移除各行只包含不輸出FreeMarker標記的空白字元
對於明顯要整修掉不需要的空白字元的指令來說,空白字元是個大問題
(12)整合其它技術
可以在模板中使用JSP標記庫
可以直接在Python工程中使用
(13)強大的XML轉換能力
在2.3版本中,FreeMarker具有強大的新XML轉換能力,使得替代XSLT成為可能
Velocity在這方面是無法真正競爭的,除非改進核心引擎,如支援宏庫對映到名字空間,宏中支援區域性變數
(14)高階模板元程式
可以捕獲輸出的任何部分到context變數中 
可以解釋任何context變數,如果它是一個模板定義
上述兩者的結合使用




原文:http://blog.csdn.net/hehaoyang666/article/details/40535505?utm_source=tuicool

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1591173/,如需轉載,請註明出處,否則將追究法律責任。

相關文章