Java Web程序開(kāi)發(fā)與分析課件:JavaBean與表單處理_第1頁(yè)
Java Web程序開(kāi)發(fā)與分析課件:JavaBean與表單處理_第2頁(yè)
Java Web程序開(kāi)發(fā)與分析課件:JavaBean與表單處理_第3頁(yè)
Java Web程序開(kāi)發(fā)與分析課件:JavaBean與表單處理_第4頁(yè)
Java Web程序開(kāi)發(fā)與分析課件:JavaBean與表單處理_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JavaWeb程序設(shè)計(jì)

——JavaBean與表單處理2主要內(nèi)容JavaBeanJavaBean的概念JavaBean的使用與生命周期表單處理3應(yīng)用需求

在開(kāi)發(fā)JSP網(wǎng)頁(yè)程序時(shí),如果需要的程序功能已經(jīng)在其他的網(wǎng)頁(yè)程序中實(shí)現(xiàn)了,會(huì)考慮將已有程序代碼重復(fù)使用。解決程序代碼重復(fù)使用問(wèn)題的方法有多種,比如:(1)將需要重復(fù)使用的代碼寫成子程序網(wǎng)頁(yè),其他的網(wǎng)頁(yè)來(lái)引用這個(gè)網(wǎng)頁(yè);(2)將重復(fù)使用的程序代碼保存在文本文件,利用include指令或者include動(dòng)作元素,將其包含在網(wǎng)頁(yè)中。4外部文件:xxx.htmxxx.jspxxx.txtaaa.jspbbb.jspccc.jsp引用

主要問(wèn)題:新的JSP網(wǎng)頁(yè)引用外部文件,將其嵌入到當(dāng)前的網(wǎng)頁(yè)中,使得所使用的外部文件很難保證版本的一致。5(1)什么是JavaBean

JavaBean是一種Java類,它通過(guò)封裝屬性和方法成為具有獨(dú)立功能、可重復(fù)使用的、并且可與其他控件通信的組件對(duì)象。按照功能分,JavaBean可分為兩類:可視化的JavaBean:能夠?qū)⒔邮盏降臄?shù)據(jù)信息顯示在界面中,一般應(yīng)用于桌面可視化編程中;非可視化的JavaBean:常用來(lái)封裝事務(wù)邏輯、數(shù)據(jù)庫(kù)操作等,通常為Web系統(tǒng)中的JavaBean。6useBean.classuseBean.classuseBean.class引用JavaBean的原始程序代碼useBean.java編譯為Java的類文件:useBean.classaaa.jspbbb.jspccc.jsp7JavaBean的應(yīng)用特點(diǎn):(1)通常用戶并不需要知道JavaBean內(nèi)部是如何實(shí)現(xiàn)的,而只需要知道提供了哪些方法和屬性;(2)規(guī)模較大的JSP應(yīng)用系統(tǒng)非常依賴JavaBean組件,采用它們封裝所有包含運(yùn)算邏輯的程序代碼,而頁(yè)面數(shù)據(jù)的輸出和顯示則由網(wǎng)頁(yè)程序來(lái)處理;(3)當(dāng)JSP頁(yè)面需要JavaBean時(shí),只需要對(duì)該組件直接引用,以達(dá)到程序代碼的重復(fù)使用、程序結(jié)構(gòu)簡(jiǎn)化的目的。8JSP+JavaBeanWeb應(yīng)用開(kāi)發(fā)模式1)Model1模式(非MVC模式)在Model1開(kāi)發(fā)模式中,JSP+JavaBean技術(shù)所組成的應(yīng)用程序,JSP頁(yè)面不僅負(fù)責(zé)表示邏輯,也負(fù)責(zé)控制邏輯,而業(yè)務(wù)邏輯由JavaBean實(shí)現(xiàn)。該應(yīng)用模式如下圖所示:9JSP+JavaBean的Model1模式客戶端(瀏覽器)JSP頁(yè)面JavaBean數(shù)據(jù)庫(kù)服務(wù)器請(qǐng)求響應(yīng)10

在Model1模式中,將表現(xiàn)邏輯和控制邏輯全部耦合在了JSP頁(yè)面中,這種處理方式對(duì)于規(guī)模較小的Web工程項(xiàng)目是比較合適的。但是在開(kāi)發(fā)規(guī)模較大的Web項(xiàng)目時(shí),程序的流向是由一些能夠互相感知的頁(yè)面所決定。這樣,當(dāng)頁(yè)面比較多時(shí),很難把握清楚程序的流向;而且修改某一個(gè)頁(yè)面可能會(huì)影響到相關(guān)的其他頁(yè)面,使得程序的可伸縮性和健壯性不好。112)Model2模式(MVC模式)由于Model1開(kāi)發(fā)模式的局限性,引入了三層模型,即Model2模式,也稱為MVC模式(Model-View-Controller)。該應(yīng)用模式如下圖所示:12JSP+JavaBean的Model2模式客戶端(瀏覽器)視圖(JSP)數(shù)據(jù)庫(kù)服務(wù)器請(qǐng)求響應(yīng)控制器(Servlet)Model(JavaBean)實(shí)例化13

在Model2模式中,包括三個(gè)部分:控制器(Control)、視圖(view)、模型(model)。其中,控制器負(fù)責(zé)程序的控制邏輯,一般由Servlet實(shí)現(xiàn);視圖負(fù)責(zé)表示邏輯,即數(shù)據(jù)的顯示,由JSP頁(yè)面實(shí)現(xiàn);模型部分實(shí)現(xiàn)業(yè)務(wù)邏輯,一般由JavaBean實(shí)現(xiàn)。

Model2模式是一種比較理想的開(kāi)發(fā)模式,目前,Strutsframework對(duì)該模式做了支持和實(shí)現(xiàn)。14

標(biāo)準(zhǔn)的JavaBean類需要滿足以下3個(gè)條件:(1)JavaBean類必須包含無(wú)參的構(gòu)造函數(shù)。例如,一個(gè)JavaBean類:UseBean,則這個(gè)類必須包含publicUseBean()構(gòu)造函數(shù);(2)JavaBean類需要實(shí)現(xiàn)java.io.serializable接口。實(shí)現(xiàn)該接口的類的對(duì)象可以轉(zhuǎn)換為字節(jié)序列存儲(chǔ)在磁盤上,不需要特殊聲明implementSerializable,已經(jīng)默認(rèn)實(shí)現(xiàn)了序列化;(2)JavaBean類15

(3)JavaBean類中必須有屬性接口,因?yàn)槠鋵傩员欢x為私有的,每個(gè)屬性都要有g(shù)et()和set()的屬性操作方法。例如:

publicclassuseBean{privateStringuserName;publicStringgetuserName(){returnuserName;}publicvoidsetuserName(StringuserName){this.userName=userName;}}16創(chuàng)建示例(Eclipse):

(1)在Eclipse開(kāi)發(fā)環(huán)境中,可以為一個(gè)Web項(xiàng)目直接創(chuàng)建一個(gè)JavaBean類,如:17(2)在Eclipse開(kāi)發(fā)環(huán)境中,可以直接選擇:

Source->GenerateGettersandSetters

創(chuàng)建JavaBean類的方法。18publicclassUseBean{privateStringuserName;privateStringname;PublicUseBean(){}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}}Eclipse創(chuàng)建的方法19主要內(nèi)容JavaBeanJavaBean的概念JavaBean的使用與生命周期表單處理20

在JSP中,有3個(gè)與JavaBean操作相關(guān)的動(dòng)作元素:(1)調(diào)用JavaBean:<jsp:useBean><jsp:useBean>可以定義一個(gè)具有生存范圍,和具有唯一ID的JavaBean的實(shí)例:

<jsp:useBeanid=“name”class=“classname”scope=“page|request|session|application”/>

在執(zhí)行過(guò)程中,該動(dòng)作元素首先會(huì)嘗試尋找在Scope范圍內(nèi)具有相同ID的實(shí)例,如果沒(méi)有就會(huì)自動(dòng)創(chuàng)建一個(gè)新的JavaBean實(shí)例。21(2)訪問(wèn)JavaBean的屬性:<jsp:getProperty>

<jsp:getProperty>可以獲取JavaBean的屬性值,并將其轉(zhuǎn)換為String類型。

<jsp:getPropertyname=“ID”

property=“propertyname”/>name代表已經(jīng)存在于一定范圍的JavaBean的實(shí)例,為通過(guò)<jsp:useBean>設(shè)定的ID值;

property為所具有的屬性。22(3)設(shè)置JavaBean的屬性:<jsp:setProperty>

<jsp:setProperty>用來(lái)對(duì)JavaBean設(shè)置一個(gè)或多個(gè)屬性值:

<jsp:setPropertyname=“ID”

last_syntax/>name代表已經(jīng)存在于一定范圍的JavaBean的實(shí)例,為通過(guò)<jsp:useBean>設(shè)定的ID值;

last_syntax代表3種不同的語(yǔ)法形式:

23①property=“*”

表示所有和Bean屬性名匹配的請(qǐng)求參數(shù)將被傳遞給相應(yīng)屬性的set方法;②property=“propertyName”[param=“parameterName”]

指定采用某個(gè)請(qǐng)求參數(shù)作為Bean屬性的值;③property=“propertyName”

[value=“{string|<%=expression%>}]”

直接為Bean的屬性指定一個(gè)值;24

在C、C++、Java等程序設(shè)計(jì)語(yǔ)言中,所聲明的變量都是具有生命周期的,如在某一固定區(qū)域內(nèi)的“局部變量”,存在于程序的整個(gè)執(zhí)行周期中的“全局變量”。

JavaBean也是具有生命周期的,由于是運(yùn)行在B/S結(jié)構(gòu)的Web應(yīng)用程序中,其生命周期由<jsp:useBean>中的scope來(lái)設(shè)定:

page,request,session,applicationJavaBean的生命周期25page范圍的JavaBean的生命周期是最短的。該范圍的JavaBean實(shí)例存在于JSP頁(yè)面的運(yùn)行期間,當(dāng)頁(yè)面中的JSP程序代碼執(zhí)行完成,并把結(jié)果網(wǎng)頁(yè)傳送給客戶端后,則page范圍的JavaBean實(shí)例將會(huì)被清除。

例:創(chuàng)建一個(gè)具有計(jì)算訪問(wèn)人數(shù)功能的JavaBean類Counter,并將其以page范圍應(yīng)用在JSP程序中。(1)page范圍26packageBean;publicclassCounter{privateintCounter=0;publicvoidsetCounter(intcount){Counter=count;}publicintgetCounter(){return++Counter;}}JavaBean:Counter類所在包名JavaBean的屬性27<body><jsp:useBeanid="count"scope="page"class="Bean.Counter"/><fontcolor="red">演示:page</font><br><br>您是本站第

<fontcolor=blue>

<jsp:getPropertyname="count"property="counter"/></font>位參觀者</body></html>JSP文件:usingCounter.jsp調(diào)用JavaBean訪問(wèn)JavaBean的屬性28運(yùn)行結(jié)果(刷新和重新打開(kāi)瀏覽器,計(jì)數(shù)都不會(huì)增加):29(2)request范圍request范圍的JavaBean的生命周期與JSP程序中的request對(duì)象同步。例如:除了該網(wǎng)頁(yè)外,當(dāng)程序通過(guò)forward動(dòng)作元素將request對(duì)象傳送到下一個(gè)JSP程序時(shí),JavaBean也將會(huì)隨著request對(duì)象送出。因此,由forward操作所串聯(lián)起來(lái)的JSP程序可以共享相同的JavaBean。(include動(dòng)作元素包含的頁(yè)面也可共享JavaBean)例:request范圍的JavaBean的運(yùn)行情況30<body><jsp:useBeanid="count"scope="request"class="Bean.Counter"/><fontcolor="red">request范圍的JavaBean:Counter</font><br>

您是本站(setRequest.jsp)第<fontcolor=blue>

<jsp:getPropertyname="count"property="counter"/></font>位參觀者

<jsp:includepage="request.jsp"/></body></html>JavaBean:Counter類(同上例)

“setRequest.jsp”文件:Include動(dòng)作元素31“request.jsp”文件:<body><jsp:useBeanid="count"scope="request"class="Bean.Counter"/>

您是request.jsp網(wǎng)頁(yè)的第<fontcolor=blue><jsp:getPropertyname="count"property="counter"/></font>位參觀者<br><%out.println("這是request.jsp網(wǎng)頁(yè)的計(jì)數(shù)器!!");%></body></html>32運(yùn)行結(jié)果:33(3)session范圍session范圍的JavaBean的生命周期存在于一個(gè)使用者的會(huì)話期間。

例如:創(chuàng)建CounterSession.jsp,該頁(yè)面在usingCounter.jsp的基礎(chǔ)上將scope改為:session34“CounterSession.jsp”文件:<body><jsp:useBeanid="count"scope="session"class="Bean.Counter"/><fontcolor="red">演示:page</font><br><br>您是本站第

<fontcolor=blue><jsp:getPropertyname="count"property="counter"/></font>位參觀者</body></html>35運(yùn)行結(jié)果(刷新頁(yè)面,則計(jì)數(shù)不斷增加):36運(yùn)行結(jié)果(重新打開(kāi)新的瀏覽器,則計(jì)數(shù)從頭開(kāi)始):37application范圍的JavaBean的生命周期是最長(zhǎng)的,它的生命周期是與整個(gè)網(wǎng)站服務(wù)器的運(yùn)行是相當(dāng)?shù)模翘匾鈱⑺鼊h除。因此,只要有一個(gè)JSP頁(yè)面將JavaBean設(shè)置為application范圍,則在同一應(yīng)用系統(tǒng)下的程序都可以通過(guò)這個(gè)JavaBean來(lái)交換信息。(4)application范圍38

例:將usingCounter.jsp頁(yè)面中的JavaBean的范圍改為:application.

<body><jsp:useBeanid="count"scope=“application"class="Bean.Counter"/><fontcolor="red">演示:page</font><br><br>您是本站第

<fontcolor=blue><jsp:getPropertyname="count"property="counter"/></font>位參觀者</body></html>39運(yùn)行結(jié)果:刷新頁(yè)面,則計(jì)數(shù)不斷增加;重新打開(kāi)一個(gè)瀏覽器,計(jì)數(shù)繼續(xù)增加40主要內(nèi)容JavaBeanJavaBean的概念JavaBean的使用與生命周期表單處理41HTML表單與JSP

通常在Web程序中,采用標(biāo)簽<form>構(gòu)成表單區(qū)塊,以獲取用戶輸入的數(shù)據(jù),并進(jìn)行數(shù)據(jù)的處理,其過(guò)程如下所示:

42客戶端瀏覽器表單1表單2表單1表單2結(jié)果顯示用戶輸入數(shù)據(jù)XXX.jsp服務(wù)器端JSP程序處理用戶輸入的數(shù)據(jù)獲取表單數(shù)據(jù)發(fā)送處理結(jié)果XXX.jsp頁(yè)面43

在整個(gè)處理過(guò)程中,原始數(shù)據(jù)網(wǎng)頁(yè)、處理數(shù)據(jù)網(wǎng)頁(yè)和結(jié)果輸出網(wǎng)頁(yè),可以是同一個(gè)JSP網(wǎng)頁(yè)文件或是不同的JSP文件,這要依據(jù)設(shè)計(jì)而定。(1)request與response對(duì)象在進(jìn)行表單數(shù)據(jù)的處理過(guò)程中,經(jīng)常會(huì)用到request對(duì)象和response對(duì)象,進(jìn)行數(shù)據(jù)的接收和發(fā)送。(2)Post和Get方法的差異前面介紹表單內(nèi)容的時(shí)候,經(jīng)常會(huì)用到標(biāo)簽<form>的Method屬性,該屬性有兩種可能值:Get,Post.44

這兩種方式的差異主要在于數(shù)據(jù)的傳送方式上:

post是將所要傳送的數(shù)據(jù)包含在HTTP的頭文件中;

get是將數(shù)據(jù)直接串接在網(wǎng)站欄地址的后面;兩者都可以用Getparameter()方法取得傳送的數(shù)據(jù);因此,如果不想讓數(shù)據(jù)在傳送的過(guò)程中顯示出來(lái)的話,則可以選擇post方式。45例:使用JSP+JavaBean處理表單

showInfo.jsp頁(yè)面讓用戶輸入數(shù)據(jù),

JavaBean:show.java封裝數(shù)據(jù)的處理

showInfo.jsp<body><jsp:useBeanid="user"scope="session"class="Bean.show"/><jsp:setPropertyname="user"property="*"/><%if(request.getParameter("name")==null){%><formname="form1"

method="post"action="showInfo.jsp"><p>姓名:<inputtype="text"name="name"size="15"maxlength="15"></p><p>密碼:<inputtype="password"name="password"size="15"maxlength="15"></p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論