1. 程式人生 > >freemarker 和JSP 的區別

freemarker 和JSP 的區別

覺得寫得不錯 很容易理解就分享一下

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等,在開發的過程中確實方便,但如果將應用放到叢集中,就會出現錯誤。