jsp、freemarker、velocity的比較

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   使用   

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

效能:velocity應該是最好的,其次是jsp,普通的頁面freemarker效能最差,但是在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的效能比使用tag和el的jsp好。


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

 

——————————————————————————————————————————————————————

 

最近要做新項目,想瞭解一下新的技術看看有沒有可以改進的地方。於是學習了一下Struts2(之前一直用Struts1),接觸到了FreeMarker,做了一些實驗之後,對其功能很是疑惑。

 

從我自己測試以及看網上大家的評論可以得出FreeMarker具備以下優點:
1、邏輯分離好,View層不出現邏輯代碼,可維護性好
2、美工和技術的工作分離
3、速度快,省去了Jsp編譯過程
4、可以在IDE中運行,換句話說是可以進行單元測試
5、可以製作Macro

看完大量FreeMarker的資料以及大家對它的評論之後,依舊無法打消我心中的疑惑,針對以上5點我可以講:

1、邏輯分離,無非是FreeMarker模版無法直接運行Java代碼,強制要求所有資料必須預先處理才能將結果傳入View層做最終展現。我個人對這種過於純粹的東西報以懷疑,實際工作中很多時候這種純粹的邏輯分離很難實現。當一個長期維護的項目,不斷增加顯示邏輯之後,為了保持View層的這種強制的乾淨,而在Action層增加大量處理邏輯,我不覺得維護性會好(也許我理解錯了,畢竟沒有長期使用過)。就像前些年流行XML設定檔,分離了邏輯,後來發現太麻煩,又產生了Annotation消滅XML設定檔,無論分離還是彙總,邏輯是無法消滅的,總是要有一個地方放。所以到底是多寫一些代碼來保證View層看上去很美,還是把顯示邏輯全寫到View層,誰又能真正說清楚哪個更好。

我們到今天很多項目還在用最傳統的Jsp,也還在用<%%>,也會有比較多的Java代碼出現在Jsp頁面上的情況,但是頁面上的代碼全都是顯示相關的邏輯,都是最簡單的Java代碼,會Java的就能維護,學習成本基本為0,維護豈不是更好?更符合KISS原則。

2、美工和技術工作分離,我一直覺得這隻是一個神話。到今天為止,我們公司美工和開發的合作方式基本是美工做介面原型圖,把需要的圖片切割出來,把需要的效果製作成CSS交給技術,技術按照需要的效果進行編碼製作HTML靜態原型介面。因為,對於稍微複雜一點的頁面,我相信沒有哪個技術能忍受美工直接用DreamWeaver產生出來的代碼。

3、速度快,算個優點吧,但是沒有那麼重要吧,對於現在的機器一般的Jsp編譯也就一兩秒鐘的事情。多數的時間還是花在編寫和測試上的。

4、可以在IDE中運行,這個也算個小優點,但是介面開發更多時候還是以最終顯示效果來進行測試的,畢竟比較直觀。直接從產生的HTML找需要的資訊和重新整理一下瀏覽器看結果哪個更高效?

5、Macro,這個沒有太多使用經驗,就不做評論了,但是可以確定Jsp一定也能實現。

就以上的這些問題,我無法看到在大範圍Web開發中FreeMarker相對於Jsp的優勢。

 

我認為FreeMarker可以應用在以下情境:

1、AJAX請求的局部內容的產生,例如某個即時重新整理的訊息列。可以稱之為View層組件,乾淨,和主系統功能分離,可重用。

2、Javascript資料產生,甚至Javascript程式的產生。舉例如Javascript中提示資訊要做多語言處理,那麼可以由FreeMarker動態產生,或產生多個靜態Javascript檔案。

 

3、後台動態文檔產生,如群發郵件模板產生個性郵件。

 

任何技術都有他的適用範圍,拋磚引玉,希望FreeMarker有豐富經驗的兄弟多說說自己是如何使用FreeMarker的,以及使用中的一些優點和問題。

 

————————————————————————————————————————————

 

Velocity與Jsp、Freemarker的對比

在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多

效能:velocity應該是最好的,其次是jsp,普通的頁面freemarker效能最差,但是在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的效能比使用tag和el的jsp好。

 

 

——————————————————————————————————————————————————————

 

 

細數FreeMarker的優缺點

一、 FreeMarker簡介
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來產生文本輸出。
所謂模板,就是一份已經寫好了基本內容,有著固定格式的文檔,其中空出或者用預留位置標識的內容,由使用者來填充,不同的使用者給出的資料是不同的。在模板中的預留位置,在模板運行時,由模板引擎來解析模板,並採用動態資料替換預留位置部分的內容。
FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於產生XML,JSP或Java 文等。


二、 FreeMarker的優點和缺點
(一) FreeMarker的優點
1.使用FreeMarker的優點之一,可以徹底的分離表現層和商務邏輯。
使用JSP 開發過程中在頁面中大量的存在商務邏輯的代碼,使得頁面內容淩亂,在後期大量的修改維護過程中就變得非常困難。
FreeMarker根本不支援Java指令碼代碼。
FreeMarker的原理就是:模板+資料模型=輸出 ,模板只負責資料在頁面中的表現,不涉及任何的邏輯代碼,而所有的邏輯都是由資料模型來處理的。使用者最終看到的輸出是模板和資料模型合并後建立的。
      
2.使用FreeMarker的優點之二,可以提高開發效率。
在我們以往的開發中,使用的都是JSP 頁面來展示資料的,即所謂的表現層。我們都知道,JSP在第一次執行的時候需要轉換成Servlet類,開發階段進行功能調適時,需要頻繁的修改JSP,每次修改都要編譯和轉換,那麼試想一天中我們浪費在程式編譯的時間有多少。相對於JSP來說,FreeMarker模板技術不存在編譯和轉換的問題,所以就不會存在上述問題。而且開發過程中,我們在不必在等待介面設計開發人員完成頁面原形後,我們再來開發程式。

3.使用FreeMarker的優點之三,使得開發過程中的人員分工更加明確。
以往用JSP展現資料時,作為程式員的我們,並不熟悉介面設計技術,反之介面開發人員,也並不熟悉程式語言。對兩者而言,交替性的工作本身就有難度。有時候稍有不慎,可能會將某個頁面元素刪除或去掉了某個程式符號,使得頁面走樣或程式錯誤,這樣就需要雙方相互溝通協作,解決出現的問題。有時候因為項目中的時間,任務量等因素的存在,可能這個工作就由一個人來完成,這樣就可能加大某一方開發人員的工作量。
使用FreeMarker後,作為介面開發人員,只專心建立HTML檔案、映像以及Web頁面的其他可視化方面,不用理會資料;而程式開發人員則專註於系統實現,負責為頁面準備要顯示的資料。


(二)FreeMarker的缺點
1.使用FreeMarker的缺點之一,應用FreeMarker模板技術,在修改模板後,可能會看到已經到期的資料。如:產生靜態HTML頁面後,如果一旦模板改變,而沒有及時更新模板產生的HTML頁面的話,使用者看到的就是到期的資料。
2.使用FreeMarker的缺點之二,FreeMarker模板技術在應用過程中,FreeMarker中的變數必須要賦值,如果不賦值,那麼就會拋出異常。想避免錯誤就要應用if/elseif/else 指令進行判段,如果對每一個變數都判斷的話,那麼則反而增加了編程的麻煩。
3.使用FreeMarker的缺點之三,FreeMarker的map限定key必須是string,其他資料類型無法操作
4.使用FreeMarker的缺點之四,FreeMarker不支援叢集應用。為了編成的方便性,把序列化的東西都放到了Session中,如Session,request等,在開發的過程中確實方便,但如果將應用放到叢集中,就會出現錯誤。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.