




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物化學(xué)基礎(chǔ)知識測試及答案
- 員工保密及競業(yè)禁止協(xié)議書模板
- 2025年宣城市旌德縣某國有控股企業(yè)招聘6人(第四批次)筆試參考題庫附帶答案詳解
- 2025年上半年定西市通渭縣事業(yè)單位招考考試(121名)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025中國能建新疆院校園招聘(56人)筆試參考題庫附帶答案詳解
- 2025年上半年安徽省蕪湖無為縣城管局公開招聘協(xié)管員15人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽省滁州市來安縣招聘政府購買服務(wù)人員98人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽省旌德縣事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025“才聚齊魯成就未來”山東省國有資產(chǎn)投資控股有限公司社會招聘2人筆試參考題庫附帶答案詳解
- 2025年上半年安徽滁州學(xué)院招聘專職輔導(dǎo)員10人(第二批)易考易錯模擬試題(共500題)試卷后附參考答案
- 中醫(yī)適宜技術(shù)-中藥熱奄包
- 2024年江蘇省南通市國家保安員資格考試題庫國編版
- 防火涂料質(zhì)量保證書
- 第九課 漂亮的班牌 教案 五下信息科技河南大學(xué)版
- 人教版高中語文必修3-梳理探究2《文學(xué)作品的個性化解讀》-(共45張)(部編)課件
- 礦產(chǎn)資源開發(fā)合同備忘錄范本
- 2024年廣州市高三二模普通高中畢業(yè)班綜合測試(二) 英語試卷及答案
- 大模型在刑偵技術(shù)中的應(yīng)用探索
- 2024年中國科學(xué)技術(shù)大學(xué)創(chuàng)新班物理試題答案詳解
- 城鄉(xiāng)的規(guī)劃法解讀
- 2024年全國鄉(xiāng)村醫(yī)生資格考試專業(yè)基礎(chǔ)知識復(fù)習(xí)題庫及答案(共150題)
評論
0/150
提交評論