第5章 JaveBean應(yīng)用 5.4 案例ch5.4-guessNumber猜數(shù)游戲_第1頁
第5章 JaveBean應(yīng)用 5.4 案例ch5.4-guessNumber猜數(shù)游戲_第2頁
第5章 JaveBean應(yīng)用 5.4 案例ch5.4-guessNumber猜數(shù)游戲_第3頁
第5章 JaveBean應(yīng)用 5.4 案例ch5.4-guessNumber猜數(shù)游戲_第4頁
第5章 JaveBean應(yīng)用 5.4 案例ch5.4-guessNumber猜數(shù)游戲_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

JSP開發(fā)案例教程JSP開發(fā)案例教程第5章JavaBean應(yīng)用5.4案例ch5.4_guessNumber(猜數(shù)游戲)JavaBean概述01JavaBean在JSP中的應(yīng)用03案例ch5.4_guessNumber:猜數(shù)游戲04本章內(nèi)容JavaBean類的構(gòu)成02JSP開發(fā)案例教程5.4案例ch5.4_guessNumber

(猜數(shù)游戲)案例ch5.4_guessNumber本案例創(chuàng)建了3組功能相同的頁面,每組包含2個頁面:猜數(shù)頁index.jsp和結(jié)論頁guess.jsp。3組頁面雖然功能相同,但引用JavaBean、為JavaBean的屬性設(shè)值和從JavaBean屬性讀取值的實(shí)現(xiàn)方式有變化。第1組網(wǎng)頁的測試效果如圖5-1至5-3所示。項(xiàng)目的文件列表如圖5-4所示,其中的Student.java是本章5.2節(jié)的示例JavaBean的類文件。案例:應(yīng)用JavaBean技術(shù)實(shí)現(xiàn)了一個猜數(shù)游戲。圖5-1猜數(shù)頁圖5-2結(jié)論頁(沒猜對)圖5-3結(jié)論頁(猜對了)圖5-4項(xiàng)目文件列表5.4.1JavaBean類GuessNumber在項(xiàng)目的文件列表中的“src/main/java”包上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“New”→“Package”命令,在打開的“NewJavaPackage”窗口的“Name”文本框中輸入包的名稱“com”,單擊“Finish”按鈕完成com包的創(chuàng)建。(com是單詞component的縮寫,意為組件。)包的作用與文件夾的作用類似,可以有多層,用于存放Java類、屬性文件和配置文件。包的名字通常都由小寫字母組成。先創(chuàng)建好Web項(xiàng)目ch5.4_guessNumber,將素材中的文件復(fù)制到src/main/webapp目錄。然后,根據(jù)以下操作,在包src/main/java中創(chuàng)建JavaBean類GuessNumber。操作1:創(chuàng)建包c(diǎn)om在com包上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“New”→“Class”命令,打開“NewJavaClass”窗口,在窗口的“Name”文本框中,輸入類的名稱“GuessNumber”,將全部復(fù)選框取消勾選,如圖5-5所示,單擊“Finish”按鈕完成類GuessNumber的創(chuàng)建。在src/main/java/com包中能看到類文件GuessNumber.java。類名通常以大寫字母開頭。圖5-5創(chuàng)建類GuessNumber

操作2:創(chuàng)建JavaBean類GuessNumber5.4.1JavaBean類GuessNumber在GuessNumber類中添加5個變量(可從素材文件中復(fù)制過來),如第5~9行代碼所示。將光標(biāo)定位在第10行(空白行),單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Source”→“GenerateGettersandSetters”命令,在打開的“GenerateGettersandSetters”窗口中單擊“SelectAll”按鈕,勾選所有變量的復(fù)選框。然后單擊“Generate”按鈕完成getter和setter方法的添加。也可以在菜單欄中選擇“Source”→“GenerateGettersandSetters”命令來添加getter和setter方法。對代碼進(jìn)行整理,將setAnswerRand()和setNumberInput()這兩個方法移到其他getter、setter方法的前面,如下第11~17行代碼所示。操作3:添加屬性(類成員變量)及其getter、setter方法5.4.1JavaBean類GuessNumber在調(diào)用方法setAnswerRand()設(shè)置答案時,將隨機(jī)生成一個2~20內(nèi)的整數(shù),然后輸出此隨機(jī)數(shù)(即答案)到控制臺供查看,最后將此JavaBean的其他4個屬性的值重置。在調(diào)用方法setNumberInput()設(shè)置猜測的數(shù)時,將參數(shù)中用戶猜測的數(shù)numberInput與隨機(jī)數(shù)(即答案)answerRand進(jìn)行比對,根據(jù)比對結(jié)果給出相應(yīng)的結(jié)論,并將用戶猜測的總次數(shù)countGuessed加1。JavaBean的GuessNumber類編寫完成后,項(xiàng)目中其他的類或頁面都可以引用。這提高了代碼的重用性,也便于后期的修改、升級。操作4:完善兩個setter方法為setAnswerRand()和setNumberInput()這兩個方法補(bǔ)充代碼,代碼如下:5.4.1JavaBean類GuessNumber5.4.2猜數(shù)頁index.jsp此代碼用于添加表單和控件,聲明一個ID為guess的JavaBean實(shí)例,并設(shè)置其屬性property的值為answerRand,用于生成答案。打開網(wǎng)頁index.jsp,主要代碼如下。此代碼用于添加表單和控件,聲明一個ID為guess的JavaBean實(shí)例,并設(shè)置其屬性property的值為answerRand,用于生成答案。打開網(wǎng)頁index.jsp,主要代碼如下。5.4.2猜數(shù)頁index.jsp圖5-1猜數(shù)頁代碼的第13行聲明一個ID為guess的JavaBean實(shí)例,其類是在com包中定義的GuessNumber類,其生命周期是session。如果此JavaBean實(shí)例已存在就引用它,如果不存在則服務(wù)器會自動新建一個。5.4.2猜數(shù)頁index.jsp第15行代碼將ID是guess的JavaBean對象的屬性answerRand的值設(shè)置為0。它調(diào)用com.GuessNumber類中的setAnswerRand()方法實(shí)現(xiàn)賦值。只不過,方法setAnswerRand()隨機(jī)生成一個2~20內(nèi)的整數(shù),并將其賦給屬性property,由頁面?zhèn)鬟f的參數(shù)值0并沒有被真正使用。但在此一定要為其賦值,且值為整數(shù),否則調(diào)用方法setAnswerRand()時系統(tǒng)將報參數(shù)錯誤。5.4.2猜數(shù)頁index.jsp5.4.3結(jié)論頁guess.jsp在結(jié)論頁guess.jsp中,仍然需要聲明JavaBean對象和添加表單及控件,所以guess.jsp頁的代碼與猜數(shù)頁index.jsp中的部分代碼相同。打開guess.jsp并修改代碼,主要代碼如下guess.jsp的第13行代碼與index.jsp的第13行代碼完全一樣,引用的是同一個JavaBean實(shí)例guess對象。5.4.3結(jié)論頁guess.jsp第15行代碼為屬性numberInput設(shè)置值時使用了param="numberInputNew",它表示該屬性的值等于request對象中numberInputNew的值,即在文本框numberInputNew中輸入的值。這與index.jsp的第15行代碼中設(shè)置默認(rèn)值的方式(value="0")有所不同。5.4.3結(jié)論頁guess.jsp第17行代碼表單form的action屬性值為空字符串,或沒有action屬性時,系統(tǒng)為表單提供的action的默認(rèn)值就是前頁面guess.jsp。5.4.3結(jié)論頁guess.jsp第19、33、35行代碼使用<jsp:getPropertyname="guess"property="***"/>的方式,從JavaBean實(shí)例guess對象中獲取對應(yīng)屬性的值,相當(dāng)于調(diào)用對應(yīng)屬性的getter方法。5.4.3結(jié)論頁guess.jsp第21行代碼中的guess.isResultBool()采用“對象名.方法名”方式,以另外一種方式獲取JavaBean實(shí)例guess對象的屬性resultBool的值,即調(diào)用guess對象中的isResultBool()方法,得到表示是否猜對的布爾值(true或false)。5.4.3結(jié)論頁guess.jsp測試效果如圖5-2、圖5-3所示。圖5-2結(jié)論頁(沒猜對)圖5-3結(jié)論頁(猜對了)測試此網(wǎng)頁時,可輸入大小不同的數(shù),然后查看是否猜對,正確的答案可在控制臺查看。如果輸入的不是整數(shù),則會報參數(shù)錯誤,為什么呢?因?yàn)榈?5行的代碼相當(dāng)于調(diào)用了JavaBean對象的setNumberInput(intnumberInput)方法,其參數(shù)是整數(shù),如果輸入的不是整數(shù),例如小數(shù)或字母,則系統(tǒng)無法自動將其轉(zhuǎn)換為整數(shù),無法滿足參數(shù)的數(shù)據(jù)類型要求,從而報錯。

5.4.3結(jié)論頁guess.jsp5.4.4屬性的賦值和獲取值在Java代碼片段中的實(shí)現(xiàn)引用或創(chuàng)建ID為guess的JavaBean對象可使用如:<jsp:useBeanid="guess"class="com.GuessNumber"scope="session"/>的標(biāo)簽。設(shè)置其屬性值可使用如:<jsp:setPropertyname="guess"property="answerRand"value="0"/>,或<jsp:setPropertyname="guess"property="numberInput"param="numberInputNew"/>的標(biāo)簽。讀取其屬性值可使用如<jsp:getPropertyname="guess"property="countGuessed"/>的標(biāo)簽,或使用如guess.isResultBool()的語句。在網(wǎng)頁代碼中,設(shè)置和讀取JavaBean對象的屬性值可以在Java代碼中調(diào)用guess.setXxx()和guess.getXxx()方法來實(shí)現(xiàn)。下面在index2.jsp和guess2.jsp中采用這種方式來設(shè)置和讀取屬性值。操作1:將index.jsp另存為index2.jsp將猜數(shù)頁index.jsp另存為index2.jsp。將index2.jsp的網(wǎng)頁標(biāo)題和其中的h3標(biāo)題都更改為“猜數(shù)2”。將第17行代碼中的guess.jsp更改為guess2.jsp。將index2.jsp中第15~16行的代碼更改成如下15~19行的代碼??墒謩虞斎胱⑨屪址?lt;%--”和“--%>”,也可將光標(biāo)置于第15行,在菜單欄中選擇“Source”→“ToggleCommend”命令,將第15行代碼注釋掉。第18行的語句為屬性answerRand賦值,與第15行代碼的賦值語句的效果一樣。5.4.4屬性的賦值和獲取值在Java代碼片段中的實(shí)現(xiàn)將結(jié)論頁guess.jsp,另存為guess2.jsp。將guess2.jsp的網(wǎng)頁標(biāo)題和其中的h3標(biāo)題都更改為“結(jié)論2”。修改guess2.jsp的代碼,主要代碼如下:操作2:將guess.jsp另存為guess2.jsp5.4.4屬性的賦值和獲取值在Java代碼片段中的實(shí)現(xiàn)第18~29行代碼,實(shí)現(xiàn)了獲取所輸入的值numberInputNew,并將字符串類型的值轉(zhuǎn)換為整數(shù)賦值給numberInput。5.4.4屬性的賦值和獲取值在Java代碼片段中的實(shí)現(xiàn)第15行被注釋掉了,設(shè)置屬性值在代碼第31行用語句予以實(shí)現(xiàn),二者的功能相同。在第33~35行,分別使用guess.getXxx()方法獲取屬性值賦值給變量,在第38、51、52行分別輸出變量值。5.4.4屬性的賦值和獲取值在Java代碼片段中的實(shí)現(xiàn)5.4.5JavaBean對象的引用或創(chuàng)建在Java代碼片段中的實(shí)現(xiàn)設(shè)置或獲取JavaBean對象的屬性值:用JSP動作元素標(biāo)簽在Java代碼中調(diào)用方法效果相同Java代碼片段里采用創(chuàng)建對象的方法來引用或創(chuàng)建JavaBean對象的步驟:操作1:將index2.jsp另存為index3.jsp操作2:將guess2.jsp另存為guess3.jsp操作1:將index2.jsp另存為index3.jsp將猜數(shù)頁index2.jsp另存為index3.jsp,將index3.jsp的網(wǎng)頁標(biāo)題和其中的h3標(biāo)題都更改為“猜數(shù)3”,將第21行代碼的guess2.jsp更改為guess3.jsp。將第13行代碼注釋掉。在第18行代碼插入代碼,得到如下代碼。在輸入“GuessNumber”之后,按快捷鍵“Alt+/”,在彈出的類列表中選擇“GuessNumber-com”選項(xiàng),在網(wǎng)頁的第一行引入此JavaBean類com.GuessNumber。代碼的第19行用Java語句創(chuàng)建對象guess,第20行代碼設(shè)置屬性值,第21行代碼將對象guess保存到鍵名為guess的session對象中,這與使用標(biāo)簽創(chuàng)建的JavaBean實(shí)例guess對象(原第13行被注釋掉的代碼)的功能類似。5.4.5JavaBean對象的引用或創(chuàng)建在Java代碼片段中的實(shí)現(xiàn)操作2:將guess2.jsp另存為guess3.jsp將結(jié)論頁guess2.jsp另存為guess3.jsp,將guess3.jsp的網(wǎng)頁標(biāo)題和其中的h3標(biāo)題都更改為“結(jié)論3”。將第13行代碼注釋掉。在第18行代碼之前插入以下幾行代碼。其中,在輸入“GuessNumber”后也需引入類com.GuessNumber。代碼的第19行從session對象中獲取鍵名為guess的對象并將其強(qiáng)制轉(zhuǎn)換為GuessNumber類型對象,如果該對象為null(即該session對象不存在或已失效),則跳轉(zhuǎn)到頁面index3.jsp(第22行代碼),以重新創(chuàng)建JavaBean對象guess。5.4.5JavaBean對象的引用或創(chuàng)建在Java代碼片段中的實(shí)現(xiàn)測試網(wǎng)頁index3.jsp和guess3.jsp,如下所示,其操作的形式和得到的結(jié)論與index.jsp和guess.jsp一致。從本案例的3組頁面可知,通過標(biāo)簽應(yīng)用JavaBean對象與在代碼片段中應(yīng)用JavaBean對象,得到的效果一致。通過標(biāo)簽應(yīng)用JavaBean對象的代碼更簡潔,而通過Java代碼片段應(yīng)用JavaBean對象更靈活、容錯性更好、功能更強(qiáng)大、通用性更強(qiáng)。案例練習(xí):

ch5.4ex_score(成績分析)要求:創(chuàng)建Web項(xiàng)目ch5.4ex_score,將素材文件index.jsp復(fù)制到文件夾src/main/webapp,將Score.java復(fù)制到包src/main/java/com。本案例只有一個頁面index.jsp。JavaBean對象的創(chuàng)建、為屬性設(shè)置值和獲取屬性值,都采用JSP動作元素標(biāo)簽<jsp:……/>來進(jìn)行。在Score.java的方法setScore(Stringscore)中,需將輸入的成績score(String類型)轉(zhuǎn)換為float類型,然后再計(jì)算(提示:類型轉(zhuǎn)換可用floata=0;try{a=Float.parseFloat(score);}catch(){})。未輸入成績,或?qū)⑤斎氲某煽冝D(zhuǎn)換為float類型時失敗,或成績范圍超出0~100,則忽略此次輸入的成績,并給出提示信息。有興趣的同學(xué)實(shí)現(xiàn)輸出:優(yōu)秀率(優(yōu)秀要求成績大于或等于90分)、及格率。(提示:在優(yōu)秀成績個數(shù)除以總成績個數(shù)之前,需先強(qiáng)制轉(zhuǎn)換為float類型,即rateA=((float)countA/count)*100。否則,商會被自動強(qiáng)制轉(zhuǎn)換為整數(shù),如果商為小于1,將得到0。)有興趣的同學(xué)通過Java代碼應(yīng)用JavaBean,同樣實(shí)現(xiàn)對成績的分析。5.4.6練習(xí)案例ch5.4ex_score頁面的測試效果如圖5-6至5-7所示:圖5-6初始界面圖5-7成績分析界面案例練習(xí):

ch5.4ex_score(成績分析)5.4.6練習(xí)案例ch5.4ex_scoreJSP開發(fā)案例教程5.5小結(jié)與練習(xí)本章小結(jié):介紹了JavaBean的創(chuàng)建和使用。JavaBean類在創(chuàng)建之后,可做為實(shí)體類組件使用,既能簡化應(yīng)用層的代碼,又能提高代碼的重用性。應(yīng)用JavaBean時,能以JSP動作元素聲明的方式來創(chuàng)建對象、給屬性賦值和讀取屬性值,也能在Java代碼片段中以常規(guī)的方式創(chuàng)建對象、給屬性賦值和讀取屬性值。在本章的案例ch5.4_guessNumber(猜數(shù)游戲)中,分別用以上2種方式實(shí)現(xiàn)了JavaBean對象的創(chuàng)建、給屬性賦值和讀取屬性值。5.5小結(jié)與練習(xí)填空題:(1)JavaBean類的類型必須是

類型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論