本文介紹JSF的組件是如何簡化JSF的Web開發的,並闡述了這一技術的優點。使用者介面組件模型是JSF首創的Web架構技術,是JSF區別於其他Web架構的重要特徵,同時這些技術也是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應用開發過程中的各個角色,提供強大的工具支援。例如,可視化的頁面編輯器,可以給頁面設計師提供“所見即所得 (WYSIWYG)”的功能,構建一個網頁,只需簡單地從面板中拖放一個個使用者介面組件到網頁上;又比如,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應用,將會是一個令人輕鬆愉快的工作。
來源:http://tech.it168.com/j/n/2007-03-22/200703220944818.shtml