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

在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)宏 
宏可以有局部變量
可以遞歸調用宏,同樣可以在模板的後面定義要調用的宏
調用宏時,可以按位置或名字的方式傳遞參數
宏參數可以有缺省值,使得在調用時忽略參數也有效
調用的宏可以有嵌套的體內容(<@myMacro>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變量,如果它是一個模板定義
上述兩者的結合使用

發佈了69 篇原創文章 · 獲贊 7 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章