簡(jiǎn)述利用JavaServer Faces開發(fā)Web應(yīng)用程序
出處:維庫電子市場(chǎng)網(wǎng) 發(fā)布于:2023-06-25 11:29:29
JavaServer Faces (JSF) 是一種用于構(gòu)建 Web 應(yīng)用程序的新標(biāo)準(zhǔn) Java 框架。它提供了一種以組件為中心來開發(fā) Java Web 用戶界面的方法,從而簡(jiǎn)化了開發(fā)。JavaServer Faces 還引起了廣大 Java/Web 開發(fā)人員的興趣?!捌髽I(yè)開發(fā)人員”和 Web 設(shè)計(jì)人員將發(fā)現(xiàn) JSF 開發(fā)可以簡(jiǎn)單到只需將用戶界面 (UI) 組件拖放到頁面上,而“系統(tǒng)開發(fā)人員”將發(fā)現(xiàn)豐富而強(qiáng)健的 JSF API 為他們提供了無與倫比的功能和編程靈活性。JSF 還通過將良好構(gòu)建的模型-視圖-控制器 (MVC) 設(shè)計(jì)模式集成到它的體系結(jié)構(gòu)中,確保了應(yīng)用程序具有更高的可維護(hù)性。,由于 JSF 是通過 Java Community Process (JCP) 開發(fā)的一種 Java 標(biāo)準(zhǔn),因此開發(fā)工具供應(yīng)商完夠?yàn)?JavaServer Faces 提供易于使用的、高效的可視化開發(fā)環(huán)境。JavaServer Faces 的 MVC 實(shí)現(xiàn) JSF 的主要優(yōu)勢(shì)之一就是它既是 Java Web 用戶界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型-視圖-控制器 (MVC) 設(shè)計(jì)模式的框架。用戶界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使 JSF 應(yīng)用程序更易于管理。為了準(zhǔn)備提供頁面對(duì)應(yīng)用程序數(shù)據(jù)訪問的 JSF 上下文和防止對(duì)頁面未授權(quán)或不正確的訪問,所有與應(yīng)用程序的用戶交互均由一個(gè)前端“Faces”servlet(控制器)來處理。
1 JSF出現(xiàn)的背景和技術(shù)優(yōu)勢(shì)
使用Java開發(fā)Web應(yīng)用程序經(jīng)歷了幾個(gè)發(fā)展階段。一開始是使用Servlet,直接利用requeST和response對(duì)象接收和響應(yīng)客戶端的請(qǐng)求。Servlet的一個(gè)顯著缺點(diǎn)是需要在Java代碼中嵌入大量的標(biāo)記語言(如HTML),處理邏輯和顯示邏輯嚴(yán)重耦合,非常不利于程序的維護(hù)和界面的設(shè)計(jì)。JavaServer Faces 的用戶界面組件 JavaServer Faces 的真正威力在于它的用戶界面組件模型。在該模型中,應(yīng)用程序完全用組件集合構(gòu)建,這些組件可以針對(duì)多種客戶端類型用不同的方式來進(jìn)行顯示。與其他專有技術(shù)(如 ASP,Net)有點(diǎn)類似,JSF 的 UI 組件模型技術(shù)使開發(fā)人員能夠使用預(yù)先構(gòu)建的用戶界面 (UI) 組件來構(gòu)建 Web 用戶界面(而非完全從頭構(gòu)建用戶界面),從而提供了前所未有的開發(fā)效率。JSF UI 組件有多種形式,可以簡(jiǎn)單到只是顯示文本的 outputLabel,或者復(fù)雜到可以表示來自數(shù)據(jù)集合(如數(shù)據(jù)庫表)的表格化數(shù)據(jù)的 dataTable。
遵循MVC-Model2架構(gòu)開發(fā)的應(yīng)用程序框架(Framework)已有不少,例如當(dāng)今比較流行的Struts、Tapestry、Turbine等。JSF的出現(xiàn)并不是要代替這些框架,相反,由于技術(shù)的著重點(diǎn)不同,JSF可以和這些Framework很好地協(xié)同工作。JSF基于JSTL技術(shù),著力于解決現(xiàn)有框架不能完成的難題。
JSF的技術(shù)重點(diǎn)在View部分,它實(shí)現(xiàn)了Web應(yīng)用程序設(shè)計(jì)角色的完全分離。JSF網(wǎng)頁設(shè)計(jì)者只需要專注于頁面的設(shè)計(jì);應(yīng)用程序開發(fā)者主要關(guān)心Model部分的JavaBean的開發(fā)。
JSF還可以根據(jù)不同的客戶端標(biāo)記語言做相應(yīng)的調(diào)整,使Web應(yīng)用程序能在的改動(dòng)下適應(yīng)不同的客戶端類型,JavaServer Faces 規(guī)范在其參考實(shí)施中提供了一組基本 UI 組件,這些組件本身是非常有用的。它們包括兩個(gè)組件庫,即“HTML”組件庫 — 它大部分映射了標(biāo)準(zhǔn)的 HTML 輸入元素;以及“”庫 — 它輔助常見的應(yīng)用程序開發(fā)任務(wù)(如,國(guó)際化和驗(yàn)證/轉(zhuǎn)換輸入數(shù)據(jù))。除了提供一個(gè)基本 UI 組件庫之外,JSF API 還提供了擴(kuò)展和創(chuàng)建定制 JSF UI 組件的功能,從而在基本組件之上提供更多功能。
其中JSF Core Library負(fù)責(zé)基本程序的運(yùn)行,包括程序運(yùn)行生命期控制、事件處理等。RenderKit把服務(wù)器端的UI組件轉(zhuǎn)化成任何一種使用者界面標(biāo)準(zhǔn),支持眾多的標(biāo)記語言。
為一個(gè)JSF網(wǎng)頁的生命周期。只有送給java.faces.webap.FacesServlet控制器的HTTP請(qǐng)求才進(jìn)入這個(gè)生命周期。在階段1,系統(tǒng)根據(jù)JSF網(wǎng)頁的內(nèi)容建立一個(gè)組件樹,根據(jù)組件樹中每個(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é)果。
2.1 視圖設(shè)計(jì)
視圖(View)部分包括login.jsp和response.jsp文件。前者是一個(gè)可以讓用戶輸入登錄名、密碼進(jìn)行登錄的頁面,后者用于返回用戶的登錄結(jié)果。所有的JSP文件都要加入以下二行,以引入JSF的自定義標(biāo)記庫:
<%@ 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文件的主要代碼如下:
Please enter your username and password
username:
password:
注釋部分說明了View是如何與Model和Controller關(guān)聯(lián)的。
2.2 模型設(shè)計(jì)
JSF的模型主要用JavaBean來實(shí)現(xiàn),這里定義了一個(gè)ValUser.java作為JavaBean,用于存儲(chǔ)和處理頁面?zhèn)魉偷男畔ⅰ?/p>
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;
}
}
為了方便說明,這里簡(jiǎn)單地定義用戶輸入123456就是合法登錄。實(shí)際應(yīng)用中,應(yīng)該使用JDBC或其他技術(shù)從數(shù)據(jù)持久層獲取該用戶的密碼進(jìn)行驗(yàn)證。
2.3 控制器設(shè)計(jì)和配置文件
JSF的控制器設(shè)計(jì)是在配置文件中完成的。首先需要配置Web應(yīng)用程序的web.xml文件,加入以下內(nèi)容:
以上內(nèi)容表示只有對(duì)相對(duì)路徑在login下的頁面請(qǐng)求才交給JSF控制器處理,其他請(qǐng)求則不經(jīng)過該控制器。JSF本身的控制文件是faces-config.xml,其中的navigation-rule節(jié)點(diǎn)定義了頁面跳轉(zhuǎn)流程控制,managed-bean節(jié)點(diǎn)定義了JavaBean的信息等,其他用戶界面組件庫 由于 JSF API 的豐富性和靈活性,許多 Java 開發(fā)人員開始創(chuàng)建新的 JSF 組件庫和實(shí)現(xiàn)。
3 結(jié) 論
JSF框架較好地貫徹了MVC-Model2設(shè)計(jì)體系的思想,使頁面表示和商業(yè)邏輯脫耦,讓各類Web應(yīng)用程序開發(fā)角色實(shí)現(xiàn)真正的各司其職。同時(shí),JSF支持不同的客戶端應(yīng)用,使Web應(yīng)用程序可以很容易地適應(yīng)不同的客戶端訪問協(xié)議。JSF比較適合開發(fā)大型的Web應(yīng)用程序。由于配置過程比較繁瑣,待支持JSF的集成開發(fā)工具或插件發(fā)展成熟時(shí),開發(fā)基于JSF的Web應(yīng)用程序?qū)?huì)變得十分輕松和自然。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實(shí)踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機(jī)選型與現(xiàn)場(chǎng)應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計(jì)、天線匹配與鏈路預(yù)算計(jì)算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點(diǎn)與實(shí)現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









