《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 利用JavaServer Faces技術開發Web應用程序
利用JavaServer Faces技術開發Web應用程序
戴 浩
廣州暨南大學計算機科學系(510632)
摘要: JavaServer Faces的工作原理及運用JSF開發Web應用程序的一個簡單實例。
Abstract:
Key words :

摘   要: JavaServer Faces的工作原理及運用JSF開發Web應用程序的一個簡單實例。
關鍵詞: JSF技術  MVC模式  JSP技術  Web應用程序

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

  JSF的技術重點在View部分,它實現了Web應用程序設計角色的完全分離。JSF網頁設計者只需要專注于頁面的設計;應用程序開發者主要關心Model部分的JavaBean的開發,例如連接JNDI、進行數據持久化或調用EJB等;程序的流程控制則由faces-config.xml專門配置。
  JSF還可以根據不同的客戶端標記語言做相應的調整,例如HTML、XUL、XMLForm、Xforms和WML等,使Web應用程序能在最小的改動下適應不同的客戶端類型,如圖2所示。

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


2  JSF應用的一個簡單實例
  本例展現了使用JSF框架設計Web應用程序的步驟。程序功能是讓用戶在瀏覽器中輸入用戶名和密碼登錄,系統執行驗證后返回登錄結果。關于基于JSF的詳細開發,可以參考文獻[3]和文獻[4]。
2.1 視圖設計
  視圖(View)部分包括login.jsp和response.jsp文件。前者是一個可以讓用戶輸入登錄名、密碼進行登錄的頁面,后者用于返回用戶的登錄結果。所有的JSP文件都要加入以下二行,以引入JSF的自定義標記庫:
  <%@ taglib uri=″http://java.sun.com/jsf/html″prefix=″h″%>
  <%@ taglib uri=″http://java.sun.com/jsf/core″prefix=″f″%>
  其中login.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″/> <!--這是一個JSF內置的驗證器,用于校驗輸入的合法性,這里不允許用戶輸入低于6位長度的密碼--!>
  </h:inputSecret></br>
  <h:message for=″input_password″/></br><!--在這里顯示校驗出錯信息--!>
  <h:commandButton id=″submit″action=″go″value=″Submit″/><!--在faces-config.xml文件中定義go行為的處理--!>
  </h:form>
  </f:view>
  注釋部分說明了View是如何與Model和Controller關聯的。
2.2 模型設計
  JSF的模型主要用JavaBean來實現,這里定義了一個ValUser.java作為JavaBean,用于存儲和處理頁面傳送的信息。
  package myjsf;
  public class ValUser{
       public ValUser( ) { }
       String username=null;
       String password=null;
       //此處省略bean屬性username和password的getter
       //和setter方法
       // ……
       String resultMessage=null;
       public String getResultMessage( )//返回登錄結果
       {
          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( )//檢驗用戶名密碼是否合法
  {
       if (this.password.trim( ).equals(″123456″))
      return true;
    else
        return false;
    }
  }
  為了方便說明,這里簡單地定義用戶輸入123456就是合法登錄。實際應用中,應該使用JDBC或其他技術從數據持久層獲取該用戶的密碼進行驗證。這個JavaBean定義了三個屬性,其中username和password從login.jsp中獲取值,resultMessage用于向response.jsp頁面反饋登錄結果。
2.3 控制器設計和配置文件
  JSF的控制器設計是在配置文件中完成的。首先需要配置Web應用程序的web.xml文件,加入以下內容:
  <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>
  以上內容表示只有對相對路徑在login下的頁面請求才交給JSF控制器處理,其他請求則不經過該控制器(圖3)。JSF本身的控制文件是faces-config.xml,其中的navigation-rule節點定義了頁面跳轉流程控制,managed-bean節點定義了JavaBean的信息等,這里不再詳述。

3  結  論
  JSF框架較好地貫徹了MVC-Model2設計體系的思想,使頁面表示和商業邏輯脫耦,讓各類Web應用程序開發角色實現真正的各司其職。同時,JSF支持不同的客戶端應用,使Web應用程序可以很容易地適應不同的客戶端訪問協議。JSF比較適合開發大型的Web應用程序。由于配置過程比較繁瑣,待支持JSF的集成開發工具或插件發展成熟時,開發基于JSF的Web應用程序將會變得十分輕松和自然。
參考文獻
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
 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲免费观看视频| 久久人人爽人人爽| 久久国产精品久久精品国产| 亚洲无亚洲人成网站77777| 亚洲精品国产无天堂网2021| 精品999网站| 国内激情久久| 国产情人节一区| 国产精品色婷婷| 国产精品久久久久久久午夜| 欧美日韩在线播放三区| 欧美日韩dvd在线观看| 欧美激情视频一区二区三区在线播放| 免费日韩成人| 欧美第一黄网免费网站| 欧美国产一区在线| 欧美激情视频一区二区三区免费 | 亚洲欧美日韩天堂| 亚洲一区二区三区高清不卡| 亚洲无线一线二线三线区别av| 宅男精品视频| 亚洲午夜日本在线观看| 亚洲素人在线| 亚洲女ⅴideoshd黑人| 亚洲欧美日韩在线播放| 欧美影视一区| 久久久久久夜| 欧美成人一区二区三区在线观看| 欧美国产日韩在线观看| 欧美日韩国产a| 国产精品久久精品日日| 国产精品一区二区黑丝| 国产一区再线| 在线看国产日韩| 亚洲人成免费| 一区二区av在线| 亚洲宅男天堂在线观看无病毒| 亚洲欧美精品在线观看| 欧美资源在线观看| 亚洲精品久久久久| 亚洲午夜电影在线观看| 欧美一级夜夜爽| 巨乳诱惑日韩免费av| 欧美精品在线一区二区| 国产精品剧情在线亚洲| 国产亚洲精品自拍| 亚洲国产精品综合| 在线亚洲免费| 久久激情综合| 制服丝袜亚洲播放| 久久精品国产99国产精品澳门| 女人天堂亚洲aⅴ在线观看| 欧美日韩精品一区二区在线播放 | 国产精品久久久久影院色老大| 国产女主播一区二区| 好吊色欧美一区二区三区四区| 亚洲国产日韩欧美综合久久| 一区二区三区高清视频在线观看| 午夜激情久久久| 亚洲日本免费电影| 午夜精品福利电影| 欧美电影免费观看高清完整版| 国产精品大全| 在线免费观看欧美| 亚洲一区中文| 亚洲精品自在在线观看| 欧美制服第一页| 欧美激情a∨在线视频播放| 国产精品亚洲人在线观看| 亚洲国产美女| 亚洲欧美一区二区三区在线| 亚洲精品一区久久久久久| 久久av一区二区三区漫画| 欧美日韩视频专区在线播放 | 亚洲作爱视频| 亚洲国产精品www| 性视频1819p久久| 欧美日韩99| 韩日欧美一区二区| 亚洲伊人网站| 一区二区三区毛片| 美女露胸一区二区三区| 国产精品视频一二三| 亚洲日本成人| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧美日韩一区二区三区在线观看 | 欧美激情国产高清| 国产一区二区三区的电影| 一本色道久久88综合日韩精品| 91久久黄色| 久久久精品五月天| 国产精品欧美日韩| 日韩一级精品视频在线观看| 最新国产精品拍自在线播放| 久久久91精品国产一区二区三区 | 亚洲一区在线直播| 在线综合亚洲欧美在线视频| 欧美1级日本1级| 国模套图日韩精品一区二区| 亚洲一区免费看| 中国av一区| 欧美片在线观看| 亚洲高清免费| 久久精品免费观看| 久久精品免费电影| 国产欧美日韩精品丝袜高跟鞋| 一本色道久久加勒比88综合| 99re66热这里只有精品4| 亚洲午夜免费视频| 香蕉久久一区二区不卡无毒影院| 一本久久综合亚洲鲁鲁| 美女诱惑黄网站一区| 国产一区二区三区网站| 亚洲午夜国产一区99re久久 | 亚洲一区久久久| 欧美日韩国产成人在线免费| 亚洲黄一区二区| 亚洲人成久久| 女主播福利一区| 亚洲大胆在线| 亚洲欧洲三级| 欧美黄色大片网站| 亚洲欧洲另类国产综合| 亚洲理伦电影| 欧美日韩第一区日日骚| 亚洲蜜桃精久久久久久久| 日韩一区二区精品视频| 欧美激情一区二区三区蜜桃视频| 亚洲电影第三页| 亚洲黄色一区| 欧美粗暴jizz性欧美20| 91久久久久久国产精品| 亚洲免费观看高清完整版在线观看| 欧美a级在线| 亚洲国产三级| 在线视频精品一区| 欧美视频在线观看一区| 在线视频欧美一区| 欧美一区二区三区播放老司机| 国产欧美一区二区三区久久| 欧美一二三区精品| 久久久视频精品| 影音先锋欧美精品| 亚洲精品国产精品乱码不99按摩| 欧美福利在线| av成人免费在线观看| 性伦欧美刺激片在线观看| 国产亚洲a∨片在线观看| 亚洲福利国产| 欧美激情亚洲另类| 一区二区三区欧美在线| 午夜精品亚洲| 国产中文一区二区| 亚洲精品一区在线| 国产精品福利久久久| 亚洲男人第一av网站| 看片网站欧美日韩| 亚洲精品免费电影| 亚洲欧美激情诱惑| 国产午夜精品久久久久久久| 亚洲夫妻自拍| 欧美日韩伦理在线免费| 亚洲综合精品一区二区| 快射av在线播放一区| 日韩写真在线| 欧美综合国产精品久久丁香| 亚洲成人原创| 亚洲女人天堂成人av在线| 国外成人在线视频| 99成人在线| 国产精品亚洲激情| 最新中文字幕亚洲| 国产精品久久久久久久久久免费看 | 亚洲精品乱码视频| 欧美性开放视频| 欧美一二三视频| 欧美精品国产一区二区| 亚洲欧美电影院| 欧美mv日韩mv国产网站| 亚洲一区二区三区免费观看| 久久在线视频在线| 一区二区高清在线观看| 久久视频精品在线| 一区二区高清在线| 久久夜色精品亚洲噜噜国产mv | 一区二区三区视频在线播放| 久久婷婷丁香| 一区二区三区日韩欧美| 久久久久久久97| 亚洲精品久久久蜜桃| 欧美在线亚洲一区| 亚洲乱码国产乱码精品精可以看| 欧美中文字幕精品| 99re在线精品| 快播亚洲色图| 亚洲一区二区在线免费观看| 欧美激情视频网站| 久久国内精品视频| 国产精品久久国产三级国电话系列 | 日韩视频在线永久播放|