摘要:介紹JSF是一種新的開發(fā)WEB應用程序的框架,探討了JSF框架的基本工作機制及具體應用。
關鍵詞:Java Server Faces (JSF);框架;組件;事件監(jiān)聽
中圖分類號:TP393文獻標識碼:A 文章編號:1009-3044(2008)06-10000-00
Research of WEB Application Based on JSF Technology
HU Nan
(Department ofLoudi Occupation Technical College,Loudi 417000,China)
Abstract:This paper introduces JSF is a new develop framework for WEB application.in the meantime,the basic work mechanism and particular application of JSF framework are also discussed.
Key word: Java Server Faces (JSF);framework;component;Action Listener
1 引言
隨著網(wǎng)絡的高速發(fā)展和分布式數(shù)據(jù)庫處理技術的廣泛應用,計算機軟件項目的規(guī)模也越來越大,競爭日趨激烈。許多軟件開發(fā)組織已經(jīng)開始大量的使用B/S模式來開發(fā)Web應用程序,但同時B/S模式的Web應用程序卻失去了傳統(tǒng)C/S模式程序的高速處理和易管理的圖形用戶界面。微軟Visual Studio.net程序開發(fā)技術雖然彌補了這些不足,但在跨平臺和企業(yè)級應用開發(fā)領域上并沒有優(yōu)勢。Java Server Faces (JSF) 技術正是為了解決這些問題應運而生的,雖然JSF和早期出現(xiàn)的Struts同屬于Web應用框架,但它們是兩種分屬于不同性質(zhì)的框架,Struts只是單純的MVC模式框架,而JSF是一種事件驅(qū)動型的組件模型。使用JSF,開發(fā)Web應用程序?qū)⑴c開發(fā)Swing程序類似,可以拖放控件,寫事件監(jiān)聽器。現(xiàn)在JSF技術已經(jīng)得到了許多大廠商的支持,如SUN公司的JSF Web UI、IBM公司的JSF extension以及Oracle的 ADF Faces等,同時IBM、Sun、Borland和Oracle等公司都為JSF提供了開發(fā)環(huán)境。本文將詳細介紹JSF技術和JSF技術的應用。
2 JSF體系結構
JSF既是Web應用程序的用戶界面標準,也是遵循MVC體系結構的框架。圖1顯示了JSF的體系結構。如圖所示,用戶界面代碼(視圖)與應用程序數(shù)據(jù)(模型)是分開的,而所有的交互都由FacesServlet(控制器)處理。

圖1 JSF體系結構
當JSF頁面中發(fā)生一個事件時,該事件通知通過HTTP發(fā)往服務器,服務器端通過名稱為FacesServlet的特殊Servlet來處理該通知。Web容器里的每一個JSF應用都有自己的FacesServlet。FacesServlet一接收到用戶的請求便實例化一個FacesContext對象,它包含了處理請求所必須的信息,在處理過程中主要修改這個FacesContext對象。然后就是處理,處理器是一個叫作Lifecycle的對象。FacesServlet把控制權轉(zhuǎn)交給Lifecycle對象。該對象分6個階段來處理FacesContext對象以生成響應,最后將響應發(fā)回客戶端。圖2所示為JSF的工作方式。

圖2JSF的工作方式
Lifecycle對象處理JSP請求的過程包括:
1)恢復視圖。在該階段中重建組件樹。
2)應用請求值。在這個階段,使用請求里的當前值來更新每個組件的本地值。
3)處理驗證。當每個組件的本地值被更新后,Lifecycle對象都會驗證這些值的合法性。
4)更新模型值。負責更新服務器端的實際值。
5)調(diào)用應用程序。在本階段中,JSF控制器調(diào)用應用程序來處理應用程序級事件。
6)呈現(xiàn)響應。此階段將在視圖中顯示當前狀態(tài)的所有組件。在程序內(nèi)部,JSF會調(diào)用encode( )方法,并顯示保存在FacesContext對象中的組件樹。
圖3所示為JSF請求處理過程中的各個階段。

圖3 JSF請求處理過程中的各個階段
3 JSF技術的應用
JSF是一種用于構建Web應用程序的新標準Java框架。它提供了一種以組件為中心來開發(fā)Java Web用戶界面的方法,從而簡化了開發(fā)。“企業(yè)開發(fā)人員”和Web設計人員將發(fā)現(xiàn)JSF開發(fā)可以簡單到只需將用戶界面 (UI) 組件拖放到頁面上,而“系統(tǒng)開發(fā)人員”將發(fā)現(xiàn)豐富的JSF API為他們提供了強大的功能和編程靈活性。JSF還通過將良好構建的模型-視圖-控制器 (MVC)設計模式集成到它的體系結構中,確保了應用程序具有更高的可維護性。JSF具有良好定義的請求處理過程和豐富的組件層次結構,利用JSF提供的可重用、可擴展、基于組件的用戶界面框架,在快速開發(fā)工具RAD的支持下,可以通過拖放組件的方式對Web用戶界面進行可視化編輯,將用戶界面上的組件與一個數(shù)據(jù)源綁定,并將客戶端用戶界面產(chǎn)生的事件交給服務器端處理,從而大大降低基于Java的Web用戶界面的開發(fā)難度,提高開發(fā)效率。
JSF技術包括兩個主要部分:
1) 一組用于表示用戶界面組件并管理其狀態(tài)、處理事件和驗證輸入的JavaAPI,這些API支持國際化和可訪問性(Accessibility);
2) 一個用于在JSP頁面中表示JSF 組件的自定義標簽庫。
概括的說,JSF的主要部分是一個GUI組件框架和一個用于跨不同標記語言或客戶端設備描述組件的靈活模型。JSF GUI組件框架使開發(fā)人員能夠創(chuàng)建JSF應用程序的用戶界面。JSF GUI組件包括標準的HTML表單控件(如按鈕)、布局組件,以及更復雜的組件,如數(shù)據(jù)表。此外,用戶還可以擴展規(guī)范中定義的基本類,來開發(fā)額外的GUI組件。
以下是建立一個JSF應用通常所需要的幾個步驟:
1)開發(fā)模型對象
JSF技術做到了應用程序的業(yè)務邏輯和表示的完全分離。JSF使用后臺Bean來實現(xiàn)這種分離。在模型設計部分,程序員只需要考慮程序的邏輯功能,不需要考慮數(shù)據(jù)的表現(xiàn)形式。
JSF的模型(JavaBean)是根據(jù)頁面中組件需要處理的業(yè)務邏輯而設計實現(xiàn)的,用來保存用戶的輸入和組件的數(shù)據(jù)。在JSF中使用JavaBean可以直接在JSF頁面中聲明或者在配置文件faces-config. XML中聲明。
頁面設計人員使用標簽的value屬性將一個組件值綁定到一個后臺Bean的屬性,代碼如下:
<h:inputText id=〝email〞 value=〝#{Userbean.email}〞/>
此代碼將名為email的文本框與Userbean后臺Bean的email屬性綁定在一起。
組件開發(fā)人員需要在faces-config.xml文件中配置受管理的后臺Bean。代碼如下:
<managed-bean>
<managed-bean-name>Userbean</managed-bean-name>
<managed-bean-class>messages.User</ managed-bean-class >
<managed-bean-scope>session</ managed-bean-scope>
</managed-bean>
此代碼為后臺Bean類User指定一個名稱即UserBean,此外將scope屬性設為session。
2)開發(fā)基于JSF的用戶界面。
開發(fā)基于JSF的Web應用程序,是在JSF提供了一組豐富的、可重用的服務器端用戶界面JavaAPI組件的條件下實現(xiàn)的。用戶可以很容易地在可視化環(huán)境中利用這些組件構建Web用戶界面,處理組件的數(shù)據(jù)校驗、事件處理等用戶界面管理問題。
JSP頁面是JSF應用的用戶接口,每個頁面包括一些用來描述web控件的JSF組件,設計每個需要的JSP頁面時,在頁面中放置JSF的內(nèi)置組件,并將組件映射到各個JavaBean。頁面設計人員利用RAD工具能通過拖放組件的方式輕松實現(xiàn)頁面文件,不需要手寫大量代碼。開發(fā)工具自動生成頁面對應的java文件,在文件中定義好了頁面的JSF組件及其getter、setter方法以及JSF組件的“action”屬性對應的方法等。程序員可以方便地在已有程序的基礎上修改、調(diào)試。
下面代碼片段顯示了接收用戶名和密碼以及“登錄”按鈕的JSF代碼。
<h:outputLabel value=〝電子郵件〞for=〝email〞/>
<h:inutText id=〝email〞value=〝#{Userbean.email}〞/>
<h:outputLabel value=〝密碼〞for=〝password〞/>
<h:inutText id=〝password〞value=〝#{Userbean.password}〞/>
<h:commandButton id=〝login〞action=〝#{Userbean.verifyUser}〞 value=〝?shù)卿洦?>
3)編寫事件監(jiān)聽器或者導航規(guī)則
編寫事件監(jiān)聽器來決定特定事件發(fā)生時應該有的反應,導航規(guī)則涉及到定義應用程序中各種頁面的跳轉(zhuǎn),兩者就構成了JSF的控制器的設計。主要操作在兩個配置文件中:web.xml文件和faces-config.xml文件(均在WEB-INF目錄下)。web.xml文件主要用于控制JSF的生命周期,實現(xiàn)部署描述符。faces-config.xml文件實現(xiàn)導航,在文件中控制頁面之間的跳轉(zhuǎn)流程。
例如,如果輸入的用戶名和密碼正確,則轉(zhuǎn)向登錄成功頁面,否則轉(zhuǎn)向登錄失敗,要求重新登錄的頁面,這些操作是通過在faces-config.xml文件定義導航來實現(xiàn),代碼如下:
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/groups.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
4 結束語
JSF是基于Java 的Web 應用開發(fā)領域里提供的一個可重用、可擴展、基于組件、工具友好的、開放的服務器端UI 框架。它的出現(xiàn),很大程度上提高了中小型Web應用系統(tǒng)開發(fā)的速度。它具有強大的組件體系和事件處理系統(tǒng),完全實現(xiàn)了MVC模式的應用架構,使得基于Java技術的Web應用開發(fā)難度大大降低,提高了開發(fā)效率,非常適用于Web系統(tǒng)的開發(fā)。盡管在Web應用開發(fā)中,JSF表現(xiàn)出其旺盛的生命力,但JSF技術還不是很成熟,還有很多不足,例如組件命名怪異;數(shù)據(jù)驗證上擴展性不高;大部分代碼都是Servlet,都要在web.xml中配置,使得運行效率降低,服務器端負載加大。但隨著JSF技術的不斷成熟和版本更新,其必將獲得更加廣泛的應用。
參考文獻:
[1]Kito D Mann. Java Server Faces int Action[M]. Manning Publications.2004.
[2]王俊標.精通Java Web開發(fā):基于Struts EJB Hibernate JBuilder[M]. 北京:人民郵電出版社,2007.
[3]北京阿博泰克北大青鳥信息技術有限公司. J2EE框架技術—StrutsJSF. 北京:科學技術文獻出版社,2006.
收稿日期:2008-01-12
作者簡介:胡楠(1978-),男,湖南雙峰人,湖南大學在讀碩,婁底職業(yè)技術學院教師。