第7章 JavaBean和表單處理.ppt_第1頁
第7章 JavaBean和表單處理.ppt_第2頁
第7章 JavaBean和表單處理.ppt_第3頁
第7章 JavaBean和表單處理.ppt_第4頁
第7章 JavaBean和表單處理.ppt_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1,第七章JavaBean與表單處理,2,JSP程序開發(fā)模式,單純的JSP頁面編程在單純的JSP編程模式下,通過應(yīng)用JSP中的腳本標(biāo)志,可直接在JSP頁面中實現(xiàn)各種功能。這種模式很容易實現(xiàn)。缺點:因為將大部分的Java代碼與HTML代碼混淆在一起,會給程序的維護(hù)和調(diào)試帶來很多的困難,而且對于整個程序的結(jié)構(gòu)更是無從談起。單純的JSP頁面編程模式是無法應(yīng)用到大型、中型甚至小型的JSPWeb應(yīng)用程序開發(fā)中。,3,JSP程序開發(fā)模式,JSP+JavaBean編程該模式是JSP程序開發(fā)經(jīng)典設(shè)計模式之一,適合小型或中型網(wǎng)站的開發(fā)。利用JavaBean技術(shù),可以很容易地完成一些業(yè)務(wù)邏輯上的操作,例如數(shù)據(jù)庫的連接、用戶登錄與注銷等。JavaBean是一個遵循了一定規(guī)則的Java類,在程序的開發(fā)中,將要進(jìn)行的業(yè)務(wù)邏輯封裝到這個類中,在JSP頁面中通過動作標(biāo)簽來調(diào)用這個類,從而執(zhí)行這個業(yè)務(wù)邏輯。此時的JSP除了負(fù)責(zé)部分流程的控制外,大部分用來顯示頁面,而JavaBean則負(fù)責(zé)業(yè)務(wù)邏輯的處理。下面將通過一個流程圖說明該模式對客戶端的請求進(jìn)行處理的過程。,4,JSP+JavaBean編程,客戶端,帶有JSP引擎的Web服務(wù)器,用戶通過客戶端瀏覽器請求服務(wù)器,服務(wù)器將最終的結(jié)果返回給客戶端瀏覽器進(jìn)行顯示,JSP頁面,JavaBean,業(yè)務(wù)邏輯,數(shù)據(jù)庫,在JavaBean中連接及操作數(shù)據(jù)庫,或?qū)崿F(xiàn)其他業(yè)務(wù)邏輯,在JSP頁面中調(diào)用JavaBean,服務(wù)器接收用戶請求后調(diào)用JSP頁,JavaBean將執(zhí)行的結(jié)果返回JSP頁面,服務(wù)器讀取JSP頁面中的內(nèi)容(將頁面中的靜態(tài)與動態(tài)內(nèi)容相結(jié)合),5,優(yōu)點:純凈的JSP頁面因為業(yè)務(wù)邏輯和數(shù)據(jù)庫操作已經(jīng)從JSP頁面中剝離出來,JSP頁面中只需嵌入少量的Java代碼甚至不使用Java代碼??芍赜玫慕M件設(shè)計良好的JavaBean可以重用,甚至可以作為產(chǎn)品銷售,在團(tuán)隊協(xié)作的項目中,可重用的JavaBean將會大大減少開發(fā)人員的工作量,加快開發(fā)進(jìn)度。方便進(jìn)行調(diào)試復(fù)雜的操作都封裝在一個或者數(shù)個JavaBean中,錯誤比較容易定位。易維護(hù)易擴(kuò)展系統(tǒng)的升級或者更改往往集中在一組JavaBean中,而不用編輯所有的JSP頁面。,6,應(yīng)用范圍Model1模式的表現(xiàn)邏輯和控制邏輯全部邏輯耦合在頁面中,這種處理方式對一些規(guī)模很小只有幾個簡單頁面的項目比較適用,7,JSP程序開發(fā)模式,JSP+Servlet+JavaBean編程在JSP+JavaBean設(shè)計模式的基礎(chǔ)上加入Servlet來實現(xiàn)程序中的控制層。在這種模式中,由Servlet來執(zhí)行業(yè)務(wù)邏輯并負(fù)責(zé)程序的流程控制,JavaBean組件實現(xiàn)業(yè)務(wù)邏輯,充當(dāng)著模型的角色,JSP用于頁面的顯示??梢钥闯鲞@種模式使得程序中的層次關(guān)系更明顯,各組件的分工也非常明確。下面將通過一個流程圖說明該模式對客戶端的請求進(jìn)行處理的過程。,8,JSP+Servlet+JavaBean編程對客戶端的請求進(jìn)行處理的過程,客戶端,帶有JSP引擎的Web服務(wù)器,用戶通過客戶端瀏覽器請求服務(wù)器,服務(wù)器將最終的結(jié)果返回給客戶端瀏覽器進(jìn)行顯示,JSP頁面,JavaBean,業(yè)務(wù)邏輯,數(shù)據(jù)庫,在JavaBean中連接及操作數(shù)據(jù)庫,或?qū)崿F(xiàn)其他業(yè)務(wù)邏輯,服務(wù)器接收用戶請求后調(diào)用Servlet,Servlet根據(jù)用戶請求調(diào)用JavaBean處理業(yè)務(wù),服務(wù)器讀取JSP頁面中的內(nèi)容(將頁面中的靜態(tài)與動態(tài)的內(nèi)容相結(jié)合),請求,響應(yīng),Servlet,調(diào)用,轉(zhuǎn)發(fā),由Servlet轉(zhuǎn)發(fā)請求到JSP頁面,JavaBean將結(jié)果返回Servlet,在Servlet中將結(jié)果保存到請求對象中,9,JSP程序開發(fā)模式,MVC模式MVC(Model-View-Controller,模型視圖控制器)是一種程序設(shè)計概念,它同時適用于簡單的和復(fù)雜的程序。使用該模式可將待開發(fā)的應(yīng)用程序分解為3個獨立的部分:模型、視圖和控制器。,10,JSP程序開發(fā)模式,提出這種設(shè)計模式主要是因為應(yīng)用程序中用來完成任務(wù)的代碼模型(也稱為“業(yè)務(wù)邏輯”)通常是程序中相對穩(wěn)定的部分,并且會被重復(fù)使用,程序與用戶進(jìn)行交互的頁面視圖,卻是經(jīng)常改變的。如果因需要更新頁面而不得不對業(yè)務(wù)邏輯代碼進(jìn)行改動,或者要在不同的模塊中應(yīng)用到相同的功能而重復(fù)地編寫業(yè)務(wù)邏輯代碼,不僅降低了整體程序開發(fā)的進(jìn)程,而且會使程序變得難以維護(hù)。因此,將業(yè)務(wù)邏輯代碼與外觀呈現(xiàn)分離,將會更容易地根據(jù)需求的改變來改進(jìn)程序。,11,Model(模型):指的是業(yè)務(wù)邏輯的代碼,是應(yīng)用程序中真正用來完成任務(wù)的部分。View(視圖):實際上就是程序與用戶進(jìn)行交互的界面,用戶可以看到它的存在。視圖可以具備一定的功能并應(yīng)遵守對其的約束,在視圖中不應(yīng)包含對數(shù)據(jù)處理的代碼,即業(yè)務(wù)邏輯代碼。Controller(控制器):主要控制用戶請求并作出響應(yīng)。它根據(jù)用戶的請求選擇模型或修改模型,并決定返回怎樣的視圖。,12,在當(dāng)今各類JSP網(wǎng)站開發(fā)標(biāo)準(zhǔn)中,有兩種使用JSP的方式,他們分別被稱為模式一和模式二。模式一是JSP+JavaBean的結(jié)合模式二是JSP+JavaBeanServlet的結(jié)合。這兩種模式是當(dāng)今大中型應(yīng)用程序的基礎(chǔ),這兩種模式中最重要的就是JavaBean的開發(fā),JavaBean用來封裝業(yè)務(wù)邏輯。,13,7.3剖析JavaBean,什么是組件?獨立的模塊外界不了解其內(nèi)部實現(xiàn)外界通過其提供的接口對組件進(jìn)行訪問可以重用目前有代表性的組件技術(shù)COM、COM+、JavaBeans、EJB等,14,JavaBean組件和企業(yè)級EJB(EnterpriseJavaBean)組件EJB是J2EE的核心技術(shù),它為開發(fā)服務(wù)器端應(yīng)用程序組件提供了一個模型,利用這個模型來創(chuàng)建可移植性與分布式企業(yè)應(yīng)用程序服務(wù)器或組件。EJB定義了一個用于開發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn)。EJB是一個用來創(chuàng)建分布式、服務(wù)器端以及基于Java的企業(yè)應(yīng)用程序組件的功能強大的組件模型。,15,16,7.3.1什么是JavaBean,JavaBean是Java的可重用組件技術(shù),實質(zhì)是一種符合某些命名和設(shè)計規(guī)范的Java類JavaBean通常封裝成為具有特定功能或者處理某個業(yè)務(wù)(如連接數(shù)據(jù)庫,訪問數(shù)據(jù)庫)應(yīng)用:JSP頁面內(nèi)可以訪問JavaBean的對象以及它的方法。在JSP的Web應(yīng)用中集成JavaBean組件,由JavaBean中處理業(yè)務(wù)邏輯,然后在JSP中調(diào)用,而JSP頁面著重網(wǎng)頁界面的設(shè)計,可以實現(xiàn)業(yè)務(wù)邏輯和前臺顯示的部分分離。,17,使用JavaBean的好處:可以使得JSP頁面變得清晰;節(jié)省軟件開發(fā)時間(可以直接使用已經(jīng)測試和可信的已有組件,避免了重復(fù)開發(fā));降低系統(tǒng)維護(hù)的難度JavaBean的分類可視的JavaBean:傳統(tǒng)的JavaBean應(yīng)用于可視化界面(如java圖形界面中使用的按鈕、文本框或列表框等等)。非可視化的JavaBean:封裝邏輯、封裝數(shù)據(jù),與JSP搭配使用。,18,7.3.2JavaBean的特征,通常一個標(biāo)準(zhǔn)的JavaBean有以下特征(編寫規(guī)范):一定使用了package語句進(jìn)行打包JavaBean是一個public類型的類有一個無參數(shù)的構(gòu)造方法屬性一般是私有的(即用private修飾)對屬性值xxx的獲取有相應(yīng)的getXxx()方法,并且此方法是公有的(即用public修飾)若要獲取的屬性xxx為boolean類型則可以使用isXxx()方法對屬性值xxx的設(shè)置有相應(yīng)的setXxx()方法,并且此方法也是公有的(即用public修飾)需要實現(xiàn)java.io.Serializable接口。實現(xiàn)了Serializable接口的對象可以轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。,19,UserBean.javapackagejsp.test;publicclassUserBeanprivateStringuserName;/用戶名privateStringpwd;/密碼privateStringname;/真實姓名privateStringgender;/性別privateintage;/年齡privateStringemail;/電子郵件privateStringtel;/固定電話privateStringmphone;/手機publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetEmail()returnemail;publicvoidsetEmail(Stringemail)this.email=email;publicStringgetGender()returngender;publicvoidsetGender(Stringgender)this.gender=gender;publicStringgetMphone()returnmphone;publicvoidsetMphone(Stringmphone)this.mphone=mphone;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;,20,publicStringgetPwd()returnpwd;publicvoidsetPwd(Stringpwd)this.pwd=pwd;publicStringgetTel()returntel;publicvoidsetTel(Stringtel)this.tel=tel;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,21,Eclipse中編寫JavaBean,Eclipse新建WebProject在src文件夾上新建package,如前例中的jsp.test在package上新建類,如前例中的UserBean,22,Eclipse中編寫JavaBean,23,24,25,26,27,28,一個JavaBean編寫完以后,需要將它編譯成“.class”文件,并將此“.class”文件(連同其目錄)放到本次應(yīng)用的WEB-INFclasses目錄之下(直接在Apache下使用時)。注意:用Eclipse編寫會自動地把.class放到相應(yīng)的class目錄下,使用JavaBean,29,在JSP中使用JavaBean,需要使用以下幾個動作元素標(biāo)簽:在網(wǎng)頁中創(chuàng)建一個Bean對象標(biāo)簽:用于為Bean對象中的屬性賦值標(biāo)簽:用于獲取Bean對象中屬性的值,30,SampleBean.javapackagebean;publicclassSampleBeanprivateStringsample=Hello,World;publicvoidsetSample(Strings)if(s!=null)sample=s;publicStringgetSample()returnsample;,Test1.jsp屬性sample的初始值:屬性sample的新值:,31,6.3.1調(diào)用JavaBean,該標(biāo)簽用來在JSP頁面中創(chuàng)建一個JavaBean實例。語法如下:其中:id指定該JavaBean的實例變量的名稱scope指定該Bean變量的有效范圍request指在任何執(zhí)行相同請求的JSP文件中使用Bean,直到頁面執(zhí)行完畢,session指從創(chuàng)建該Bean開始,在相同session下的JSP頁面中可以使用該Bean;application指從創(chuàng)建該Bean開始,在相同application下的JSP頁面中可以使用該Bean,32,33,比較在同一個頁面輸出效果一樣使用動作元素可以指定作用域;在腳本段的作用域只限定在當(dāng)前JSP頁面。對于多個頁面共享Bean情況,如果使用腳本段,每個頁面都要實例化一個新的對象,會增加系統(tǒng)開銷,34,訪問JavaBean,標(biāo)簽用來獲取Bean對象的屬性值,并顯示在頁面上,其語法如下:name指出了要獲取哪個bean的屬性值,取值與useBean中id值相同;property指出要獲取該bean的哪個屬性值注意:在使用之前,必須有由所創(chuàng)建的Bean對象如果使用來檢索的值是空值,那么將會產(chǎn)生NullPointerException例外;如果使用程序段或表達(dá)式來檢索值,那么在瀏覽器上出現(xiàn)的是將是null(空值),35,例:還可以使用表達(dá)式調(diào)用其屬性,例如在計算器實例中,下面兩種表達(dá)式是等價的,36,設(shè)置JavaBean的屬性,標(biāo)簽用來設(shè)置Bean對象的屬性值。JSP語法格式如下:/,37,它有兩種用法:第一,可以在jsp:useBean元素的外面(后面)使用jsp:setProperty。.不管jsp:useBean是找到了一個現(xiàn)有的Bean,還是新創(chuàng)建了一個Bean實例,jsp:setProperty都會執(zhí)行。第二,把放入jsp:useBean元素的內(nèi)部。.只有在新建Bean實例時才會執(zhí)行,如果是使用現(xiàn)有實例,則不執(zhí)行。,38,設(shè)置JavaBean的屬性,設(shè)置Bean對象的屬性的語法有多種:(1).簡單bean屬性設(shè)置其中:name指出是在操作哪個bean,property指出對該bean的哪個屬性賦值,value用來指定給屬性賦的值。例:,39,Eg.一個描述學(xué)生的beans,在一個JSP頁面中獲得一個這樣的beans,其有效范圍是page。在JSP頁面中使用動作標(biāo)簽設(shè)置、獲取該beans的屬性。,40,Student.java:創(chuàng)建beans的源文件,publicclassStudentStringname=null;longnumber;doubleheight,weight;publicStringgetName()returnname;publicvoidsetName(StringnewName)name=newName;publiclonggetNumber()returnnumber;publicvoidsetNumber(longnewNumber)number=newNumber;,publicdoublegetHeight()returnheight;publicvoidsetHeight(doublenewHeight)height=newHeight;publicdoublegetWeight()returnweight;publicvoidsetWeight(doublenewWeight)weight=newWeight;,41,student.jsp,名字是:學(xué)號是:/身高是:米體重是:公斤,42,注意:如果將表達(dá)式的值設(shè)置為beans屬性的值,表達(dá)式值的類型必須和beans的屬性的類型一致。如果將字符串設(shè)置為beans的屬性的值,這個字符串會自動被轉(zhuǎn)化為beans的屬性的類型。,43,(2).將單個屬性值和輸入?yún)?shù)關(guān)聯(lián)用param代替value表示將一個form表單中傳入?yún)?shù)的值賦給bean的某個屬性。其中:name指出是在操作哪個bean,property指出對該bean的哪個屬性賦值,而param表示傳入?yún)?shù)的名字。,44,test2.html姓名:年齡:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,Test4.jsp,45,通過表單來指定beans的屬性值。由于客戶可能提交漢語的姓名,所以我們將TestBean.java文件中的getUserName()方法做以下改進(jìn):,publicStringgetUserName()()trybyteb=userName.getBytes(ISO-8859-1);userName=newString(b);returnuserName;catch(Exceptione)returnuserName;,46,(3)輸入?yún)?shù)和bean屬性值相同,可以簡化這種用法將form表單中傳入?yún)?shù)的值賦給bean的某個屬性。要求:form表單中參數(shù)的名稱要與propertyName一致,47,test1.html姓名:年齡:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,注意:property的屬性名、form中參數(shù)的名字、Bean中的屬性名、方法名要對應(yīng),Test2.jsp,48,標(biāo)簽,(4).將bean的所有屬性與表單中參數(shù)關(guān)聯(lián)在這種用法中,JSP容器會一個個檢查傳入的參數(shù),如果某個傳入?yún)?shù)的名字和bean中某個屬性的名字相同,則將該參數(shù)的值賦給bean中的屬性。使用這種方式可以一次為多個屬性賦值,49,Test3.jsp,test1.html姓名:年齡:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,50,Pleaseenteryourusername:,publicclassLanguageBeanprivateStringname;publicvoidsetName(Stringname)=name;,beans.html,beans.jsp,mypackage.LanguageBean,執(zhí)行過程,51,示例通過一個用戶注冊的例子來具體介紹這3個動作元素的使用方法,在ch04項目中建立一個名為TestBean的Java類用戶登錄文件register.htmlregister.jsp顯示注冊成功的用戶的提交信息,52,register2.html改表單參數(shù)userName為xingming(即和JavaBean的屬性名不一致),修改后的代碼為姓名:register2.jsp:改為重新執(zhí)行程序,輸入數(shù)據(jù)并提交,53,eg.首先建立一個名為具有計算訪客人數(shù)功能的JavaBean類Counter并且在程序中定義一個名為setCounter的方法用來設(shè)置屬性值Count,并且定義為取得屬性的方法getCounter。,Counter.javapackagebean;publicclassCounterpublicCounter()privateintCount=0;publicvoidsetCounter(intcount)Count=count;publicintgetCounter()return+Count;,54,運行效果,在page范圍在request范圍在session范圍在Application范圍,55,使用JavaBean處理表單數(shù)據(jù),操縱HTML表單步驟1、寫JSP原文件,創(chuàng)建一些HTML的表單并命名。2、在Java文件里寫B(tài)ean,定義屬性,GET或者SET方法來配合已經(jīng)被你指定好名字的表單。3、回到JSP原文件中,增加標(biāo)簽來創(chuàng)建一個或者調(diào)用一個現(xiàn)成的Bean。4、增加標(biāo)簽設(shè)置HTML表單中需要SET方法的Bean的屬性。5、增加標(biāo)簽設(shè)置HTML表單中需要GET方法的Bean的屬性。6、如果需要處理更多的用戶數(shù)據(jù),用request對象。,56,eg1.用戶通過form表單提交數(shù)據(jù),提交的數(shù)據(jù)被處理后,再在Jsp文件中顯示處理usingGetParameter.html讓用戶輸入個人信息usingGetParameter.jsp將其一一輸出eg2.使用Jsp+JavaBean形式處理表單。showInfo.jsp讓用戶輸入個人信息服務(wù)器取得這些信息之后,利用show.java這個Javabean中的方法將其一一輸出,57,補充JavaBean,該標(biāo)簽用來在JSP頁面中創(chuàng)建一個JavaBean實例,并指定它的名字及作用范圍。語法如下:,58,id屬性,id屬性代表JavaBean對象的變量名可為同一Bean類指定不同的id值,例如:,59,class屬性,class屬性JavaBean的類名CountBean不屬于包CountBean屬于test包,60,class屬性分兩種情況:如果在scope指定的范圍內(nèi),該JavaBean對象不存在,則創(chuàng)建這個JavaBean對象,相當(dāng)于執(zhí)行以下語句Countid1=newCount();Countid2=newCount();若該JavaBean對象已經(jīng)存在,則不創(chuàng)建新對象,而是直接獲得已存在對象的引用。,61,scope屬性,scope屬性表明JavaBean對象存在的范圍,可為如下幾個值:page(默認(rèn))requestsessionApplication以上作用范圍使越來越大。,62,request和page的生命周期都是短暫的,他們之間的區(qū)別就是:一個request可以包含多個page頁(include,forward以及filter)。舉個簡單的例子:jsp1.jspjsp2.jsp,63,運行jsp1.jsp可以正常顯示數(shù)據(jù),因為作用范圍是request,相當(dāng)于調(diào)用了request.setAttribute()方法,jsp2頁通過request.getAttribute來獲得這個bean.如果把request改為page,就會拋出NullPointerExceptioin.一個請求可以跨好幾個JSP(include和forword)和Servlet(如filter).不過這里有一個需要注意的就是區(qū)別和.如果上面的改為,即使scope為page也是正確的,是編譯時包含,是運行時包含.前者就相當(dāng)于宏,編譯時替代,后者相當(dāng)于函數(shù),運行時返回.,64,page作用域,客戶每次請求訪問JSP頁面時,都會創(chuàng)建一個新的JavaBean對象。JavaBean對象的有效范圍僅是客戶請求訪問的當(dāng)前頁面。JavaBean對象在下列情況下會結(jié)束生命期:客戶請求訪問的當(dāng)前頁面執(zhí)行完畢并向客戶端發(fā)回響應(yīng)??蛻粽埱笤L問的當(dāng)前頁面通過標(biāo)記將請求轉(zhuǎn)發(fā)到另一個文件。,65,request作用域,客戶每次請求訪問JSP頁面時,都會創(chuàng)建一個新的JavaBean對象。JavaBean對象的有效范圍是:客戶請求訪問的當(dāng)前JSP網(wǎng)頁和當(dāng)前JSP網(wǎng)頁共享同一個客戶請求的頁面,即當(dāng)前JSP網(wǎng)頁中指令以及標(biāo)記包含的其它JSP文件當(dāng)所有共享同一個客戶請求的JSP頁面執(zhí)行完畢并向客戶端發(fā)回響應(yīng)時,JavaBean對象結(jié)束生命期。,66,session作用域,只有當(dāng)不同客戶請求訪問JSP頁面時,才會創(chuàng)建一個新的JavaBean對象。JavaBean對象的有效范圍是同一個Session中的所有JSP文件。JavaBean對象被創(chuàng)建后,存在于整個Session的生命周期內(nèi)。,67,application作用域,在整個Web應(yīng)用中只會創(chuàng)建一個JavaBean對象。JavaBean對象的有效范圍是Web應(yīng)用中的所有JSP文件。JavaBean對象被創(chuàng)建后,存在于整個Web應(yīng)用的生命周期內(nèi)。,68,下面看看具體的scope四個值的含義:Page:保存在pageContext對象中,有page范圍的JavaBean實例只能在當(dāng)前創(chuàng)建這個JavaBean的JSP文件中進(jìn)行操作,這個實例只有在請求返回給客戶端后或者轉(zhuǎn)移到另外的JSP頁面后才會釋放掉。page范圍的JavaBean常用于進(jìn)行一次性操作的JavaBean,這樣的Bean用的最多,比如大部分表單提交,Bean的一些計算處理等都可以使用page范圍的JavaBean,69,Request有request范圍的JavaBean實例可以在處理請求所有JSP頁面中都存在,這個對象只有在請求全部處理完畢后才會被釋放掉,request范圍的JavaBean常用于共享同一次請求的JSP頁面中,比如判斷用戶登錄功能,如果用戶名密碼合法就可以forward到一個合法頁面中,否則就forward到一個出錯頁面,當(dāng)然轉(zhuǎn)移后的頁面仍然能夠得到用戶的輸入。,70,SessionJavaBean對象是保存在session范圍的JavaBean實例的生存周期是整個session,只有當(dāng)session過期后才能釋放掉,這樣常用于共享同一session的JSP頁面,比如購物車一般就是放在session中的或者登陸后的用戶信息等也可以在session中,注意%page標(biāo)簽中不要設(shè)置session=false,否則在這個JSP頁面中session將不會起作用,幸好JSP默認(rèn)session=true,所以可以不必管它了。,71,application-JavaBean對象保存在application對象中,有application范圍的JavaBean對象的生存周期是整個application。這就意味著這樣的JavaBean的生存周期是整個應(yīng)用程序,當(dāng)webServer停掉才會消失掉。這樣的常用于共享同一application的JSP程序中,比如程序中一些經(jīng)常用到配置東西如數(shù)據(jù)庫連接URL,全局的計數(shù)器或者是聊天室中人員信息等。,72,執(zhí)行過程,73,通過Bean提供的setXXX()方法設(shè)置Bean的簡單屬性和索引屬性,語法如下:其中propertyDetails可為如下之一property=“*”property=“propertyName”property=“propertyName”param“paramNameproperty=“propertyNamevaluepropertyValue,74,標(biāo)記,property=“*”設(shè)置Bean的所有屬性,要求Bean屬性的名字和類型必須與request對象中參數(shù)相匹配由于form傳遞的數(shù)據(jù)類型都是String,JSP會自動將參數(shù)轉(zhuǎn)換成Bean屬性對應(yīng)的類型若沒有Bean屬性對應(yīng)的request參數(shù)值或參數(shù)值為空,則相應(yīng)的Bean屬性不會設(shè)置任何值,75,標(biāo)記,property=“propertyName”設(shè)置Bean指定的屬性,要求Bean屬性的名字和類型必須與request對象中參數(shù)相匹配由于form傳遞的數(shù)據(jù)類型都是String,JSP會自動將參數(shù)轉(zhuǎn)換成Bean屬性對應(yīng)的類型若沒有Bean屬性對應(yīng)的request參數(shù)值或參數(shù)值為空,則相應(yīng)的Bean屬性不會設(shè)置任何值,76,標(biāo)記,property=“propertyName”param“paramName當(dāng)Bean屬性的名字和request參數(shù)的名字不同時使用該方法進(jìn)行設(shè)置由于form傳遞的數(shù)據(jù)類型都是String,JSP會自動將參數(shù)轉(zhuǎn)換成Bean屬性對應(yīng)的類型若request參數(shù)值為空,則相應(yīng)的Bean屬性不會設(shè)置任何值,77,標(biāo)記,property=“propertyNamevaluepropertyValue使用指定值而不是request參數(shù)來設(shè)置Bean屬性value可為字符串或表達(dá)式。若是字符串,會自動轉(zhuǎn)換成Bean屬性對應(yīng)的類型;若是表達(dá)式,則必須和Bean屬性的類型一致若value為空,則相應(yīng)的Bean屬性不會設(shè)置任何值,78,Pleaseenteryourusername:,publicclassLanguageBeanprivateStringname;publicvoidsetName(Stringname)=name;,beans.html,beans.jsp,mypackage.LanguageBean,執(zhí)行過程,79,80,標(biāo)記,訪問Bean屬性的值,并將此值轉(zhuǎn)換成字符串,插入到輸出結(jié)果中。語法如下:,81,執(zhí)行過程,publicclassLanguageBeanprivateStringname;publicStringgetName();,mypackage.LanguageBean,Hello,.,beans.jsp,轉(zhuǎn)換成字符串,82,Jsp中訪問JavaBean語法,使用page指令導(dǎo)入JavaBean類:%pageimport=包名.類名%使用標(biāo)簽聲明JavaBean對象:注意:要給出完整的(包名.類名),否則報ClassNotFoundException例:上面的代碼相當(dāng)于:CountBeanbean=newCountBean();session.setAttribute(bean,bean);注意:如果在scope指定范圍內(nèi),該JavaBean已存在,則不會生成新的JavaBean對象,而是直接獲得已經(jīng)存在的JavaBean對象的引用.,83,7.5.3使用GET/POST方法傳遞參數(shù),第一種GET它將表單內(nèi)容附加URL之后,中間用問號連接,然后傳送至指定的程序做處理。http:/specifiedURL?Name1=Valueq=0.8”;Accept-Language:客戶端所能識別的語言,格式:“Accept-Language:語言1:權(quán)重,語言2:權(quán)重”,如:”Accept-Language:zh,en;q=0.7”;Host:客戶請求的主

溫馨提示

  • 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

提交評論