jsp,velocity,freemark頁面引擎的比較
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java模板引擎:velocityJava
- JSP註冊頁面JS
- SAP UI5和React的頁面渲染效能比較UIReact
- jsp頁面掛死問題JS
- JSP筆記-頁面重定向JS筆記
- SAP Hybris Commerce的JSP tag和SAP BSP tag的比較JS
- 規則引擎與ML模型的比較 - xLaszlo模型
- jsp+servlet登入註冊頁面JSServlet
- 教你如何寫第一個jsp頁面JS
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- webscoket+jsp實現簡單的多人聊天頁面WebJS
- java servlet 與jsp幾種頁面跳轉的方法JavaServletJS
- SAP Commerce開發之如何找到某個頁面對應的JSP實現頁面JS
- JSp頁面使用El表示式取不到值JS
- SpringMVC中JSP頁面不顯示EL表示式的原因SpringMVCJS
- html5的遊戲引擎你瞭解多少?都有哪些比較好用的引擎呢?HTML遊戲引擎
- jsp頁面傳中文到資料庫亂碼JS資料庫
- jsp頁面判斷檔案上傳型別JS型別
- SAP BSP和JSP頁面裡UI元素的ID生成邏輯JSUI
- Web頁面或app等前端頁面之Java Web的JSP、Servlet、Cookie、Session等技術小結WebAPP前端JavaJSServletCookieSession
- FindBugs Security JSP 無法識別 jsp 頁面<script>jstl</script>程式碼中的 xss 漏洞問題JS
- 使用 Slow Admin 構建較複雜的頁面
- jsp頁面中同時遍歷多個list集合JS
- Integer的比較
- 規則引擎與機器學習比較與結合機器學習
- 解決Spring Boot無法跳轉jsp頁面問題Spring BootJS
- jsp頁面number型別自動轉為String型別JS型別
- Eclipse匯入專案後JSP頁面出現報紅EclipseJS
- jsp頁面表單不輸入卻能登入成功?JS
- js 深比較和淺比較JS
- Go和Python比較的話,哪個比較好?GoPython
- 八個層面比較 Java 8, RxJava, ReactorRxJavaReact
- freemark輸出字串字串
- IDEA解決JSP頁面無法使用EL表示式問題IdeaJS
- 集合類的比較
- Velocity和speed的區別
- Oracle date 型別比較和String比較Oracle型別
- jsp頁面通過url向後臺傳值時的中文亂碼問題JS
- 字串比較字串