Web應(yīng)用程式的開發(fā)與傳統(tǒng)的單機(jī)程式開發(fā)在本質(zhì)上存在著太多的差異,Web應(yīng)用程式開發(fā)人員至今不可避免的必須處理HTTP的細(xì)節(jié),而HTTP無狀態(tài)的(stateless)本質(zhì),與傳統(tǒng)應(yīng)用程式必須維持程式運(yùn)行過程中的資訊有明顯的違背,再則Web應(yīng)用程式面對(duì)網(wǎng)站上不同的使用者同時(shí)的存取,其執(zhí)行緒安全問題以及資料驗(yàn)證、轉(zhuǎn)換處理等問題,又是複雜且難以解決的。
另一方面,本質(zhì)上是靜態(tài)的HTML與本質(zhì)上是動(dòng)態(tài)的應(yīng)用程式又是一項(xiàng)違背,這造成不可避免的,處理網(wǎng)頁設(shè)計(jì)的美術(shù)人員與程式設(shè)計(jì)人員,必須被彼此加入至視圖元件中的邏輯互相干擾,即便一些視圖呈現(xiàn)邏輯以標(biāo)籤的方式呈現(xiàn),試圖s展現(xiàn)對(duì)網(wǎng)頁設(shè)計(jì)美術(shù)人員的親切,但它終究必須牽涉到相關(guān)的流程邏輯。
有很多方案試著解決種種的困境,而各自的著眼點(diǎn)各不相同,有的從程式設(shè)計(jì)人員的角度來解決,有的從網(wǎng)頁設(shè)計(jì)人員的角度來解決,各種的框架被提出,所造成的是各種不統(tǒng)一的標(biāo)籤與框架,為了促進(jìn)產(chǎn)能的整合開發(fā)環(huán)境(IDE)難以整合這些標(biāo)籤與框架,另一方面,開發(fā)人員的學(xué)習(xí)負(fù)擔(dān)也不斷的加重,他們必須一人瞭解多個(gè)角色的工作。
JavaServer Faces [
http://java.sun.com/j2ee/javaserverfaces/] 的提出在試圖解決這個(gè)問題,它試圖在不同的角度上提供網(wǎng)頁設(shè)計(jì)人員、應(yīng)用程式設(shè)計(jì)人員、元件開發(fā)人員解決方案,讓不同技術(shù)的人員可以彼此合作又不互相干擾,它綜合了各家廠商現(xiàn)有的技術(shù)特點(diǎn),由Java Community Process(JCP)團(tuán)隊(duì)研擬出來的一套標(biāo)準(zhǔn),並在2004年三月發(fā)表了JavaServer Faces 1.0實(shí)作成果。
從網(wǎng)頁設(shè)計(jì)人員的角度來看,JavaServer Faces提供了一套像是新版本的HTML標(biāo)籤,但它不是靜態(tài)的,而是動(dòng)態(tài)的,可以與後端的動(dòng)態(tài)程式結(jié)合,但網(wǎng)頁設(shè)計(jì)人員不需要理會(huì)後端的動(dòng)態(tài)部份,網(wǎng)頁設(shè)計(jì)人員甚至不太需要接觸JSTL這類的標(biāo)籤,也可以動(dòng)態(tài)的展現(xiàn)資料(像是動(dòng)態(tài)的查詢表格內(nèi)容),JavaServer Faces提供標(biāo)準(zhǔn)的標(biāo)籤,這可以與網(wǎng)頁編輯程式結(jié)合在一起,另一方面,JavaServer Faces也允許您自訂標(biāo)籤。
從應(yīng)用程式設(shè)計(jì)人員的角度來看,JavaServer Faces提供一個(gè)與傳統(tǒng)應(yīng)用程式開發(fā)相類似的模型(當(dāng)然因某些本質(zhì)上的差異,模型還是稍有不同),他們可以基於事件驅(qū)動(dòng)來開發(fā)程式,不必關(guān)切HTTP的處理細(xì)節(jié),如果必須處理一些視覺元件的屬性的話,他們也可以直接在整合開發(fā)環(huán)境上拖拉這些元件,點(diǎn)選設(shè)定元件的屬性,JavaServer Faces甚至還為應(yīng)用程式設(shè)計(jì)人員處理了物件與字串(HTTP傳送本質(zhì)上就是字串)間不匹配的轉(zhuǎn)換問題。
從UI元件開發(fā)人員的角度來看,他們可以設(shè)計(jì)通用的UI元件,讓應(yīng)用程式的開發(fā)產(chǎn)能提高,就如同在設(shè)計(jì)Swing元件等,UI開發(fā)人員可以獨(dú)立開發(fā),只要定義好相關(guān)的屬性選項(xiàng)來調(diào)整細(xì)節(jié),而不用受到網(wǎng)頁設(shè)計(jì)人員或應(yīng)用程式設(shè)計(jì)人員的干擾。
三個(gè)角色的知識(shí)領(lǐng)域原則上可以互不干擾,根據(jù)您的角色,您只要瞭解其中一個(gè)知識(shí)領(lǐng)域,就可以運(yùn)用JavaServer Faces,其它角色的知識(shí)領(lǐng)域您可以不用瞭解太多細(xì)節(jié)。
當(dāng)然,就其中一個(gè)角色單獨(dú)來看,JavaServer Faces隱藏了許多細(xì)節(jié),若要全盤瞭解,其實(shí)JavaServer Faces是複雜的,每一個(gè)處理的環(huán)境都值得深入探討,所以學(xué)習(xí)JavaServer Faces時(shí),您要選擇的是通盤瞭解,還是從使用的角度來瞭解,這就決定了您學(xué)習(xí)時(shí)所要花費(fèi)的心力。
要使用JSF,首先您要先取得JavaServer Faces參考實(shí)作(JavaServer Faces Reference Implementation),在將來,JSF會(huì)與Container整合在一起,屆時(shí)您只要下載支援的Container,就可以使用JSF的功能。
請(qǐng)至 JSF 官方網(wǎng)站的
下載區(qū) [
http://java.sun.com/j2ee/javaserverfaces/download.html] 下載參考實(shí)作,在下載壓縮檔並解壓縮之後,將其 lib 目錄下的 jar 檔案複製至您的Web應(yīng)用程式的/WEB-INF/lib目錄下,另外您還需要 jstl.jar 與 standard.jar 檔案,這些檔案您可以在 sample 目錄下,解壓縮當(dāng)中的一個(gè)範(fàn)例,在它的/WEB-INF/lib目錄下找到,將之一併複製至您的Web應(yīng)用程式的/WEB-INF/lib目錄下,您總共需要以下的檔案:
- jsf-impl.jar
- jsf-api.jar
- commons-digester.jar
- commons-collections.jar
- commons-beanutils.jar
- jstl.jar
- standard.jar
接下來配置Web應(yīng)用程式的web.xml,使用JSF時(shí),所有的請(qǐng)求都透過FacesServlet來處理,您可以如下定義:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>
JSF Demo
</description>
<display-name>JSF Demo</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>
javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
在上面的定義中,我們將所有.faces的請(qǐng)求交由FaceServlet來處理,F(xiàn)aceServlet會(huì)喚起相對(duì)的.jsp網(wǎng)頁,例如請(qǐng)求是 /index.faces的話,則實(shí)際上會(huì)喚起/index.jsp網(wǎng)頁,完成以上的配置,您就可以開始使用JSF了。
jwebee
我的個(gè)人網(wǎng)站
posted on 2008-05-22 12:32
周行 閱讀(637)
評(píng)論(0) 編輯 收藏 所屬分類:
JSF