JavaServer Faces(JSF)簡介
JavaServer Faces是Sun公司推出的一種Web用戶界面框架,隨J2EE的新版本Java EE 5一起發布。JSF的目標是簡化Web開發,為此,Sun在JSF中提出了許多技術措施,其中包括UI組件、事件驅動和Managed Bean等等。本專題將以系列的形式,介紹JSF簡化Web開發技術中具有代表性的幾項技術,試圖使讀者對JSF技術有一個概括的了解,從而理解JSF是如何簡化Web開發的。本文是系列的第一篇,從總體上介紹了JSF的技術特點。
1. JavaServer Faces簡介
JavaServer Faces是Sun公司的一項技術,簡稱JSF。按照Sun公司的定義,JSF是Java Web應用的用戶界面框架,其設計目標是簡化Web應用的開發和維護。JSF對Web應用開發的簡化,可以概括為四個方面:
第一,JSF提供了一組用戶界面組件,這些組件是可重用的,程序員可以利用這些組件方便的構建Web應用的用戶界面;
第二,利用JSF,在用戶界面組件和業務邏輯之間傳遞數據將變得非常簡單;
第三,JSF可以維持用戶組件的狀態,并且可以將狀態從一個請求傳遞到另一個請求;
第四,JSF允許程序員非常容易地開發自定義的用戶界面組件,而且這些自定義用戶界面組件同樣可以重用。
JSF技術的另一個重要特征是,JSF是面向工具的。JSF建立了開放的標準,工具廠商依據這個標準,可以為Web應用開發過程中的各個角色,提供強大的工具支持。例如,可視化的頁面編輯器,可以給頁面設計師提供“所見即所得”的功能,構建一個網頁,只需簡單地從面板中拖放一個個用戶界面組件到網頁上;又比如,JSF的頁面導航也可以利用工具來操作,在A頁面與B頁面之間畫一條連線,指定一個邏輯出口,就定義了從A頁面到B頁面的一個有條件的過渡。
如果你不愿意使用工具,或者某些工具暫時還沒有,你也可以利用JSF來方便的構建Web應用。JSF向程序員開放了框架和編程模型的API,某些高級用戶,例如核心程序員,可以利用這些API編寫代碼,以滿足應用的某些特殊要求。比如說,在JSF中,用戶界面組件和后臺Bean是通過表達式語言來溝通的,JSF定義了表達式語言的標準語法,如果覺得這些語法不能滿足應用要求,那么,程序員可以編寫自己的表達式語言解釋器,然后通過API用自定義的解釋器替換默認的解釋器。
JSF的專家組在開發JSF規范時,對Web應用進行了高度的抽象和歸納,這使得JSF的技術高度要遠遠高于眼下流行的其他Web框架。在規范級別,JSF的核心架構既獨立于具體的傳輸協議,也與具體的標識語言無關。協議和語言的無關性,為JSF技術在其他領域的應用打下了堅實的基礎。
當然,JSF最直接的服務對象,還是基于HTTP協議和HTML客戶端的Java Web應用。Java Web應用運行在支持Servlet或JSP技術的Java應用服務器上,這些應用通常是基于表單的,由若干個頁面組成,用戶通過頁面和表單訪問Web應用所提供的功能。以現存的Java Web技術編寫這樣的應用,不是一件容易的事,程序員面臨著許多難題,例如,如何跨請求管理用戶組件的狀態,如何封裝不同瀏覽器的差異,如何處理表單,如何為客戶端事件編寫服務器端處理例程,如何驗證請求數據的有效性,如何在請求字符串和后臺對象之間轉換數據類型,如何處理異常并給出適當的提示以及如何在頁面之間導航等等。而JSF的目標,就是要解決這些難題。
2. 具有代表性的JSF簡化Web開發技術
站在技術的角度,JSF是相當復雜的一個框架,因此,JSF技術的完整介紹,是一項“大工程”,其內容包括請求處理生命周期、用戶界面組件模型、標準的用戶界面組件、統一的表達式語言、托管bean機制、請求的上下文狀態信息、頁面導航方法、呈現模式、與JSP的集成以及生命周期管理等等。限于篇幅和時間,本文只是擇其要點加以羅列,不能涉及JSF的所有細節,不過,即便是這樣走馬觀花,也足以展示JSF技術在某些方面的領先性了。
要說明一項技術的領先性,最好的辦法莫過于與其競爭對手進行對比。在Java Web編程中,JSF的最大對手無疑是JSP和Struts。前者是初級程序員的不二選擇,而后者則是Java Web事實上的框架標準。不可否認,JSP和Struts都是優秀技術,不過,站在抽象思維的角度去考察這兩種技術,就會發現,JSP和Struts的抽象層次都要低于JSF。
在Web應用的架構中,顯然,Web Server位于抽象級別的最底層,直接處理Http請求和響應;Servlet在Web Server之上,具有會話管理、生命周期管理、基本的錯誤處理等功能;在Servlet之上的,就是JSP了,得益于它的可擴展的模板機制,JSP在抽象層次上比Servlet更上了一層樓;再往上,我們來到了Sturts,作為一個框架標準,Struts提供了非常豐富的服務,例如類型轉換、導航、表單處理以及布局管理等;Struts是Model 2的,但同時也帶著Model 1的某些特征,而抽象層次更高的JSF,則完全是Model 2的了,與Struts相比,JSF包含Struts的所有Model 2特性,更引入了Struts所不具備的用戶界面組件、事件模式以及前臺界面和后臺業務邏輯的集成等。因此,JSF是比Struts抽象度更高的技術。
上面只是從總體上比較了JSF和JSP以及Struts技術,為了使這種比較更具體,同時讓讀者對JSF技術有一個大致的了解,本系列的后續文章中,我們將選擇一些具有代表性的JSF技術點,來展開討論,這些技術點包括:
◆JSF的用戶界面組件模型
◆JSF的managed bean機制
◆JSF的事件驅動模式
◆JSF的導航方法
◆JSF的統一表達式語言
◆JSF的類型轉換器
◆JSF的數據驗證
◆JSF的數據表組件
◆JSF的選擇組件
◆JSF的國際化特征
需要說明的是,這些不是JSF的全部技術點,之所以選擇這些技術點進行介紹,是因為這些技術與JSF“簡化Web開發”的目標有著最直接的聯系。基于JSF的這些技術,在工具的支持下,程序員編寫Web應用,將會是一個令人輕松愉快的工作。
【編輯推薦】