《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 利用JavaServer Faces技術(shù)開(kāi)發(fā)Web應(yīng)用程序
利用JavaServer Faces技術(shù)開(kāi)發(fā)Web應(yīng)用程序
戴 浩
廣州暨南大學(xué)計(jì)算機(jī)科學(xué)系(510632)
摘要: JavaServer Faces的工作原理及運(yùn)用JSF開(kāi)發(fā)Web應(yīng)用程序的一個(gè)簡(jiǎn)單實(shí)例。
Abstract:
Key words :

摘   要: JavaServer Faces的工作原理及運(yùn)用JSF開(kāi)發(fā)Web應(yīng)用程序的一個(gè)簡(jiǎn)單實(shí)例。
關(guān)鍵詞: JSF技術(shù)  MVC模式  JSP技術(shù)  Web應(yīng)用程序

  JSF(Java Server Faces)是SUN公司為了方便Web應(yīng)用程序的設(shè)計(jì),使應(yīng)用程序邏輯設(shè)計(jì)和界面設(shè)計(jì)脫耦而提出的一種用戶界面程序框架(UI Framework)。它包括一組API和二個(gè)自定義標(biāo)記庫(kù),用于UI組件的表示、組件狀態(tài)的管理、客戶端事件的處理、輸入的驗(yàn)證以及頁(yè)面導(dǎo)航的管理等。與傳統(tǒng)的Servlet和JSP技術(shù)相比,JSF能使Web應(yīng)用程序在UI的開(kāi)發(fā)上更具擴(kuò)充性和維護(hù)性,它有助于Web應(yīng)用程序的開(kāi)發(fā)人員角色分離。JSF1.0已經(jīng)被SUN公司納入到最新的J2EE1.4 SDK中。
1  JSF出現(xiàn)的背景和技術(shù)優(yōu)勢(shì)
  使用Java開(kāi)發(fā)Web應(yīng)用程序經(jīng)歷了幾個(gè)發(fā)展階段。一開(kāi)始是使用Servlet,直接利用request和response對(duì)象接收和響應(yīng)客戶端的請(qǐng)求。Servlet的一個(gè)顯著缺點(diǎn)是需要在Java代碼中嵌入大量的標(biāo)記語(yǔ)言(如HTML),處理邏輯和顯示邏輯嚴(yán)重耦合,非常不利于程序的維護(hù)和界面的設(shè)計(jì)。基于這種情況,SUN又發(fā)展了JSP技術(shù)。與Servlet正好相反,JSP是在標(biāo)記語(yǔ)言中嵌入Java代碼,但它仍沒(méi)有實(shí)現(xiàn)Web開(kāi)發(fā)角色的分離,美工設(shè)計(jì)人員仍然要在一堆混雜腳本、標(biāo)記和Java程序的代碼中工作,不利于程序的維護(hù)。后來(lái),JSP加入了Tab library機(jī)制,鼓勵(lì)開(kāi)發(fā)人員使用自定義標(biāo)簽封裝業(yè)務(wù)邏輯,JSP頁(yè)面盡可能只出現(xiàn)各種標(biāo)簽。大量自定義JSP標(biāo)簽的出現(xiàn),并經(jīng)過(guò)SUN公司的標(biāo)準(zhǔn)化后,形成了JSTL(Java Standard Tab Library)。JSTL技術(shù)基本實(shí)現(xiàn)了頁(yè)面邏輯和顯示邏輯的脫耦,方便了Web的各種開(kāi)發(fā)人員。隨著Web應(yīng)用程序規(guī)模的不斷擴(kuò)大,MVC-Model2體系的概念越來(lái)越適用于Web應(yīng)用程序的開(kāi)發(fā)。經(jīng)過(guò)大量實(shí)踐的檢驗(yàn),它已經(jīng)成為最適合開(kāi)發(fā)Web應(yīng)用程序的模板。
  遵循MVC-Model2架構(gòu)開(kāi)發(fā)的應(yīng)用程序框架(Framework)已有不少,例如當(dāng)今比較流行的Struts、Tapestry、Turbine等。JSF的出現(xiàn)并不是要代替這些框架,相反,由于技術(shù)的著重點(diǎn)不同,JSF可以和這些Framework很好地協(xié)同工作。JSF基于JSTL技術(shù),著力于解決現(xiàn)有框架不能完成的難題,例如View和Model無(wú)法實(shí)現(xiàn)完全脫耦、客戶端種類繁多等。JSF是真正徹底的MVC(Model View Controller),圖1為JSF的MVC架構(gòu)。

  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ā),例如連接JNDI、進(jìn)行數(shù)據(jù)持久化或調(diào)用EJB等;程序的流程控制則由faces-config.xml專門(mén)配置。
  JSF還可以根據(jù)不同的客戶端標(biāo)記語(yǔ)言做相應(yīng)的調(diào)整,例如HTML、XUL、XMLForm、Xforms和WML等,使Web應(yīng)用程序能在最小的改動(dòng)下適應(yīng)不同的客戶端類型,如圖2所示。

  其中JSF Core Library負(fù)責(zé)基本程序的運(yùn)行,包括程序運(yùn)行生命期控制、事件處理等。RenderKit把服務(wù)器端的UI組件轉(zhuǎn)化成任何一種使用者界面標(biāo)準(zhǔn),支持眾多的標(biāo)記語(yǔ)言。
  圖3為一個(gè)JSF網(wǎng)頁(yè)的生命周期。只有送給java.faces.webap.FacesServlet控制器的HTTP請(qǐng)求才進(jìn)入這個(gè)生命周期。在階段1,系統(tǒng)根據(jù)JSF網(wǎng)頁(yè)的內(nèi)容建立一個(gè)組件樹(shù),根據(jù)組件樹(shù)中每個(gè)組件的設(shè)定將對(duì)應(yīng)的轉(zhuǎn)換器(Converter)、驗(yàn)證器(Validator)以及事件處理函數(shù)(Event Handler)與特定組件關(guān)聯(lián),在階段2中系統(tǒng)根據(jù)HTTP request的參數(shù)一一調(diào)用這些組件;然后分別在階段3、4和5中執(zhí)行參數(shù)驗(yàn)證、模型更新和事件處理;最后系統(tǒng)調(diào)用組件相應(yīng)的方法將它們轉(zhuǎn)化成適當(dāng)?shù)臉?biāo)簽(HTML或者WML等)送到客戶端。


2  JSF應(yīng)用的一個(gè)簡(jiǎn)單實(shí)例
  本例展現(xiàn)了使用JSF框架設(shè)計(jì)Web應(yīng)用程序的步驟。程序功能是讓用戶在瀏覽器中輸入用戶名和密碼登錄,系統(tǒng)執(zhí)行驗(yàn)證后返回登錄結(jié)果。關(guān)于基于JSF的詳細(xì)開(kāi)發(fā),可以參考文獻(xiàn)[3]和文獻(xiàn)[4]。
2.1 視圖設(shè)計(jì)
  視圖(View)部分包括login.jsp和response.jsp文件。前者是一個(gè)可以讓用戶輸入登錄名、密碼進(jìn)行登錄的頁(yè)面,后者用于返回用戶的登錄結(jié)果。所有的JSP文件都要加入以下二行,以引入JSF的自定義標(biāo)記庫(kù):
  <%@ taglib uri=″http://java.sun.com/jsf/html″prefix=″h″%>
  <%@ taglib uri=″http://java.sun.com/jsf/core″prefix=″f″%>
  其中l(wèi)ogin.jsp文件的主要代碼如下:
  <f:view>
  <h:form id=″loginform″>
  <h2>Please enter your username and password</h2>
  username:
  <h:inputText id=″input_username″value=″#{userBean.username}″required=″true″/></br><!--把輸入的信息放入模型(javabean)--!>
  <h:message for=″input_username″/></br>
  password:
  <h:inputSecret id=″input_password″value=″#{userBean.password}″required=″true″>
  <f:validateLength minimum=″6″/> <!--這是一個(gè)JSF內(nèi)置的驗(yàn)證器,用于校驗(yàn)輸入的合法性,這里不允許用戶輸入低于6位長(zhǎng)度的密碼--!>
  </h:inputSecret></br>
  <h:message for=″input_password″/></br><!--在這里顯示校驗(yàn)出錯(cuò)信息--!>
  <h:commandButton id=″submit″action=″go″value=″Submit″/><!--在faces-config.xml文件中定義go行為的處理--!>
  </h:form>
  </f:view>
  注釋部分說(shuō)明了View是如何與Model和Controller關(guān)聯(lián)的。
2.2 模型設(shè)計(jì)
  JSF的模型主要用JavaBean來(lái)實(shí)現(xiàn),這里定義了一個(gè)ValUser.java作為JavaBean,用于存儲(chǔ)和處理頁(yè)面?zhèn)魉偷男畔ⅰ?br />   package myjsf;
  public class ValUser{
       public ValUser( ) { }
       String username=null;
       String password=null;
       //此處省略bean屬性u(píng)sername和password的getter
       //和setter方法
       // ……
       String resultMessage=null;
       public String getResultMessage( )//返回登錄結(jié)果
       {
          if (isValid( ))
           this.resultMessage=″valid user,welcome″;
          else
           this.resultMessage=″invalid user,please login again″;
          return this.resultMessage;
  }
  public void setResultMessage(String resultMessage)
  { }
  private boolean isValid( )//檢驗(yàn)用戶名密碼是否合法
  {
       if (this.password.trim( ).equals(″123456″))
      return true;
    else
        return false;
    }
  }
  為了方便說(shuō)明,這里簡(jiǎn)單地定義用戶輸入123456就是合法登錄。實(shí)際應(yīng)用中,應(yīng)該使用JDBC或其他技術(shù)從數(shù)據(jù)持久層獲取該用戶的密碼進(jìn)行驗(yàn)證。這個(gè)JavaBean定義了三個(gè)屬性,其中username和password從login.jsp中獲取值,resultMessage用于向response.jsp頁(yè)面反饋登錄結(jié)果。
2.3 控制器設(shè)計(jì)和配置文件
  JSF的控制器設(shè)計(jì)是在配置文件中完成的。首先需要配置Web應(yīng)用程序的web.xml文件,加入以下內(nèi)容:
  <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>/login/*</url-pattern>
     </servlet-mapping>
  以上內(nèi)容表示只有對(duì)相對(duì)路徑在login下的頁(yè)面請(qǐng)求才交給JSF控制器處理,其他請(qǐng)求則不經(jīng)過(guò)該控制器(圖3)。JSF本身的控制文件是faces-config.xml,其中的navigation-rule節(jié)點(diǎn)定義了頁(yè)面跳轉(zhuǎn)流程控制,managed-bean節(jié)點(diǎn)定義了JavaBean的信息等,這里不再詳述。

3  結(jié)  論
  JSF框架較好地貫徹了MVC-Model2設(shè)計(jì)體系的思想,使頁(yè)面表示和商業(yè)邏輯脫耦,讓各類Web應(yīng)用程序開(kāi)發(fā)角色實(shí)現(xiàn)真正的各司其職。同時(shí),JSF支持不同的客戶端應(yīng)用,使Web應(yīng)用程序可以很容易地適應(yīng)不同的客戶端訪問(wèn)協(xié)議。JSF比較適合開(kāi)發(fā)大型的Web應(yīng)用程序。由于配置過(guò)程比較繁瑣,待支持JSF的集成開(kāi)發(fā)工具或插件發(fā)展成熟時(shí),開(kāi)發(fā)基于JSF的Web應(yīng)用程序?qū)?huì)變得十分輕松和自然。
參考文獻(xiàn)
1   Sun Microsystems.JavaServer Faces Technology Overview. http://java.sun.com/j2ee/javaserverfaces/
2   Gamma E,Helm R,Johnson R et al.Design Patterns:Elements of Reusable Object-Oriented Software.Addison  Wesley,1995
3   Sun Microsystems.JavaServer Faces in The J2EE 1.4 Tutorial.http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSFIntro.  html
4   Bergsten H.JavaServer Faces.O′Reilly&Associates,2004
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 免费国产成人α片 | 五月天婷婷在线观看 | 96精品专区国产在线观看高清 | 99国产精品免费视频 | 色视频网站免费 | 午夜国产精品视频 | 欧美日韩中文国产一区二区三区 | 欧美日韩一区二区在线观看视频 | 国产高清在线免费 | 天天五月天丁香婷婷深爱综合 | 国产交换精品一区二区三区 | 九九国产精品视频 | 五月婷花 | 色人阁五月天 | 奇米777四色影视首页 | 国产大学生真实在线播放 | 国产日韩欧美另类 | 欧美高清视频在线观看 | 色戒印度版 | 黄视频在线观看www免费 | 国产精品视频999 | 国产视频色 | 激情婷婷综合久久久久 | 日韩欧美视频一区二区三区 | 国产精品第一区在线观看 | 伊人免费视频网 | aⅴ一区二区三区无卡无码 aⅴ一区二区三区 | 欧美色性视频 | 99久久精品自在自看国产 | 99re热精品视频国产免费 | 免费毛片在线 | 免费在线观看污视频网站 | 久久综合噜噜激激的五月天 | 99精品在线看 | 亚洲国产日韩在线人成下载 | 视频一区在线播放 | 日韩中文字幕亚洲无线码 | 久久精品国产一区 | 你懂的免费在线视频 | 久久一区二区精品 | 大片免免费观看视频播放网站 |