




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JavaWeb程序設計
——JavaBean與表單處理2主要內(nèi)容JavaBeanJavaBean的概念JavaBean的使用與生命周期表單處理3應用需求
在開發(fā)JSP網(wǎng)頁程序時,如果需要的程序功能已經(jīng)在其他的網(wǎng)頁程序中實現(xiàn)了,會考慮將已有程序代碼重復使用。解決程序代碼重復使用問題的方法有多種,比如:(1)將需要重復使用的代碼寫成子程序網(wǎng)頁,其他的網(wǎng)頁來引用這個網(wǎng)頁;(2)將重復使用的程序代碼保存在文本文件,利用include指令或者include動作元素,將其包含在網(wǎng)頁中。4外部文件:xxx.htmxxx.jspxxx.txtaaa.jspbbb.jspccc.jsp引用
主要問題:新的JSP網(wǎng)頁引用外部文件,將其嵌入到當前的網(wǎng)頁中,使得所使用的外部文件很難保證版本的一致。5(1)什么是JavaBean
JavaBean是一種Java類,它通過封裝屬性和方法成為具有獨立功能、可重復使用的、并且可與其他控件通信的組件對象。按照功能分,JavaBean可分為兩類:可視化的JavaBean:能夠?qū)⒔邮盏降臄?shù)據(jù)信息顯示在界面中,一般應用于桌面可視化編程中;非可視化的JavaBean:常用來封裝事務邏輯、數(shù)據(jù)庫操作等,通常為Web系統(tǒng)中的JavaBean。6useBean.classuseBean.classuseBean.class引用JavaBean的原始程序代碼useBean.java編譯為Java的類文件:useBean.classaaa.jspbbb.jspccc.jsp7JavaBean的應用特點:(1)通常用戶并不需要知道JavaBean內(nèi)部是如何實現(xiàn)的,而只需要知道提供了哪些方法和屬性;(2)規(guī)模較大的JSP應用系統(tǒng)非常依賴JavaBean組件,采用它們封裝所有包含運算邏輯的程序代碼,而頁面數(shù)據(jù)的輸出和顯示則由網(wǎng)頁程序來處理;(3)當JSP頁面需要JavaBean時,只需要對該組件直接引用,以達到程序代碼的重復使用、程序結(jié)構(gòu)簡化的目的。8JSP+JavaBeanWeb應用開發(fā)模式1)Model1模式(非MVC模式)在Model1開發(fā)模式中,JSP+JavaBean技術(shù)所組成的應用程序,JSP頁面不僅負責表示邏輯,也負責控制邏輯,而業(yè)務邏輯由JavaBean實現(xiàn)。該應用模式如下圖所示:9JSP+JavaBean的Model1模式客戶端(瀏覽器)JSP頁面JavaBean數(shù)據(jù)庫服務器請求響應10
在Model1模式中,將表現(xiàn)邏輯和控制邏輯全部耦合在了JSP頁面中,這種處理方式對于規(guī)模較小的Web工程項目是比較合適的。但是在開發(fā)規(guī)模較大的Web項目時,程序的流向是由一些能夠互相感知的頁面所決定。這樣,當頁面比較多時,很難把握清楚程序的流向;而且修改某一個頁面可能會影響到相關(guān)的其他頁面,使得程序的可伸縮性和健壯性不好。112)Model2模式(MVC模式)由于Model1開發(fā)模式的局限性,引入了三層模型,即Model2模式,也稱為MVC模式(Model-View-Controller)。該應用模式如下圖所示:12JSP+JavaBean的Model2模式客戶端(瀏覽器)視圖(JSP)數(shù)據(jù)庫服務器請求響應控制器(Servlet)Model(JavaBean)實例化13
在Model2模式中,包括三個部分:控制器(Control)、視圖(view)、模型(model)。其中,控制器負責程序的控制邏輯,一般由Servlet實現(xiàn);視圖負責表示邏輯,即數(shù)據(jù)的顯示,由JSP頁面實現(xiàn);模型部分實現(xiàn)業(yè)務邏輯,一般由JavaBean實現(xiàn)。
Model2模式是一種比較理想的開發(fā)模式,目前,Strutsframework對該模式做了支持和實現(xiàn)。14
標準的JavaBean類需要滿足以下3個條件:(1)JavaBean類必須包含無參的構(gòu)造函數(shù)。例如,一個JavaBean類:UseBean,則這個類必須包含publicUseBean()構(gòu)造函數(shù);(2)JavaBean類需要實現(xiàn)java.io.serializable接口。實現(xiàn)該接口的類的對象可以轉(zhuǎn)換為字節(jié)序列存儲在磁盤上,不需要特殊聲明implementSerializable,已經(jīng)默認實現(xiàn)了序列化;(2)JavaBean類15
(3)JavaBean類中必須有屬性接口,因為其屬性被定義為私有的,每個屬性都要有g(shù)et()和set()的屬性操作方法。例如:
publicclassuseBean{privateStringuserName;publicStringgetuserName(){returnuserName;}publicvoidsetuserName(StringuserName){this.userName=userName;}}16創(chuàng)建示例(Eclipse):
(1)在Eclipse開發(fā)環(huán)境中,可以為一個Web項目直接創(chuàng)建一個JavaBean類,如:17(2)在Eclipse開發(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個與JavaBean操作相關(guān)的動作元素:(1)調(diào)用JavaBean:<jsp:useBean><jsp:useBean>可以定義一個具有生存范圍,和具有唯一ID的JavaBean的實例:
<jsp:useBeanid=“name”class=“classname”scope=“page|request|session|application”/>
在執(zhí)行過程中,該動作元素首先會嘗試尋找在Scope范圍內(nèi)具有相同ID的實例,如果沒有就會自動創(chuàng)建一個新的JavaBean實例。21(2)訪問JavaBean的屬性:<jsp:getProperty>
<jsp:getProperty>可以獲取JavaBean的屬性值,并將其轉(zhuǎn)換為String類型。
<jsp:getPropertyname=“ID”
property=“propertyname”/>name代表已經(jīng)存在于一定范圍的JavaBean的實例,為通過<jsp:useBean>設定的ID值;
property為所具有的屬性。22(3)設置JavaBean的屬性:<jsp:setProperty>
<jsp:setProperty>用來對JavaBean設置一個或多個屬性值:
<jsp:setPropertyname=“ID”
last_syntax/>name代表已經(jīng)存在于一定范圍的JavaBean的實例,為通過<jsp:useBean>設定的ID值;
last_syntax代表3種不同的語法形式:
23①property=“*”
表示所有和Bean屬性名匹配的請求參數(shù)將被傳遞給相應屬性的set方法;②property=“propertyName”[param=“parameterName”]
指定采用某個請求參數(shù)作為Bean屬性的值;③property=“propertyName”
[value=“{string|<%=expression%>}]”
直接為Bean的屬性指定一個值;24
在C、C++、Java等程序設計語言中,所聲明的變量都是具有生命周期的,如在某一固定區(qū)域內(nèi)的“局部變量”,存在于程序的整個執(zhí)行周期中的“全局變量”。
JavaBean也是具有生命周期的,由于是運行在B/S結(jié)構(gòu)的Web應用程序中,其生命周期由<jsp:useBean>中的scope來設定:
page,request,session,applicationJavaBean的生命周期25page范圍的JavaBean的生命周期是最短的。該范圍的JavaBean實例存在于JSP頁面的運行期間,當頁面中的JSP程序代碼執(zhí)行完成,并把結(jié)果網(wǎng)頁傳送給客戶端后,則page范圍的JavaBean實例將會被清除。
例:創(chuàng)建一個具有計算訪問人數(shù)功能的JavaBean類Counter,并將其以page范圍應用在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訪問JavaBean的屬性28運行結(jié)果(刷新和重新打開瀏覽器,計數(shù)都不會增加):29(2)request范圍request范圍的JavaBean的生命周期與JSP程序中的request對象同步。例如:除了該網(wǎng)頁外,當程序通過forward動作元素將request對象傳送到下一個JSP程序時,JavaBean也將會隨著request對象送出。因此,由forward操作所串聯(lián)起來的JSP程序可以共享相同的JavaBean。(include動作元素包含的頁面也可共享JavaBean)例:request范圍的JavaBean的運行情況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動作元素31“request.jsp”文件:<body><jsp:useBeanid="count"scope="request"class="Bean.Counter"/>
您是request.jsp網(wǎng)頁的第<fontcolor=blue><jsp:getPropertyname="count"property="counter"/></font>位參觀者<br><%out.println("這是request.jsp網(wǎng)頁的計數(shù)器!!");%></body></html>32運行結(jié)果:33(3)session范圍session范圍的JavaBean的生命周期存在于一個使用者的會話期間。
例如:創(chuàng)建CounterSession.jsp,該頁面在usingCounter.jsp的基礎上將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運行結(jié)果(刷新頁面,則計數(shù)不斷增加):36運行結(jié)果(重新打開新的瀏覽器,則計數(shù)從頭開始):37application范圍的JavaBean的生命周期是最長的,它的生命周期是與整個網(wǎng)站服務器的運行是相當?shù)?,除非特意將它刪除。因此,只要有一個JSP頁面將JavaBean設置為application范圍,則在同一應用系統(tǒng)下的程序都可以通過這個JavaBean來交換信息。(4)application范圍38
例:將usingCounter.jsp頁面中的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運行結(jié)果:刷新頁面,則計數(shù)不斷增加;重新打開一個瀏覽器,計數(shù)繼續(xù)增加40主要內(nèi)容JavaBeanJavaBean的概念JavaBean的使用與生命周期表單處理41HTML表單與JSP
通常在Web程序中,采用標簽<form>構(gòu)成表單區(qū)塊,以獲取用戶輸入的數(shù)據(jù),并進行數(shù)據(jù)的處理,其過程如下所示:
42客戶端瀏覽器表單1表單2表單1表單2結(jié)果顯示用戶輸入數(shù)據(jù)XXX.jsp服務器端JSP程序處理用戶輸入的數(shù)據(jù)獲取表單數(shù)據(jù)發(fā)送處理結(jié)果XXX.jsp頁面43
在整個處理過程中,原始數(shù)據(jù)網(wǎng)頁、處理數(shù)據(jù)網(wǎng)頁和結(jié)果輸出網(wǎng)頁,可以是同一個JSP網(wǎng)頁文件或是不同的JSP文件,這要依據(jù)設計而定。(1)request與response對象在進行表單數(shù)據(jù)的處理過程中,經(jīng)常會用到request對象和response對象,進行數(shù)據(jù)的接收和發(fā)送。(2)Post和Get方法的差異前面介紹表單內(nèi)容的時候,經(jīng)常會用到標簽<form>的Method屬性,該屬性有兩種可能值:Get,Post.44
這兩種方式的差異主要在于數(shù)據(jù)的傳送方式上:
post是將所要傳送的數(shù)據(jù)包含在HTTP的頭文件中;
get是將數(shù)據(jù)直接串接在網(wǎng)站欄地址的后面;兩者都可以用Getparameter()方法取得傳送的數(shù)據(jù);因此,如果不想讓數(shù)據(jù)在傳送的過程中顯示出來的話,則可以選擇post方式。45例:使用JSP+JavaBean處理表單
showInfo.jsp頁面讓用戶輸入數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上海市安全員考試題庫及答案
- 2025-2030年中國金鹵燈行業(yè)十三五規(guī)劃與發(fā)展前景分析報告
- 2025-2030年中國辣椒紅色素市場運營狀況及發(fā)展前景預測報告
- 2025-2030年中國軟包裝復合膜行業(yè)運行動態(tài)及發(fā)展前景預測報告
- 2025-2030年中國超高頻RFID市場發(fā)展現(xiàn)狀規(guī)劃研究報告
- 2025-2030年中國船用液壓舵機行業(yè)運行狀況及發(fā)展趨勢分析報告
- 2025-2030年中國聚氯乙烯用阻燃劑行業(yè)運行態(tài)勢及投資戰(zhàn)略研究報告
- 2025-2030年中國納米二氧化鈦市場運行現(xiàn)狀及投資發(fā)展前景預測報告
- 2025-2030年中國男士化妝品市場規(guī)模分析及發(fā)展建議研究報告
- 2024-2025年第二學期學校教導處工作計劃(二)
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 二零二五年度博物館場地租賃與文物保護合作協(xié)議3篇
- 2025年春新人教版歷史七年級下冊全冊課件
- 2024年鐘山職業(yè)技術(shù)學院高職單招語文歷年參考題庫含答案解析
- 《汽車空調(diào)工作原理》課件
- 駱駝祥子-(一)-劇本
- 2024年鄭州黃河護理職業(yè)學院單招職業(yè)技能測試題庫及解析答案
- 魏晉南北朝時期中外文化的交流
- 漁業(yè)行業(yè)智能化海洋牧場養(yǎng)殖方案
- 活在課堂里 課件
評論
0/150
提交評論