第6章-MVC模式_第1頁(yè)
第6章-MVC模式_第2頁(yè)
第6章-MVC模式_第3頁(yè)
第6章-MVC模式_第4頁(yè)
第6章-MVC模式_第5頁(yè)
已閱讀5頁(yè),還剩28頁(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)介

1、JSP實(shí)用教程(第三版)配合JSP實(shí)用教程(第三版)例例子源代碼子源代碼一起一起使用使用Power Point 制作 張躍平 耿祥義第第6章章 MVC模式模式2022-7-62 本章主要內(nèi)容本章主要內(nèi)容6.1 MVC模式介紹模式介紹6.2 JSP中的中的MVC模式模式6.3 模型的生命周期與視圖更新模型的生命周期與視圖更新6.4 MVC模式的簡(jiǎn)單實(shí)例模式的簡(jiǎn)單實(shí)例2022-7-63必要的準(zhǔn)備工作必要的準(zhǔn)備工作 本章將使用javax.servlet.http包中的類(lèi),javax.servlet.http包不在JDK的核心類(lèi)庫(kù)中,因此需要將Tomcat安裝目錄lib子目錄中的servlet-api

2、.jar文件復(fù)制到Tomcat服務(wù)器所使用的JDK的擴(kuò)展目錄中,比如,復(fù)制到D:jdk1.7jrelibext中本章使用的Web服務(wù)目錄是ch6,ch6是在Tomcat安裝目錄的webapps目錄下建立的Web服務(wù)目錄。另外,需要在當(dāng)前web服務(wù)目錄下建立如下的目錄結(jié)構(gòu):ch6WEB-INFclasses本章的Servlet類(lèi)的包名為myservlet.control,那么在classes下建立子目錄:myservletcontrol;Javabean類(lèi)的包名為mybean.data,那么在classes下建立子目錄:mybeandata,如圖如圖6.1所示所示2022-7-646.1 MVC

3、模式介紹模式介紹 MVC是一種通過(guò)三個(gè)不同部分構(gòu)造一個(gè)軟件或組件的理想辦法:1. 模型(模型(Model) 用于存儲(chǔ)存儲(chǔ)數(shù)據(jù)的對(duì)象。2. 視圖(視圖(View) 向控制器提交提交所須數(shù)據(jù)、顯示顯示模型中的數(shù)據(jù)。3. 控制器(控制器(Controller) 負(fù)責(zé)具體的業(yè)務(wù)邏輯操作,即控制器根據(jù)視圖提出的要求對(duì)數(shù)據(jù)做出(商業(yè))處理處理,并將有關(guān)結(jié)果存儲(chǔ)到模型中,并負(fù)責(zé)讓模型和視圖進(jìn)行必要的交互,當(dāng)模型中的數(shù)據(jù)變化時(shí),讓視圖更新顯示。2022-7-656.2 JSP中的中的MVC模式模式模型(模型(Model) 一個(gè)或多個(gè)一個(gè)或多個(gè)Javabean對(duì)象,對(duì)象,用于存儲(chǔ)數(shù)據(jù)。Javabean主要提供簡(jiǎn)

4、單的setXxx方法和getXxx方法,在這些方法中不涉及對(duì)數(shù)據(jù)的具體處理細(xì)節(jié),以便增強(qiáng)模型的通用性。視圖(視圖(View) 一個(gè)或多個(gè)一個(gè)或多個(gè)JSP頁(yè)面,頁(yè)面,其作用是向控制器提交必要的數(shù)據(jù)和顯示數(shù)據(jù)。JSP頁(yè)面可以使用HTML標(biāo)記、Javabean標(biāo)記以及Java程序片或Java表達(dá)式來(lái)顯示數(shù)據(jù)??刂破鳎刂破鳎–ontroller) 一個(gè)或多個(gè)一個(gè)或多個(gè)servlet對(duì)象,對(duì)象,根據(jù)視圖提交的要求進(jìn)行數(shù)據(jù)處理操作,并將有關(guān)的結(jié)果存儲(chǔ)到Javabean中,然后servlet使用轉(zhuǎn)發(fā)或重定向的方式請(qǐng)求視圖中的某個(gè)JSP頁(yè)面顯示數(shù)據(jù),比如讓某個(gè)JSP頁(yè)面通過(guò)使用Javabean標(biāo)記、Java

5、程序片或Java表達(dá)式顯示控制器存儲(chǔ)在Javabean中的數(shù)據(jù)。MVC模式的結(jié)構(gòu)模式的結(jié)構(gòu)如圖如圖6.2所示所示。2022-7-666.3 模型的生命周期與視圖更新模型的生命周期與視圖更新 在JSP+Javabean模式中,由JSP頁(yè)面通過(guò)使用useBean標(biāo)記: 創(chuàng)建Javabean。 在JSP中的MVC模式中,也可以由控制器servet創(chuàng)建Javabean。在JSP中的MVC模式中,servet創(chuàng)建的Javabean也涉及到生命周期(有效期限),生命周期分為request、session和application。 以下假設(shè)創(chuàng)建Javabean的類(lèi)的名字是BeanClass,該類(lèi)的包名為us

6、er.yourbean。以下分三種情形給予討論。2022-7-6 6.3.1 request周期的周期的Javabean1Javabean的創(chuàng)建的創(chuàng)建(1)用)用BeanClass類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建bean對(duì)象,例如:對(duì)象,例如: BeanClass bean=new BeanClass();(2)將所創(chuàng)建的)將所創(chuàng)建的bean對(duì)象存放到對(duì)象存放到request中,并指定查找該中,并指定查找該bean的關(guān)鍵字:的關(guān)鍵字: request.setAttribute(keyWord,bean);2視圖更新視圖更新 servlet使用轉(zhuǎn)發(fā)方式讓JSP頁(yè)面,顯示bean中的數(shù)據(jù)。

7、3. jsp頁(yè)面可以使用頁(yè)面可以使用 或 來(lái)使用bean.2022-7-6 6.3.2 session周期的周期的Javabean1Javabean的創(chuàng)建的創(chuàng)建(1)用)用BeanClass類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建bean對(duì)象,例如:對(duì)象,例如: BeanClass bean=new BeanClass();(2)將所創(chuàng)建的)將所創(chuàng)建的bean對(duì)象存放到對(duì)象存放到session中,并指定查找該中,并指定查找該bean的關(guān)鍵字:的關(guān)鍵字: session.setAttribute(keyWord,bean);2視圖更新視圖更新 servlet使用轉(zhuǎn)發(fā)或重定向方法讓JSP頁(yè)面來(lái)顯示

8、bean中的數(shù)據(jù)3. jsp頁(yè)面可以使用頁(yè)面可以使用 或 來(lái)使用bean. 2022-7-6 6.3.3 application周期的周期的Javabean1Javabean的創(chuàng)建的創(chuàng)建(1)用)用BeanClass類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建類(lèi)的某個(gè)構(gòu)造方法創(chuàng)建bean對(duì)象,例如:對(duì)象,例如: BeanClass bean=new BeanClass();(2)將所創(chuàng)建的)將所創(chuàng)建的bean對(duì)象存放到對(duì)象存放到appication中,并指定查找該中,并指定查找該bean的關(guān)鍵字:的關(guān)鍵字: getServletContext().setAttribute(keyWord,bean);2視圖更新視圖更

9、新 servlet使用轉(zhuǎn)發(fā)或重定向方法讓JSP頁(yè)面來(lái)顯示bean中的數(shù)據(jù)3. jsp頁(yè)面可以使用頁(yè)面可以使用 或 來(lái)使用bean.2022-7-6106.4 MVC模式的簡(jiǎn)單實(shí)例模式的簡(jiǎn)單實(shí)例 本節(jié)結(jié)合幾個(gè)簡(jiǎn)單的實(shí)例體現(xiàn)本節(jié)結(jié)合幾個(gè)簡(jiǎn)單的實(shí)例體現(xiàn)MVC三個(gè)部分的設(shè)計(jì)與三個(gè)部分的設(shè)計(jì)與實(shí)現(xiàn)。實(shí)現(xiàn)。 6.4.1 Javabean和和Servlet的管理的管理2022-7-611按著本章的約定按著本章的約定1將Javabean類(lèi)和Servlet類(lèi)源文件分別保存到Web服務(wù)目錄的下述目錄中:WEB-INFclassesmybeandataWEB-INFclassesmyservletcontrol2然

10、后進(jìn)入包名的父目錄classes,按如下格式分別編譯Javabean和sevlet的源文件:classes javac mybeandataJavabean的源文件classes javac myservletcontrolservlet的源文件2022-7-6 6.4.2 計(jì)算等差、等比數(shù)列的和計(jì)算等差、等比數(shù)列的和 例子1設(shè)計(jì)一個(gè)wb應(yīng)用,該web應(yīng)用提供兩個(gè)JSP頁(yè)面,一個(gè)頁(yè)面使得用戶可以輸入等差數(shù)列的首項(xiàng)、公差、和求和項(xiàng)數(shù)以及等比數(shù)列首項(xiàng)、公比和求和項(xiàng)數(shù); 另一個(gè)頁(yè)面可以顯示等差數(shù)列和等比數(shù)列的求和結(jié)果。 web應(yīng)用提供一個(gè)名字為computerSum的servlet:computer

11、Sum負(fù)責(zé)計(jì)算等差數(shù)列和等比數(shù)列的和,然后將有關(guān)數(shù)據(jù)存儲(chǔ)到Javabean中. web應(yīng)用提供的Javabean負(fù)責(zé)刻畫(huà)等差數(shù)列和等比數(shù)列,提供簡(jiǎn)單的獲取數(shù)據(jù)和修改數(shù)據(jù)的方法。2022-7-613 例子例子6_16_1 例子1中涉及到的JSP頁(yè)面均保存到Web服務(wù)目錄ch6中,有關(guān)Javabean和servlet源文件的保存于編譯見(jiàn)剛剛介紹的6.4.1。2022-7-614 例子例子6_16_1中的中的web.xmlweb.xml 根據(jù)本例子1中使用的servlet的名字及相關(guān)類(lèi),Web服務(wù)目錄ch6的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)見(jiàn)5

12、.1.2). computeSum myservlet.control.Example6_1_Servlet computerSum /computeSum2022-7-615 例子例子6_16_1中的模型中的模型l 模型(Javabean) Javabean模型Example6_1_Bean.java中的getXxx和setXxx方法不涉及對(duì)數(shù)據(jù)的具體處理細(xì)節(jié),以便增強(qiáng)模型的通用性。比如,setSum(double s)僅僅將參數(shù)s的值賦給屬性sum,因此,模型即可以存儲(chǔ)等差數(shù)列的和也可以存儲(chǔ)等比數(shù)列的和。 如果setSum(double s)參與具體的計(jì)算,比如,計(jì)算等差數(shù)列的和,然后將和

13、賦給屬性sum,那么該模型就不能存儲(chǔ)等比數(shù)列的和,減弱了模型的通用性。在本例子中Example6_1_Bean創(chuàng)建的Javabean模型的id是seriesData,scope取值是request。2022-7-616 例子例子6_16_1中的中的視圖(視圖(JSP頁(yè)面)頁(yè)面)l 視圖(視圖(JSP頁(yè)面)頁(yè)面) 視 圖 部 分 由 2 個(gè) J S P 頁(yè) 面 構(gòu) 成 , 其 中example6_1.jsp頁(yè)面負(fù)責(zé)提供輸入數(shù)據(jù)的視圖,即用戶可以在該頁(yè)面輸入數(shù)列的首項(xiàng),公差(公比)和求和項(xiàng)數(shù),然后將數(shù)據(jù)提交給名字是computeSum的servlet。 computeSum負(fù)責(zé)計(jì)算數(shù)列的和,并將結(jié)

14、果存儲(chǔ)到id為seriesData的Javabean數(shù)據(jù)模型中,然后請(qǐng)求視圖中的example6_1_show.jsp顯示數(shù)據(jù)模型seriesData中的數(shù)據(jù)。example6_1.jsp和example6_1_show.jsp的效果如圖6.3(a)和6.3(b)。2022-7-617 例子例子6_16_1中的控制器中的控制器l 控制器(控制器(servlet) Example6_1_Sevlet負(fù)責(zé)創(chuàng)建名字是computeSum的servlet(見(jiàn)例子1前面web.xml文件的有關(guān)內(nèi)容)。 名字為computeSum的servlet控制器使用doPost方法計(jì)算等差數(shù)列的和;使用doGet方

15、法計(jì)算等比數(shù)列的和,并將結(jié)果存放到id是seriesData的Javabean數(shù)據(jù)模型中,然后用轉(zhuǎn)發(fā)的方法請(qǐng)求example6_1_show.jsp顯示seriesData中的數(shù)據(jù)。2022-7-6 6.4.3 簡(jiǎn)單的計(jì)算器簡(jiǎn)單的計(jì)算器 例子2設(shè)計(jì)一個(gè)Web應(yīng)用,只有一個(gè)JSP頁(yè)面example6_2.jsp、一個(gè)Javabean和一個(gè)servlet。 JSP頁(yè)面example6_2.jsp提供一個(gè)表單,用戶可以通過(guò)表單輸入兩個(gè)數(shù)和算符號(hào)提交給servlet控制器。 Javabean負(fù)責(zé)存儲(chǔ)運(yùn)算數(shù)、運(yùn)算符號(hào)和運(yùn)算結(jié)果. servlet控制器負(fù)責(zé)運(yùn)算,將結(jié)果存儲(chǔ)在Javabean中,并負(fù)責(zé)請(qǐng)求J

16、SP頁(yè)面example6_2.jsp顯示Javanean中的數(shù)據(jù)。2022-7-619 例子例子6_26_2 例子2中涉及到的JSP頁(yè)面均保存到Web服務(wù)目錄ch6中,有關(guān)Javabean和servlet源文件的保存于編譯見(jiàn)剛剛介紹的6.4.1。2022-7-620 例子例子6_26_2中的中的web.xmlweb.xml 根據(jù)本例子2中使用的servlet的名字及相關(guān)類(lèi),Web服務(wù)目錄ch6的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)見(jiàn)5.1.2). compute myservlet.control.Example6_2_Servlet com

17、pute /compute2022-7-621 例子例子6_26_2中的模型中的模型 模型(Javabean) Example6_2_Bean.java模型中的getXXX和setXXX方法可以顯示和修改模型中的數(shù)據(jù),但不參與數(shù)據(jù)的處理。在本例子中Example6_2_Bean創(chuàng)建的Javabean模型的id是digitBean,scope取值是session。2022-7-622 例子例子6_26_2中的中的視圖(視圖(JSP頁(yè)面頁(yè)面)視圖(視圖(JSP頁(yè)面)頁(yè)面) 視圖部分由一個(gè)example6_2.jsp頁(yè)面構(gòu)成,該頁(yè)面負(fù)責(zé)提供輸入和顯示數(shù)據(jù)的視圖。用戶可以在該頁(yè)面輸入?yún)⑴c運(yùn)算的數(shù)據(jù),然

18、后將數(shù)據(jù)提交給名字是compute的pute負(fù)責(zé)計(jì)算四則運(yùn)算的結(jié)果,并將結(jié)果存儲(chǔ)到id為digitBean的Javabean數(shù)據(jù)模型中,然后請(qǐng)求視圖example6_2.jsp顯示數(shù)據(jù)模型digitBean中的數(shù)據(jù)。example6_2.jsp的效果如圖6.4。2022-7-623 例子例子6_26_2中的控制器中的控制器控制器(控制器(servlet) Example6_2_Sevlet負(fù)責(zé)創(chuàng)建名字是compute的servlet,名字為compute的servlet控制器負(fù)責(zé)計(jì)算四則運(yùn)算的結(jié)果,并將結(jié)果存放在id是digitBean的Javabean數(shù)據(jù)模型中,然后用

19、重定向的方法,請(qǐng)求example6_2.jsp顯示digitBean中的數(shù)據(jù)。6.6 小結(jié)2022-7-624MVC模式的核心思想是有效的組合“視圖”、“模型”和“控制器”。在JSP 技術(shù)中,視圖是一個(gè)或多個(gè)JSP頁(yè)面,其作用主要是向控制器提交必要的數(shù)據(jù)和為模型提供數(shù)據(jù)顯示;模型是一個(gè)或多個(gè)JavaBean對(duì)象,用于存儲(chǔ)數(shù)據(jù);控制器是一個(gè)或多個(gè)servlet對(duì)象,根據(jù)視圖提交的要求進(jìn)行數(shù)據(jù)處理操作,并將有關(guān)的結(jié)果存儲(chǔ)到Javabean中,然后servlet使用重定向方式請(qǐng)求視圖中的某個(gè)JSP頁(yè)面更新顯示。在在MVC模式中,模型也可以由控制器負(fù)責(zé)創(chuàng)建模式中,模型也可以由控制器負(fù)責(zé)創(chuàng)建和初始化和初始化2022-7-625 片尾片尾2022-7-626 圖6.1返回返回2022-7-627 圖6.2返回返回2022-7-628 圖6.3a返回返回2022-7-629 圖6.3b返回返回2022-7-630 圖6.4 返回返回 鏈接使用鏈接使用6.4.1 Javabean和和Servlet的管理的管理2022-7-631按著本章的約定按著本章的約定1將Javabean類(lèi)和Servlet類(lèi)源文件分別保存到Web服務(wù)目錄

溫馨提示

  • 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)論