JavaBean和表單處理v1課件_第1頁
JavaBean和表單處理v1課件_第2頁
JavaBean和表單處理v1課件_第3頁
JavaBean和表單處理v1課件_第4頁
JavaBean和表單處理v1課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第七章JavaBean與表單處理2JSP程序開發(fā)模式單純的JSP頁面編程在單純的JSP編程模式下,通過應(yīng)用JSP中的腳本標(biāo)志,可直接在JSP頁面中實現(xiàn)各種功能。這種模式很容易實現(xiàn)。缺點:因為將大部分的Java代碼與HTML代碼混淆在一起,會給程序的維護和調(diào)試帶來很多的困難,而且對于整個程序的結(jié)構(gòu)更是無從談起。單純的JSP頁面編程模式是無法應(yīng)用到大型、中型甚至小型的JSPWeb應(yīng)用程序開發(fā)中。3JSP程序開發(fā)模式JSP+JavaBean編程該模式是JSP程序開發(fā)經(jīng)典設(shè)計模式之一,適合小型或中型網(wǎng)站的開發(fā)。利用JavaBean技術(shù),可以很容易地完成一些業(yè)務(wù)邏輯上的操作,例如數(shù)據(jù)庫的連接、用戶登錄與注銷等。JavaBean是一個遵循了一定規(guī)則的Java類,在程序的開發(fā)中,將要進行的業(yè)務(wù)邏輯封裝到這個類中,在JSP頁面中通過動作標(biāo)簽來調(diào)用這個類,從而執(zhí)行這個業(yè)務(wù)邏輯。此時的JSP除了負(fù)責(zé)部分流程的控制外,大部分用來顯示頁面,而JavaBean則負(fù)責(zé)業(yè)務(wù)邏輯的處理。下面將通過一個流程圖說明該模式對客戶端的請求進行處理的過程。5優(yōu)點:純凈的JSP頁面因為業(yè)務(wù)邏輯和數(shù)據(jù)庫操作已經(jīng)從JSP頁面中剝離出來,JSP頁面中只需嵌入少量的Java代碼甚至不使用Java代碼??芍赜玫慕M件設(shè)計良好的JavaBean可以重用,甚至可以作為產(chǎn)品銷售,在團隊協(xié)作的項目中,可重用的JavaBean將會大大減少開發(fā)人員的工作量,加快開發(fā)進度。方便進行調(diào)試復(fù)雜的操作都封裝在一個或者數(shù)個JavaBean中,錯誤比較容易定位。易維護易擴展系統(tǒng)的升級或者更改往往集中在一組JavaBean中,而不用編輯所有的JSP頁面。6應(yīng)用范圍Model1模式的表現(xiàn)邏輯和控制邏輯全部邏輯耦合在頁面中,這種處理方式對一些規(guī)模很小只有幾個簡單頁面的項目比較適用7JSP程序開發(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)系更明顯,各組件的分工也非常明確。下面將通過一個流程圖說明該模式對客戶端的請求進行處理的過程。9JSP程序開發(fā)模式MVC模式MVC(Model-View-Controller,模型—視圖—控制器)是一種程序設(shè)計概念,它同時適用于簡單的和復(fù)雜的程序。使用該模式可將待開發(fā)的應(yīng)用程序分解為3個獨立的部分:模型、視圖和控制器。請求應(yīng)用服務(wù)器響應(yīng)JSP頁面JavaBeanServlet數(shù)據(jù)庫服務(wù)器10

JSP+Servlet+JavaBean編程對客戶端的請求進行處理的過程客戶端帶有JSP引擎的Web服務(wù)器用戶通過客戶端瀏覽器請求服務(wù)器服務(wù)器將最終的結(jié)果返回給客戶端瀏覽器進行顯示JSP頁面JavaBean業(yè)務(wù)邏輯數(shù)據(jù)庫在JavaBean中連接及操作數(shù)據(jù)庫,或?qū)崿F(xiàn)其他業(yè)務(wù)邏輯服務(wù)器接收用戶請求后調(diào)用ServletServlet根據(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é)果保存到請求對象中11

設(shè)計模式為軟件設(shè)計問題提供標(biāo)準(zhǔn)的解決方案Model2是一種設(shè)計模式MVC將交互式應(yīng)用程序組織成三個獨立的模塊:

應(yīng)用程序模塊,用于表示數(shù)據(jù)和業(yè)務(wù)邏輯

數(shù)據(jù)表示

控制器,用于發(fā)送請求和控制應(yīng)用程序的流程13Model模型(封裝數(shù)據(jù))代表了某應(yīng)用程序的核心功能,負(fù)責(zé)處理用戶的數(shù)據(jù),實現(xiàn)業(yè)務(wù)邏輯。同時,模型還為視圖的顯示提供數(shù)據(jù),并可被多個視圖所共享。

模型對象表示W(wǎng)eb應(yīng)用程序的數(shù)據(jù)元素,用戶可與這些數(shù)據(jù)元素進行交互14View視圖(顯示數(shù)據(jù),收集數(shù)據(jù))和用戶打交道。主要指與用戶交互的界面,即應(yīng)用程序的外觀。它只負(fù)責(zé)將數(shù)據(jù)轉(zhuǎn)交給控制器;同時還負(fù)責(zé)展示模型傳遞給用戶的數(shù)據(jù),當(dāng)后臺模型更新數(shù)據(jù)時,視圖也應(yīng)隨之更新。Controller控制器(改變數(shù)據(jù),改變模型的狀態(tài))負(fù)責(zé)接收用戶的請求和數(shù)據(jù),然后做出判斷將請求和數(shù)據(jù)交到哪一個模型來處理,最后調(diào)用視圖來顯示模型返回的數(shù)據(jù)。

視圖對象提供模型組件以開發(fā)用戶界面

控制器對象充當(dāng)應(yīng)用程序視圖對象和模型對象之間的中間對象15在當(dāng)今各類JSP網(wǎng)站開發(fā)標(biāo)準(zhǔn)中,有兩種使用JSP的方式,他們分別被稱為模式一和模式二。模式一是JSP+JavaBean的結(jié)合模式二是JSP+JavaBean+Servlet的結(jié)合。這兩種模式是當(dāng)今大中型應(yīng)用程序的基礎(chǔ),這兩種模式中最重要的就是JavaBean的開發(fā),JavaBean用來封裝業(yè)務(wù)邏輯。17JavaBean組件和企業(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)用程序組件的功能強大的組件模型。18197.3.1什么是JavaBeanJavaBean是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ù)邏輯和前臺顯示的部分分離。創(chuàng)建一個標(biāo)準(zhǔn)JavaBean的基本語法如下。(1)定義JavaBean類

JavaBean類定義的語法結(jié)構(gòu)如下:

publicclass類名稱

{//類成員的定義

//類方法的定義。

//類屬性的定義。

}如何創(chuàng)建JavaBean

其中需要強調(diào)的是,類名稱與保存的文件名稱必須一致,否則就會出現(xiàn)編譯錯誤。同時,類必須聲明為公有類,即public。如:publicclassCarBean{privateStringmaker;

……….}(2)定義JavaBean類的構(gòu)造函數(shù)

JavaBean是Jave類,JavaBean就有自己的構(gòu)造函數(shù),并且構(gòu)造函數(shù)的名稱必須與JavaBean類的名稱一致。構(gòu)造函數(shù)的主要作用是用來初始化,而且構(gòu)造函數(shù)無參數(shù)輸入,其語法結(jié)構(gòu)如下:

publicJavaBean類名稱()

{//初始化

……..}例如:

publicCarBean(){}(4)設(shè)定JavaBean屬性值的方法定義了JavaBean屬性之后,還要對其屬性值進行設(shè)定,其屬性值設(shè)定的語法結(jié)構(gòu)如下:

publicvoidset設(shè)定方法名稱(數(shù)據(jù)類型參數(shù)){this.變量=參數(shù);}例如:

publicvoidsetMaker(Stringmaker){this.maker="Benz";}值得注意的是:JavaBean屬性值的設(shè)定方法名稱一般以set三個字母開頭,后面跟上屬性設(shè)定方法名稱。(5)讀取JavaBean屬性值的方法上面講述了如何設(shè)定JavaBean屬性值,那么屬性值設(shè)定好之后,如何讀取呢?JavaBean屬性值讀取的語法結(jié)構(gòu)如下:

publicvoidget讀取方法名稱(){returnthis.變量=參數(shù);}例如:

publicvoidgetMaker(){returnthis.maker;}297.3.2JavaBean的特征通常一個標(biāo)準(zhǔn)的JavaBean有以下特征(編寫規(guī)范):一定使用了package語句進行打包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é)序列可以被完全存儲以備以后重新生成原來的對象。30UserBean.java

packagejsp.test;publicclassUserBean{ privateStringuserName; //用戶名

privateStringpwd; //密碼

privateStringname; //真實姓名

privateStringgender; //性別

privateintage; //年齡

privateStringemail; //電子郵件

privateStringtel; //固定電話

privateStringmphone; //手機

publicint

getAge(){returnage;} publicvoidsetAge(intage){this.age=age;} publicStringgetEmail(){returnemail; } publicvoidsetEmail(Stringemail){this.email=email; } publicStringgetGender(){returngender;} publicvoidsetGender(Stringgender){this.gender=gender; } publicStringgetMphone(){ returnmphone; } publicvoidsetMphone(String

mphone){this.mphone=mphone;} publicStringgetName(){returnname;} publicvoidsetName(Stringname){=name; }31 publicStringgetPwd(){ returnpwd; } publicvoidsetPwd(String

pwd){

this.pwd=pwd; } publicStringgetTel(){ returntel; } publicvoidsetTel(String

tel){

this.tel=tel; } publicStringgetUserName(){ returnuserName; } publicvoidsetUserName(String

userName){

this.userName=userName; } }32Eclipse中編寫JavaBeanEclipse新建WebProject在src文件夾上新建package,如前例中的jsp.test在package上新建類,如前例中的UserBean33Eclipse中編寫JavaBean343536373839一個JavaBean編寫完以后,需要將它編譯成“.class”文件,并將此“.class”文件(連同其目錄)放到本次應(yīng)用的WEB-INF\classes目錄之下(直接在Apache下使用時)。注意:用Eclipse編寫會自動地把.class放到相應(yīng)的class目錄下使用JavaBean40在JSP中使用JavaBean需要使用以下幾個動作元素<jsp:useBean>標(biāo)簽:

在網(wǎng)頁中創(chuàng)建一個Bean對象<jsp:setProperty>標(biāo)簽:

用于為Bean對象中的屬性賦值<jsp:getProperty>標(biāo)簽:用于獲取Bean對象中屬性的值41SampleBean.javapackagebean;publicclassSampleBean{privateStringsample="Hello,World";publicvoidsetSample(Strings){if(s!=null)sample=s;}publicStringgetSample(){returnsample;}}Test1.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.SampleBean"/>屬性sample的初始值:<jsp:getPropertyname="myBean"property="sample"/></p><jsp:setPropertyname="myBean"property="sample"value="Hello,JSP"/>屬性sample的新值:<jsp:getPropertyname="myBean"property="sample"/></html>426.3.1調(diào)用JavaBean<jsp:useBean>該標(biāo)簽用來在JSP頁面中創(chuàng)建一個JavaBean實例。語法如下:<jsp:useBeanid=“beanname”class=“package.class”[scope=“page|request|session|application”]/>其中:id指定該JavaBean的實例變量的名稱scope指定該Bean變量的有效范圍request指在任何執(zhí)行相同請求的JSP文件中使用Bean,直到頁面執(zhí)行完畢,session指從創(chuàng)建該Bean開始,在相同session下的JSP頁面中可以使用該Bean;application指從創(chuàng)建該Bean開始,在相同application下的JSP頁面中可以使用該Bean43屬性用法id命名引用該Bean的變量。如果能夠找到id和scope相同的Bean實例,jsp:useBean動作將使用已有的Bean實例而不是創(chuàng)建新的實例class指定Bean的完整包名scope指定Bean在哪種上下文內(nèi)可用,可以取page,request,session和application四個值之一?

page(是默認(rèn)值)表示該Bean只在當(dāng)前頁面內(nèi)可用(保存在當(dāng)前頁面的PageContext內(nèi))?

request表示該Bean在當(dāng)前的客戶請求內(nèi)有效(保存在ServletRequest對象內(nèi))?

session表示該Bean對當(dāng)前HttpSession內(nèi)的所有頁面都有效?

application表示該Bean對所有具有相同ServletContext的頁面都有效scope很重要,是因為jsp:useBean只有在不存在具有相同id和scope的對象時才會實例化新的對象;如果已有id和scope都相同的對象則直接使用已有的對象,此時jsp:useBean開始標(biāo)記和結(jié)束標(biāo)記之間的任何內(nèi)容都將被忽略type指定引用該對象的變量的類型,它必須是Bean類的名字、超類名字、該類所實現(xiàn)的接口名字之一。請記住變量的名字是由id屬性指定的beanName.class文件的名稱、Bean包名或包含該Bean的串行化文件。僅當(dāng)Bean不存在于指定的作用域時,才使用詞屬性。與Type合用。44比較<jsp:useBeanid="calculator"scope="request"class="ch07.SimpleCalculator"><%ch07.SimpleCalculatorcalculator=newch06.SimpleCalculator%>在同一個頁面輸出效果一樣使用動作元素<jsp:useBean>可以指定作用域;在腳本段的作用域只限定在當(dāng)前JSP頁面。對于多個頁面共享Bean情況,如果使用腳本段,每個頁面都要實例化一個新的對象,會增加系統(tǒng)開銷45補充JavaBean

<jsp:useBean>該標(biāo)簽用來在JSP頁面中創(chuàng)建一個JavaBean實例,并指定它的名字及作用范圍。語法如下:<jsp:useBeanid=“id"class=“className”scope=“scope”/><jsp:useBeanid=“id"type=“typeName”

scope=“scope”>

46id屬性id屬性-代表JavaBean對象的變量名可為同一Bean類指定不同的id值,例如:<jsp:useBeanid=“id1"class=“Count”/><jsp:useBeanid=“id2"class=“Count”/>47class屬性class屬性-JavaBean的類名CountBean不屬于包<jsp:useBeanid="count"class="Count"/>CountBean屬于test包<jsp:useBeanid="count"class="test.Count"/>48class屬性分兩種情況:如果在scope指定的范圍內(nèi),該JavaBean對象不存在,則創(chuàng)建這個JavaBean對象,相當(dāng)于執(zhí)行以下語句 Countid1=newCount(); Countid2=newCount();若該JavaBean對象已經(jīng)存在,則不創(chuàng)建新對象,而是直接獲得已存在對象的引用。49<jsp:useBean>執(zhí)行過程在scope中找到bean對象?收到請求有無type?id引用class對象class可被實例化?noyesyes異常no類型轉(zhuǎn)換轉(zhuǎn)換成功?異常yesnono處理<jsp:useBean>元素內(nèi)容···················50訪問JavaBean<jsp:getProperty>標(biāo)簽用來獲取Bean對象的屬性值,并顯示在頁面上,其語法如下:

<jsp:getPropertyname=“beanname” property=“propertyname”/>name指出了要獲取哪個bean的屬性值,取值與useBean中

id值相同;property指出要獲取該bean的哪個屬性值注意:在使用<jsp:getProperty>之前,必須有由<jsp:useBean>所創(chuàng)建的Bean對象

如果使用<jsp:getProperty>來檢索的值是空值,那么將會產(chǎn)生NullPointerException例外;如果使用程序段或表達式來檢索值,那么在瀏覽器上出現(xiàn)的是將是null(空值)51例:<jsp:getPropertyname="myBean"property="sample"/>還可以使用表達式調(diào)用其屬性,例如在計算器實例中,下面兩種表達式是等價的<jsp:getPropertyname=“calculator”property=“first”/><%calculator.getFirst()%>52<jsp:getProperty>執(zhí)行過程·················publicclassLanguageBean{privateStringname;························publicStringgetName(){return;}

·····················mypackage.LanguageBean<p>Hello,

<jsp:getPropertyname="languageBean"property="name"/>.</p>

beans.jsp轉(zhuǎn)換成字符串53<jsp:setProperty>通過Bean提供的setXXX()方法設(shè)置Bean的簡單屬性和索引屬性,語法如下:<jsp:setPropertyname=“beanName”propertyDetails/>其中propertyDetails可為如下之一property=“*”property=“propertyName”property=“propertyName”param=“paramName"property=“propertyName"value="propertyValue"54<jsp:setPropertyname="languageBean"property=“name“value=“aa”/><%languageBean.setName(“aa”);%>55設(shè)置JavaBean的屬性<jsp:setProperty>設(shè)置Bean對象的屬性的語法有多種:(1).簡單bean屬性設(shè)置

<jsp:setPropertyname=“beanName” property=“propertyName” value=“propertyValue”/>其中:name指出是在操作哪個bean,property指出對該bean的哪個屬性賦值,value用來指定給屬性賦的值。例:<jsp:setPropertyname="myBean"property="sample"value="Hello,JSP"/>56Eg.一個描述學(xué)生的beans,在一個JSP頁面中獲得一個這樣的beans,其有效范圍是page。在JSP頁面中使用動作標(biāo)簽設(shè)置、獲取該beans的屬性。57Student.java:創(chuàng)建beans的源文件publicclassStudent{Stringname=null;longnumber;doubleheight,weight;publicStringgetName(){returnname;}publicvoidsetName(String

newName){name=newName;}publiclonggetNumber(){returnnumber;}publicvoidsetNumber(long

newNumber){number=newNumber;}

publicdoublegetHeight(){returnheight;}publicvoidsetHeight(double

newHeight){height=newHeight;}publicdoublegetWeight(){returnweight;}publicvoidsetWeight(double

newWeight){weight=newWeight;}}58student.jsp<%@pagecontentType="text/html;charset=GB2312"%><HTML><BODY><Fontsize=10>

<jsp:useBeanid="zhang"class=“ch07.Student"scope="page"></jsp:useBean><jsp:setPropertyname="zhang"property="name"value="張小三"/><P>名字是:<jsp:getPropertyname="zhang"property="name"/><jsp:setPropertyname="zhang"property="number"value="1999001"/><P>學(xué)號是:<jsp:getPropertyname="zhang"property="number"/><%doubleheight=1.70;%><jsp:setPropertyname="zhang"property="height"value="<%=height+0.05%>"/><P>身高是:<jsp:getPropertyname="zhang"property="height"/>米<jsp:setPropertyname="zhang"property="weight"value="67.65"/><P>體重是:<jsp:getPropertyname="zhang"property="weight"/>公斤</FONT></BODY></HTML>59注意:如果將表達式的值設(shè)置為beans屬性的值,表達式值的類型必須和beans的屬性的類型一致。如果將字符串設(shè)置為beans的屬性的值,這個字符串會自動被轉(zhuǎn)化為beans的屬性的類型。60(2).將單個屬性值和輸入?yún)?shù)關(guān)聯(lián)<jsp:setPropertyname=“beanName”property=“propertyName”param=“paramName”/>用param代替value表示將一個form表單中傳入?yún)?shù)的值賦給bean的某個屬性。其中:name指出是在操作哪個bean,property指出對該bean的哪個屬性賦值,而param表示傳入?yún)?shù)的名字。61test2.html<html><formaction="test4.jsp">姓名:<inputtype="text"name="user">年齡:<inputtype="text"name="age"><inputtype="submit"></form></html>TestBean.javapackagebean;publicclassTestBean{privateStringuserName;privateintage;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}}Test4.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property="userName"param=“user”/><jsp:setPropertyname="myBean"property="age"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>62(3)輸入?yún)?shù)和bean屬性值相同,可以簡化<jsp:setPropertyname=“beanName” property=“propertyName”/>

這種用法將form表單中傳入?yún)?shù)的值賦給bean的某個屬性。

要求:form表單中參數(shù)的名稱要與propertyName一致63test1.html<html><formaction="test2.jsp">姓名:<inputtype="text"name="userName">年齡:<inputtype="text"name="age"><inputtype="submit"></form></html>TestBean.javapackagebean;publicclassTestBean{privateStringuserName;privateintage;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}}注意:property的屬性名、form中參數(shù)的名字、Bean中的屬性名、方法名要對應(yīng)Test2.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property="userName"/><jsp:setPropertyname="myBean"property="age"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>64<jsp:setProperty>標(biāo)簽(4).將bean的所有屬性與表單中參數(shù)關(guān)聯(lián)<jsp:setPropertyname=“beanName” property=“*”/>

在這種用法中,JSP容器會一個個檢查傳入的參數(shù),如果某個傳入?yún)?shù)的名字和bean中某個屬性的名字相同,則將該參數(shù)的值賦給bean中的屬性。使用這種方式可以一次為多個屬性賦值65Test3.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property=“*"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>test1.html<html><formaction="test3.jsp">姓名:<inputtype="text"name="userName">年齡:<inputtype="text"name="age"><inputtype="submit"></form></html>TestBean.javapackagebean;publicclassTestBean{privateStringuserName;privateintage;

publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}}66<formmethod="post"action="beans.jsp"><p>Pleaseenteryourusername:

<inputtype="text"name="name">

<jsp:useBeanid="languageBean"scope="page"class="mypackage.LanguageBean">

<jsp:setPropertyname="languageBean"property="*"/></jsp:useBean>

·················publicclassLanguageBean{

privateString

name;

publicvoid

setName(Stringname){=name;}

·····················beans.htmlbeans.jspmypackage.LanguageBean<jsp:setProperty>執(zhí)行過程67eg.首先建立一個名為具有計算訪客人數(shù)功能的JavaBean類Counter并且在程序中定義一個名為setCounter的方法用來設(shè)置屬性值Count,并且定義為取得屬性的方法getCounter。Counter.javapackagebean;publicclassCounter{publicCounter(){}privateintCount=0;publicvoidsetCounter(intcount){Count=count;}publicint

getCounter(){return++Count;}}68運行效果在page范圍在request范圍在session范圍在Application范圍69使用JavaBean處理表單數(shù)據(jù)操縱HTML表單步驟1、寫JSP原文件,創(chuàng)建一些HTML的表單并命名。2、在Java文件里寫B(tài)ean,定義屬性,GET或者SET方法來配合已經(jīng)被你指定好名字的表單。3、回到JSP原文件中,增加<jsp:useBean>標(biāo)簽來創(chuàng)建一個或者調(diào)用一個現(xiàn)成的Bean。4、增加<jsp:setProperty>標(biāo)簽設(shè)置HTML表單中需要SET方法的Bean的屬性。5、增加<jsp:getProperty>標(biāo)簽設(shè)置HTML表單中需要GET方法的Bean的屬性。6、如果需要處理更多的用戶數(shù)據(jù),用request對象。70eg1.用戶通過form表單提交數(shù)據(jù),提交的數(shù)據(jù)被處理后,再在Jsp文件中顯示處理usingGetParameter.html讓用戶輸入個人信息usingGetParameter.jsp將其一一輸出eg2.使用Jsp+JavaBean形式處理表單。showInfo.jsp讓用戶輸入個人信息服務(wù)器取得這些信息之后,利用show.java這個Javabean中的方法將其一一輸出717.5.3使用GET/POST方法傳遞參數(shù)第一種GET它將表單內(nèi)容附加URL之后,中間用問號連接,然后傳送至指定的程序做處理。第二種POST,這個方法是將表單內(nèi)容作為一個數(shù)據(jù)體而不是URL的一部分傳送給服務(wù)器的。所以URL中看不到表單的內(nèi)容。72在Form里面,可以使用post也可以使用get。它們都是method的合法取值。區(qū)別:這兩者傳遞參數(shù)時所用的編碼不一定是一樣的。對于get方法,瀏覽器對數(shù)據(jù)的URLencode的編碼方式是有瀏覽器設(shè)置來決定,而post方法,開發(fā)人員可以指定。get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng),在URL中可以看到。post是通過HTTPpost機制,將表單內(nèi)各個字段與其內(nèi)容放置在HTMLHEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。get安全性非常低,post安全性較高。

73根據(jù)HTTP協(xié)議規(guī)范,每個HTTP請求主要包含以下信息74請求頭格式a)通用頭(general-header):

Cache-Control:客戶端希望服務(wù)端如何緩存自己的請求數(shù)據(jù),如"Cache-Control:no-cache","Cache-Control:max-age=0";

Connection:客戶端是否希望與服務(wù)端之間保持長連接,如"Connection:close","Connection:keep-alive";

Date:只有當(dāng)請求方法為POST或PUT方法時客戶端才可能會有些字段;

Pragma:包含了客戶端一些特殊請求信息,如"Pragma:no-cache"客戶端希望代理或應(yīng)用服務(wù)器不應(yīng)緩存與該請求相關(guān)的結(jié)果數(shù)據(jù);

Via:一般用在代理網(wǎng)關(guān)向應(yīng)用服務(wù)器發(fā)送的請求頭中,表明該來自客戶端的請求經(jīng)過了網(wǎng)關(guān)代理,

格式為:"Via:請求協(xié)議版本

網(wǎng)關(guān)標(biāo)識

[其它信息]",如:"Via:1.1

webcache_250_199.:80(squid)"

b)請求頭(request-header):

Accept:表明客戶同端可接受的請求回應(yīng)的媒體類型范圍列表。星號“*”用于按范圍將類型分組,用“*/*”指示可接受全部類型;用“type/*”指示可接受type類型的所有子類型,如“Accept:image/gif,image/jpeg,*/*”;

Accept-Charset:客戶端所能識別的字符集編碼格式,格式:“Accept-Charset:字符集1[:權(quán)重],字符集2[:權(quán)重]”,如:“Accept-Charset:iso-8859-5,unicode-1-1;q=0.8”;

Accept-Language:客戶端所能識別的語言,格式:“Accept-Language:語言1[:權(quán)重],語言2[:權(quán)重]”,如:”Accept-Language:zh,en;q=0.7”;

Host:客戶請求的主機域名或主機IP,格式:“Host:域名或IP[:端口號]”,如:“Host:“,請求行中若有HTTP/1.1則必須有

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論