JSF技術介紹

weixin_33711641發表於2007-07-09

與微軟Visual Studio.NET程式開發有視覺化工具的支援相比,人們在開發基於Java的Web使用者介面時仍然需要手工書寫大量的標籤,同時還要考慮頁面狀態資訊的儲存、客戶端事件處理等問題,開發難度比較大,效率較低,重用性差。

Java Server Faces (JSF) 技術正是為了解決這一問題應運而生的,其最引人注目的特性之一是它與標記語言、協議、客戶端裝置無關。利用JSF提供的可重用、可擴充套件、基於元件的使用者介面框架,在快速開發工具RAD的支援下實現視覺化開發。現在JSF技術已經得到了許多大廠商的支援,如SUN公司的JSF Web UI、IBM公司的JSF extension以及Oracle的 ADF Faces等,許多開源專案(典型的Apache Myfaces)也提供對JSF技術的支援。同時Oracle、Sun、Borland和IBM等公司都為JSF提供了開發環境。

傳統JSP開發存在的問題

實現表示層和業務層的分離,這是J2EE Web應用一直以來的理想,可惜JSP 並沒有真正實現這個目標。JSP是一個基於Java的Web使用者介面開發標準技術,是一種“指令碼式”開發的Web技術,在JSP 頁面中混淆了大量用於顯示邏輯的HTML 和用於業務邏輯的Java 程式碼,使得頁面設計與程式開發無法分離;JSP另一個更大的缺陷是指令碼不能重用,這常常導致開發者不得不在JSP頁面之間進行復制-貼上操作,進而導致同一段程式碼出現多個版本,從而使得程式的除錯和設計極其錯綜複雜。而標籤庫TagLib作為JSP的補充,將Java程式碼從JSP中剝離,也只是有限地實現了表現與邏輯的分離,始終沒有擺脫程式碼和HTML頁面揉和的問題。此外,JSP還存在著其他固有的缺陷,例如對應Servlet編譯的出錯資訊很難在JSP 中找到準確的出錯位置,由此給除錯帶來很大困難。

JSF技術介紹

在Sun公司提出的J2EE(Java 2 Enterprise Edition)平臺上,Java Server Faces (JSF) 是一種用於構建Web應用程式的新標準Java框架。它提供了一種以元件為中心來開發Java Web使用者介面的方法,從而簡化了開發。“企業開發人員”和Web設計人員將發現JSF開發可以簡單到只需將使用者介面 (UI) 元件拖放到頁面上,而“系統開發人員”將發現豐富而強健的JSF API為他們提供了無與倫比的功能和程式設計靈活性。JSF還通過將良好構建的模型-檢視-控制器 (MVC)設計模式整合到它的體系結構中,確保了應用程式具有更高的可維護性。

JSF是由Java Community Process (JCP)制定的一個Web應用框架標準。JSF具有良好定義的請求處理生命週期和豐富的元件層次結構,旨在推動基於Java的Web使用者介面開發的簡易性。利用JSF提供的可重用、可擴充套件、基於元件的使用者介面框架,在快速開發工具RAD的支援下,可以通過拖放元件的方式對Web使用者介面進行視覺化編輯,將使用者介面上的元件與一個資料來源繫結,並將客戶端使用者介面產生的事件交給伺服器端處理,從而大大降低基於Java的Web使用者介面的開發難度,提高開發效率。

Java Server Faces技術包括兩個主要部分:

(1) 一組用於表示使用者介面元件並管理其狀態、處理事件和驗證輸入的JavaAPI,這些API支援國際化和可訪問性(accessibility);

(2) 一個用於在JSP頁面中表示JSF 元件的自定義標籤庫。

簡而言之,JSF的主要部分是一個GUI元件框架和一個用於跨不同標記語言或客戶端裝置描述元件的靈活模型。JSF GUI元件框架使開發人員能夠建立JSF應用程式的使用者介面。JSF GUI元件包括標準的HTML表單控制元件(如按鈕)、佈局元件,以及更復雜的元件,如資料表。此外,第三方還可以擴充套件規範中定義的基本類,來開發額外的GUI元件。

JSF 元件的體系結構是這樣設計的:元件的功能由元件類定義,元件的呈現由一個單獨的呈現器(renderer)定義。呈現器定義了元件類如何對映為適合特定客戶的元件標籤。JSF 參考實現中包含了一個標準的RenderKit,用於生成基於HTML 4.01的標記,實現將元件類呈現給HTML客戶。

JSF 的主要優勢之一就是它既是Java Web使用者介面標準又是嚴格遵循模型-檢視-控制器 (MVC) 設計模式的框架。使用者介面程式碼(檢視)與應用程式資料和邏輯(模型)的清晰分離使JSF應用程式更易於管理。為了準備提供頁面對應用程式資料訪問的JSF上下文和防止對頁面未授權或不正確的訪問,所有與應用程式的使用者互動均由一個前端“Faces”servlet(控制器)來處理。 JSF技術做到了應用程式邏輯和表示的完全分離,是真正徹底的MVC模式。

JSF技術現在的版本是1.1,下一個版本將是 1.2,它將和 J2EE 5.0 一起釋出。

JSF是構建Web應用程式的新標準Java框架,可以依據JSF的框架標準手工書寫Web應用程式,以文字方式像寫HTML或JSP程式一樣實現Web使用者介面的設計;同時在開發、執行以及除錯前還需要搭建系統執行平臺。

這樣做的缺點是不能充分體現視覺化開發的便捷和高效,一般是在分析Web應用程式的結構時使用。

使用快速開發工具RAD,是實現JSF視覺化開發的先決條件。在快速開發工具的支援下,符合JSF標準的Web應用程式開發、執行以及除錯均在IDE環境中實現,大大提高了開發的效率,整個程式開發過程快捷高效。現在獲得大廠支援的RAD工具很多,比如IBM公司的WebSphere Studio,Oracle公司的JDeveloper,和Sun公司的Java Studio Creator等都提供對JSF開發的支援。

如果不使用IDE開發環境,那麼在開發應用程式前,必須先搭建系統執行平臺。比如安裝TOMCAT和Sun的Java Web Services Developer Pack (JWSDP) 1. 2。使用JSF時需要JSTL 與JSF的標籤函式庫,在Web應用程式的WEB-INF\lib目錄下放入所需的JAR檔案。如果使用IDE開發環境,開發前期的準備工作比較簡單,只需安裝好IDE環境即可,不需要其他的配置,一般IDE中都有內嵌的應用伺服器,足以支援程式的開發、執行和除錯。

不管是否使用IDE開發環境,JSF開發Web應用程式通常分為以下三個步驟:

(1)檢視設計

方便、快捷地開發基於JSF的Web應用程式,是在JSF提供了一組豐富的、可重用的伺服器端使用者介面元件的條件下實現的。在開發工具的支援下,使用者可以很容易地在視覺化環境中利用這些元件構建Web使用者介面,處理元件的資料校驗、事件處理等使用者介面管理問題。

設計每個需要的JSP頁面,在頁面中放置JSF的內建元件,並將元件與應用層的JavaBean繫結。利用RAD工具能通過拖放元件的方式輕鬆實現頁面檔案,不需要手寫大量程式碼。開發工具自動生成頁面對應的java檔案,在檔案中定義好了頁面的JSF元件及其getter、setter方法以及JSF元件的“action”屬性對應的方法等。程式設計師可以方便地在已有程式的基礎上修改、除錯。

(2)模型設計

JSF技術做到了應用程式邏輯和表示的完全分離。在模型設計部分,程式設計師只需要考慮程式的邏輯功能,不需要考慮資料的表現形式。JSF的模型是通過JavaBean程式來實現的。

JSF的模型是根據頁面中元件需要處理的業務邏輯而設計實現的。在JSF中使用JavaBean可以直接在JSF頁面中宣告或者在配置檔案faces-config. xml中宣告。

如果手工部署應用,則編譯完成的JavaBean檔案應放到Web應用程式的WEB-INF\classes目錄下(TOMCAT環境下);如果藉助於RAD開發工具,設計人員就不需要考慮部署的細節,開發工具會自動把實現了業務邏輯的JavaBean檔案(未編譯的java檔案和編譯成功後的jar包)成功地部署在相關位置。

(3)控制器設計

JSF的控制器設計是在配置檔案中完成的,相關的主要有兩個檔案:web.xml檔案和faces-config.xml檔案(均在WEB-INF目錄下)。web.xml檔案主要用於控制JSF的生命週期,實現部署描述符。faces-config.xml檔案實現導航,在檔案中控制頁面之間的跳轉流程。

配置步驟是首先配置Web應用程式的web.xml檔案,然後是配置JSF的控制檔案faces-config.xml檔案。這兩個檔案格式固定,在IDE環境中這個過程由工具自動完成,不需要設計人員的干預,即使手工配置也比較簡單。

JSF的技術重點在View部分,它實現了Web應用程式設計角色的完全分離。JSF網頁設計者只需要專注於頁面的設計;應用程式開發者主要關心Model部分的JavaBean的開發;程式的流程控制則由faces-config.xml專門配置。

總結

JSF是基於Java 的Web 應用開發領域裡提供了一個可重用、可擴充套件、基於元件、工具友好的伺服器端UI 框架。在支援JSF 的RAD開發工具中,人們可以像使用Visual Studio. NET一樣方便快捷地構建Web 使用者介面,大大降低了利用Java技術實現Web 使用者介面的難度,提高了開發效率。

JSF具有強大的元件體系和事件處理系統,完全實現了MVC模式的應用架構,使得基於Java的Web使用者介面程式開發難度大大降低,提高了開發效率,非常適用於Web頁面的開發。

JSF是一個開放的標準,具有很好的可擴充套件性。依照JSF 的規範,使用者完全可以根據需求定製自己的使用者介面元件、事件處理器、資料校驗和轉換元件等,這些元件和標準的JSF 元件一樣是可重用的。JSF API 是直接架構在Servlet API 之上的,因此JSF 使用者介面元件的呈現並不侷限於特定的指令碼技術或標記語言。表示層完全可以採用JSP 之外的技術。

在眾多的J2EE表現層框架技術中,JSF表現出其旺盛的生命力。儘管JSF技術還有不少問題,但隨著JSF技術的不斷成熟和版本更新,其必將獲得越來越多的應用。

相關文章