Java Web編程始於Servlet,經歷了JSP和Struts後,正朝著JSF前進。JSF憑借多項革命性的創新技術,正引領我們進入基於組件模型和事件驅動機制的、真正面向對象的Java Web編程新紀元。
按照官方的定義,JSF框架是Java Web表示層框架。通俗地說:
1.JSF是繼Servlet、JSP和Struts之後又一項Java Web應用編程技術;
2.JSF是編寫網頁的一種新方法。完整的Java Web應用包括網頁、業務邏輯和數據庫,其中後兩者都有成熟的解決方案,例如EJB和JPA,唯獨網頁的編寫還停留在很原始的階段,需要處理諸多底層細節。JSF的出現正是為了解決網頁編寫的問題。可以說,JSF和EJB、JPA一起,構築了Java Web應用完美的三層體系結構。
最大的優勢,就一句話,極大地簡化了網頁的編寫。在JSF之前,我們編寫網頁都是和tag、Http請求、http響應等打交道,而JSF允許我們將網頁視為在Java桌面應用中司空見慣的窗口,用類似編寫桌面應用的方式編寫Java Web應用。在JSF裡,沒有tag、沒有http請求,也沒有http響應,取而代之的是UI組件、事件和事件處理例程這些普通Java程序員耳熟能詳的概念。
當然,我這樣表述JSF框架,並不是說JSF不需要tag和http請求響應,在JSF框架內部,真正支撐JSF運作的還是tag和http請求響應,只不過JSF屏蔽了細節,讓程序員集中精力於業務邏輯代碼
與ASP.Net相比,JSF的優勢我認為有這麼兩點:
1)有些優勢是JSF天生的,例如平台無關性,這是從Java語言中繼承的優勢。平台無關性的好處大家都很清楚,我就不廢話了;
2)JSF是規范,而不是具體產品,這是Sun的聰明之處,也是Sun的厚道之處。事實上,Java的很多技術都是以規范的形式出現的,這與 Microsoft以具體產品的形式推出新技術截然不同。規范的好處是允許不同廠商在具體產品上展開競爭,使用戶受益。例如JSF,現在Sun自己的參考實現很少人用了,倒是一些開源的JSF實現如apache的MyFaces等大行其道。Sun這樣做既鼓勵了競爭,又能騰出更多功夫致力於規范的改進,可謂一舉兩得。
3)從技術的角度看,JSF不但與平台無關,甚至與用來描述頁面的標記語言無關。換句話說,在PC上,我們現在通常以HTML為標記語言,實際上,在其他類型的終端上,如果描述頁面的標記語言不是Html,JSF仍然可以勝任。當然,這個優勢,對於普通程序員好像意義不大,但如果眼光放長遠一些,這種標記語言的無關性,是JSF技術前瞻性的具體表現,它使得JSF的生命力更長久。
3.Java EE 5最重要的使命是簡化Java開發,為此,Sun連續使出了三大絕招,一是推出JSF,二是推出EJB3,三是推出JPA。明眼人一看就知道,這三大技術分別涵蓋了三層體系結構中的表示層、業務層和數據層,雖說不能一統天下,但在規范層面建立一個完整體系的目的非常明確。規范是技術的制高點,只要Sun不倒,JSF就有足夠硬的後台支持它的發展。