JSF是基于Java的Web開(kāi)發(fā)提供的重要框架
與微軟Visual Studio.NET程序開(kāi)發(fā)有可視化工具的支持相比,人們?cè)陂_(kāi)發(fā)基于Java的Web用戶界面時(shí)仍然需要手工書(shū)寫大量的標(biāo)簽,同時(shí)還要考慮頁(yè)面狀態(tài)信息的保存、客戶端事件處理等問(wèn)題,開(kāi)發(fā)難度比較大,效率較低,重用性差。Java Server Faces(JSF)技術(shù)正是為了解決這一問(wèn)題應(yīng)運(yùn)而生的,其最引人注目的特性之一是它與標(biāo)記語(yǔ)言、協(xié)議、客戶端設(shè)備無(wú)關(guān)。利用JSF提供的可重用、可擴(kuò)展、基于組件的用戶界面框架,在快速開(kāi)發(fā)工具RAD的支持下實(shí)現(xiàn)可視化開(kāi)發(fā)。現(xiàn)在JSF技術(shù)已經(jīng)得到了許多大廠商的支持,如Sun公司的JSF Web UI、IBM公司的JSF extension以及Oracle的ADF Faces等,許多開(kāi)源項(xiàng)目也提供對(duì)JSF技術(shù)的支持。同時(shí)Oracle、Sun、Borland和IBM等公司都為JSF提供了開(kāi)發(fā)環(huán)境。
傳統(tǒng)JSP開(kāi)發(fā)存在的問(wèn)題
實(shí)現(xiàn)表示層和業(yè)務(wù)層的分離,這是J2EE Web應(yīng)用一直以來(lái)的理想,可惜JSP并沒(méi)有真正實(shí)現(xiàn)這個(gè)目標(biāo)。JSP是一個(gè)基于Java的Web用戶界面開(kāi)發(fā)標(biāo)準(zhǔn)技術(shù),是一種“腳本式”開(kāi)發(fā)的Web技術(shù),在JSP頁(yè)面中混淆了大量用于顯示邏輯的HTML和用于業(yè)務(wù)邏輯的Java代碼,使得頁(yè)面設(shè)計(jì)與程序開(kāi)發(fā)無(wú)法分離;JSP另一個(gè)更大的缺陷是腳本不能重用,這常常導(dǎo)致開(kāi)發(fā)者不得不在JSP頁(yè)面之間進(jìn)行復(fù)制-粘貼操作,進(jìn)而導(dǎo)致同一段代碼出現(xiàn)多個(gè)版本,從而使得程序的調(diào)試和設(shè)計(jì)極其錯(cuò)綜復(fù)雜。而標(biāo)簽庫(kù) TagLib作為JSP的補(bǔ)充,將Java代碼從JSP中剝離,也只是有限地實(shí)現(xiàn)了表現(xiàn)與邏輯的分離,始終沒(méi)有擺脫代碼和HTML頁(yè)面揉和的問(wèn)題。此外,JSP還存在著其他固有的缺陷,例如對(duì)應(yīng)Servlet編譯的出錯(cuò)信息很難在JSP中找到準(zhǔn)確的出錯(cuò)位置,由此給調(diào)試帶來(lái)很大困難。
JSF技術(shù)介紹
在Sun公司提出的J2EE平臺(tái)上,Java Server Faces(JSF)是一種用于構(gòu)建Web應(yīng)用程序的新標(biāo)準(zhǔn)Java框架。它提供了一種以組件為中心來(lái)開(kāi)發(fā)JavaWeb用戶界面的方法,從而簡(jiǎn)化了開(kāi)發(fā)。“企業(yè)開(kāi)發(fā)人員”和Web設(shè)計(jì)人員將發(fā)現(xiàn)JSF開(kāi)發(fā)可以簡(jiǎn)單到只需將用戶界面(UI)組件拖放到頁(yè)面上,而“系統(tǒng)開(kāi)發(fā)人員”將發(fā)現(xiàn)豐富而強(qiáng)健的JSF API為他們提供了無(wú)與倫比的功能和編程靈活性。
JSF還通過(guò)將良好構(gòu)建的模型—視圖—控制器(MVC)設(shè)計(jì)模式集成到它的體系結(jié)構(gòu)中,確保了應(yīng)用程序具有更高的可維護(hù)性。
JSF是由Java Community Process(JCP)制定的一個(gè)Web應(yīng)用框架標(biāo)準(zhǔn)。JSF具有良好定義的請(qǐng)求處理生命周期和豐富的組件層次結(jié)構(gòu),旨在推動(dòng)基于Java的Web用戶界面開(kāi)發(fā)的簡(jiǎn)易性。利用JSF提供的可重用、可擴(kuò)展、基于組件的用戶界面框架,在快速開(kāi)發(fā)工具RAD的支持下,可以通過(guò)拖放組件的方式對(duì)Web用戶界面進(jìn)行可視化編輯,將用戶界面上的組件與一個(gè)數(shù)據(jù)源綁定,并將客戶端用戶界面產(chǎn)生的事件交給服務(wù)器端處理,從而大大降低基于Java的Web用戶界面的開(kāi)發(fā)難度,提高開(kāi)發(fā)效率。
簡(jiǎn)而言之,JSF的主要部分是一個(gè)GUI組件框架和一個(gè)用于跨不同標(biāo)記語(yǔ)言或客戶端設(shè)備描述組件的靈活模型。JSF GUI組件框架使開(kāi)發(fā)人員能夠創(chuàng)建JSF應(yīng)用程序的用戶界面。
JSF GUI組件包括標(biāo)準(zhǔn)的HTML表單控件(如按鈕)、布局組件,以及更復(fù)雜的組件,如數(shù)據(jù)表。此外,第三方還可以擴(kuò)展規(guī)范中定義的基本類,來(lái)開(kāi)發(fā)額外的GUI組件。
JSF組件的體系結(jié)構(gòu)是這樣設(shè)計(jì)的:組件的功能由組件類定義,組件的呈現(xiàn)由一個(gè)單獨(dú)的呈現(xiàn)器定義。呈現(xiàn)器定義了組件類如何映射為適合特定客戶的組件標(biāo)簽。
JSF的主要優(yōu)勢(shì)之一就是它既是Java Web用戶界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型-視圖-控制器(MVC)設(shè)計(jì)模式的框架。用戶界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應(yīng)用程序更易于管理。為了準(zhǔn)備提供頁(yè)面對(duì)應(yīng)用程序數(shù)據(jù)訪問(wèn)的JSF上下文和防止對(duì)頁(yè)面未授權(quán)或不正確的訪問(wèn),所有與應(yīng)用程序的用戶交互均由一個(gè)前端控制器來(lái)處理。JSF技術(shù)做到了應(yīng)用程序邏輯和表示的完全分離,是真正徹底的MVC模式。
JSF技術(shù)現(xiàn)在的版本是1.1,下一個(gè)版本將是1.2,它將和J2EE 5.0一起發(fā)布。
開(kāi)發(fā)基于JSF的Web應(yīng)用程序步驟
JSF是構(gòu)建Web應(yīng)用程序的新標(biāo)準(zhǔn)Java框架,可以依據(jù)JSF的框架標(biāo)準(zhǔn)手工書(shū)寫Web 應(yīng)用程序,以文本方式像寫HTML或JSP程序一樣實(shí)現(xiàn)Web用戶界面的設(shè)計(jì);同時(shí)在開(kāi)發(fā)、運(yùn)行以及調(diào)試前還需要搭建系統(tǒng)運(yùn)行平臺(tái)。這樣做的缺點(diǎn)是不能充分體現(xiàn)可視化開(kāi)發(fā)的便捷和高效,一般是在分析Web應(yīng)用程序的結(jié)構(gòu)時(shí)使用。
使用快速開(kāi)發(fā)工具RAD,是實(shí)現(xiàn)JSF可視化開(kāi)發(fā)的先決條件。在快速開(kāi)發(fā)工具的支持下,符合 JSF標(biāo)準(zhǔn)的Web應(yīng)用程序開(kāi)發(fā)、運(yùn)行以及調(diào)試均在IDE環(huán)境中實(shí)現(xiàn),大大提高了開(kāi)發(fā)的效率,整個(gè)程序開(kāi)發(fā)過(guò)程快捷高效。現(xiàn)在獲得大廠支持的RAD工具很多,比如IBM公司的WebSphere Studio,Oracle公司的JDeveloper,和Sun公司的Java Studio Creator等都提供對(duì)JSF開(kāi)發(fā)的支持。
如果不使用IDE開(kāi)發(fā)環(huán)境,那么在開(kāi)發(fā)應(yīng)用程序前,必須先搭建系統(tǒng)運(yùn)行平臺(tái)。比如安裝 TOMCAT和Sun的JavaWeb Services Developer Pack (JWSDP) 1.2。使用JSF時(shí)需要JSTL與JSF的標(biāo)簽函數(shù)庫(kù),在Web應(yīng)用程序的WEB-INF/lib目錄下放入所需的JAR文件。如果使用IDE開(kāi)發(fā)環(huán)境,開(kāi)發(fā)前期的準(zhǔn)備工作比較簡(jiǎn)單,只需安裝好IDE環(huán)境即可,不需要其他的配置,一般IDE中都有內(nèi)嵌的應(yīng)用服務(wù)器,足以支持程序的開(kāi)發(fā)、運(yùn)行和調(diào)試。不管是否使用IDE開(kāi)發(fā)環(huán)境,JSF開(kāi)發(fā)Web應(yīng)用程序通常分為以下三個(gè)步驟:
視圖設(shè)計(jì)
方便、快捷地開(kāi)發(fā)基于JSF的Web應(yīng)用程序,是在JSF提供了一組豐富的、可重用的服務(wù)器端用戶界面組件的條件下實(shí)現(xiàn)的。在開(kāi)發(fā)工具的支持下,用戶可以很容易地在可視化環(huán)境中利用這些組件構(gòu)建Web用戶界面,處理組件的數(shù)據(jù)校驗(yàn)、事件處理等用戶界面管理問(wèn)題。
設(shè)計(jì)每個(gè)需要的JSP頁(yè)面,在頁(yè)面中放置JSF的內(nèi)置組件,并將組件與應(yīng)用層的 JavaBean綁定。利用RAD工具能通過(guò)拖放組件的方式輕松實(shí)現(xiàn)頁(yè)面文件,不需要手寫大量代碼。開(kāi)發(fā)工具自動(dòng)生成頁(yè)面對(duì)應(yīng)的Java文件,在文件中定義好了頁(yè)面的JSF組件及其getter、setter方法以及JSF組件的“action”屬性對(duì)應(yīng)的方法等。程序員可以方便地在已有程序的基礎(chǔ)上修改、調(diào)試。
模型設(shè)計(jì)
JSF技術(shù)做到了應(yīng)用程序邏輯和表示的完全分離。在模型設(shè)計(jì)部分,程序員只需要考慮程序的邏輯功能,不需要考慮數(shù)據(jù)的表現(xiàn)形式。JSF的模型是通過(guò)JavaBean程序來(lái)實(shí)現(xiàn)的。
控制器設(shè)計(jì)
JSF的控制器設(shè)計(jì)是在配置文件中完成的,相關(guān)的主要有兩個(gè)文件:web.xml文件和 faces-config.xml文件(均在WEB-INF目錄下)。web.xml文件主要用于控制JSF的生命周期,實(shí)現(xiàn)部署描述符。faces- config.xml文件實(shí)現(xiàn)導(dǎo)航,在文件中控制頁(yè)面之間的跳轉(zhuǎn)流程。
配置步驟是首先配置Web應(yīng)用程序的web.xml文件,然后是配置JSF的控制文件faces-config.xml文件。這兩個(gè)文件格式固定,在IDE環(huán)境中這個(gè)過(guò)程由工具自動(dòng)完成,不需要設(shè)計(jì)人員的干預(yù),即使手工配置也比較簡(jiǎn)單。
JSF的技術(shù)重點(diǎn)在View部分,它實(shí)現(xiàn)了Web應(yīng)用程序設(shè)計(jì)角色的完全分離。JSF網(wǎng)頁(yè)設(shè)計(jì)者只需要專注于頁(yè)面的設(shè)計(jì);應(yīng)用程序開(kāi)發(fā)者主要關(guān)心Model部分的JavaBean的開(kāi)發(fā);程序的流程控制則由faces-config.xml專門配置。
JSF是基于Java的Web應(yīng)用開(kāi)發(fā)領(lǐng)域里提供了一個(gè)可重用、可擴(kuò)展、基于組件、工具友好的服務(wù)器端UI框架。在支持JSF的RAD開(kāi)發(fā)工具中,人們可以像使用VisualStudio.NET一樣方便快捷地構(gòu)建Web用戶界面,大大降低了利用Java技術(shù)實(shí)現(xiàn)Web用戶界面的難度,提高了開(kāi)發(fā)效率。
JSF具有強(qiáng)大的組件體系和事件處理系統(tǒng),完全實(shí)現(xiàn)了MVC模式的應(yīng)用架構(gòu),使得基于Java的Web用戶界面程序開(kāi)發(fā)難度大大降低,提高了開(kāi)發(fā)效率,非常適用于Web頁(yè)面的開(kāi)發(fā)。
JSF是一個(gè)開(kāi)放的標(biāo)準(zhǔn),具有很好的可擴(kuò)展性。依照J(rèn)SF的規(guī)范,用戶完全可以根據(jù)需求定制自己的用戶界面組件、事件處理器、數(shù)據(jù)校驗(yàn)和轉(zhuǎn)換組件等,這些組件和標(biāo)準(zhǔn)的JSF組件一樣是可重用的。JSF API是直接架構(gòu)在Servlet API之上的,因此JSF用戶界面組件的呈現(xiàn)并不局限于特定的腳本技術(shù)或標(biāo)記語(yǔ)言。表示層完全可以采用JSP之外的技術(shù)。在眾多的J2EE表現(xiàn)層框架技術(shù)中,JSF表現(xiàn)出其旺盛的生命力。盡管JSF技術(shù)還有不少問(wèn)題,但隨著JSF技術(shù)的不斷成熟和版本更新,其必將獲得越來(lái)越多的應(yīng)用。
【編輯推薦】