JSP與JavaBeans教學(xué)目的課件_第1頁
JSP與JavaBeans教學(xué)目的課件_第2頁
JSP與JavaBeans教學(xué)目的課件_第3頁
JSP與JavaBeans教學(xué)目的課件_第4頁
JSP與JavaBeans教學(xué)目的課件_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第九講 JSP與JavaBeans教學(xué)目的 本講講述JSP中怎樣使用JavaBeans 。1 編寫javabeans和使用javabeans 。2 beans的存放目錄 第九講 JSP與JavaBeans 在談?wù)摻M件之前讓我們看一個(gè)通俗的事情:組裝電視機(jī)。組裝一臺(tái)電視機(jī)時(shí),人們可以選擇多個(gè)組件,例如電阻、電容、顯象管等,一個(gè)組裝電視機(jī)的人不必關(guān)心顯象管是怎么研制的,只要根據(jù)說明書了解其中的屬性和功能就可以了。不同的電視機(jī)可以安裝相同的顯象管,顯象管的功能完全相同,但他們是在不同的電視機(jī)里面,一臺(tái)電視機(jī)的顯象管發(fā)生了故障并不影響其它的電視機(jī);也可能兩臺(tái)電視安裝了一個(gè)共享的組件:天線,如果天線發(fā)

2、生了故障,兩臺(tái)電視機(jī)都受到同樣的影響。 “可視化組件編程”非常成功的一個(gè)例子就是微軟公司的VB。人們?cè)谑褂肰B編寫程序時(shí),經(jīng)常把一個(gè)按鈕組件或文本框組件拖放到你的應(yīng)用程序窗體中,并了解這個(gè)按鈕的名字、它有哪些功能、方法等,而且你還可以重新更改它的名字,當(dāng)你創(chuàng)建生成應(yīng)用程序時(shí),這個(gè)按鈕的名字被保存了下來。但是,微軟的組件只適用于微軟的操作平臺(tái)上,不能為其它的平臺(tái)所使用。按著Sun公司的定義,JavaBeans是一個(gè)可重復(fù)使用的軟件組件。實(shí)際上JavaBeans是一種Java類,通過封裝屬性和方法成為具有某種功能或者處理某個(gè)業(yè)務(wù)的對(duì)象,簡稱beans。由于javabeans是基于java語言的,因

3、此javabeans不依賴平臺(tái),具有以下特點(diǎn):(1)可以實(shí)現(xiàn)代碼的重復(fù)利用(2)易編寫、易維護(hù)、易使用(3)可以在任何安裝了Java運(yùn)行環(huán)境的平臺(tái)上的使用,而不需要重新編譯。我們已經(jīng)知道,一個(gè)基本的JSP頁面就是由普通的HTML標(biāo)簽和java程序片組成,如果程序片和HTML大量交互在一起,就顯得頁面混雜,不易維護(hù)。JSP頁面應(yīng)當(dāng)將數(shù)據(jù)的處理過程指派給一個(gè)或幾個(gè)beans來完成,我們只需在JSP頁面中調(diào)用這個(gè)beans即可。不提倡大量的數(shù)據(jù)處理都用java程序片來完成。在JSP頁面中調(diào)用beans,可有效的分離的靜態(tài)工作部分和動(dòng)態(tài)工作部分。9.1 編寫javabeans和使用javabeans9

4、.1.1 編寫beansJavabeans分為可視組件和非可視組件。在JSP中主要使用非可視組件。對(duì)于非可視組件,我們不必去設(shè)計(jì)它的外觀,主要關(guān)心它的屬性和方法。編寫javabeans就是編寫一個(gè)java的類,所以你只要會(huì)寫類就能編寫一個(gè)beans,這個(gè)類創(chuàng)建的一個(gè)對(duì)象稱做一個(gè)beans。為了能讓使用這個(gè)beans的應(yīng)用程序構(gòu)建工具(比如JSP引擎)知道這個(gè)beans的屬性和方法,只需在類的方法命名上遵守以下規(guī)則:(1)如果類的成員變量的名字是xxx,那么為了更改或獲取成員變量的值,即更改或獲取屬性,在類中就需要有兩個(gè)方法:getXxx():用來獲取屬性xxx。setXxx():用來修改屬性x

5、xx.。續(xù)前頁: public int getRadius() return radius; public void setRadius(int newRadius) radius=newRadius; public double circleArea() return Math.PI*radius*radius; public double circlLength() return 2.0*Math.PI*radius; 將上述java文件保存為Circle.java,并編譯通過,得到字節(jié)碼文件Circle.class。9.1.2 使用beans 為了在JSP頁面中使用benas,我們必須使

6、用JSP動(dòng)作標(biāo)簽:useBeanuseBean格式: 或下面就useBean標(biāo)簽中scope取值的不同情況闡述如下:scope取值page JSP引擎分配給每個(gè)客戶的beans是互不相同的,也就是說,盡管每個(gè)客戶的beans的功能相同,但它們占有不同的內(nèi)存空間。該beans的有效范圍是當(dāng)前頁面,當(dāng)客戶離開這個(gè)頁面時(shí),JSP引擎取消分配給該客戶的beans。scope取值session JSP引擎分配給每個(gè)客戶的beans是互不相同的,該beans的有效范圍是客戶的會(huì)話期間,也就是說,如果客戶在多個(gè)頁面中相互連接,每個(gè)頁面都含有一個(gè)useBeans標(biāo)簽,這些useBean標(biāo)簽中id的值相同,并且

7、scope的值都是session,那么,該客戶在這些頁面得到的beans是相同的一個(gè)。如果客戶在某個(gè)頁面更改了這個(gè)beans的屬性,其它頁面的這個(gè)beans的屬性也將發(fā)生同樣的變化。當(dāng)客戶關(guān)閉瀏覽器時(shí),JSP引擎取消分配給客戶的beans。scope取值request JSP引擎分配給每個(gè)客戶的beans是互不相同的,該beans的有效范圍是request期間??蛻粼诰W(wǎng)站的訪問期間可能請(qǐng)求過多個(gè)頁面,如果這些頁面含有socope取值是request的useBeans標(biāo)簽,那么pageCotent對(duì)象在每個(gè)頁面分配給客戶的beans也是互不相同的。JSP引擎對(duì)請(qǐng)求作出響應(yīng)之后,取消分配給客戶的這

8、個(gè)beans。scope取值application JSP引擎為每個(gè)客戶分配一個(gè)共享的beans,也就是說,所有客戶共享這個(gè)beans,如果一個(gè)客戶改變這個(gè)beans的某個(gè)屬性的值,那么所有客戶的這個(gè)beans的屬性值都發(fā)生了變化。這個(gè)beans直到服務(wù)器關(guān)閉才被取消.。注:當(dāng)使用作用域是session的beans時(shí),要保證客戶端支持Cooker. 為了使服務(wù)器的所有web服務(wù)目錄下的JSP頁面文件都能使用我們的beans,我們必須將上面編譯通過生成的字節(jié)碼類文件:Circle.class拷貝到JSP引擎的classes文件夾下,即D:tomcatJakarta-tomcat-4.0class

9、es下,如圖9.1所示。 另外,在使用beans的JSP頁面中,必須有如下的import指令: 圖9.1 在JSP引擎放置beans的目錄 在下面的例子1中,負(fù)責(zé)創(chuàng)建beans的類是上述的Circle類,創(chuàng)建的beans的名字是girl,girl的scope取值page。例子1useBeans.jsp: 圓的半徑是: 圓的周長是: 圓的面積是: 在下面的例子2中我們將beans的scope的值設(shè)為session 創(chuàng)建的beans的名字是girl,創(chuàng)建該beans的類文件仍然是上述的Circle.class。在beans1.jsp 頁面中,girl的半徑radius的值是1(圖9.2),然后連接

10、到beans2.jsp頁面,顯示半徑radius的值,然后將girl的半徑radius的值更改為400(圖9.3),當(dāng)再刷新beans1.jsp時(shí)會(huì)發(fā)現(xiàn)radius的值已經(jīng)變成了400(圖9.4)。圖9.2 beans1.jsp效果圖9.3 beans2.jsp效果圖9.4 刷新beans1.jsp后效果beans2.jsp: 圓的半徑是: 修改后的圓的半徑是: 在下面的例子3中,將beans的scope的值設(shè)為application。當(dāng)?shù)谝粋€(gè)客戶訪問這個(gè)頁面時(shí),顯示beans的屬性radius的值,然后把這個(gè)屬性的值修改為1000(圖9.5)。當(dāng)其它客戶訪問這個(gè)網(wǎng)頁時(shí),看到的這個(gè)屬性的值都是

11、1000(圖9.6)。圖9.5 第一個(gè)客戶訪問appbeans.jsp效果圖9.6 后續(xù)客戶訪問appbeans.jsp的效果9.2 beans的存放目錄(1)任何web服務(wù)目錄都可使用的beans的存放位置 如果讓任何web服務(wù)目錄中的JSP頁面都可以使用某個(gè)beans,那么創(chuàng)建這個(gè)beans的字節(jié)碼文件需存放在Tomcat安裝目錄的classes目錄中,例如,本書所用機(jī)器的Tomcat安裝目錄就是:D:tomcatJakarta-tomcat-4.0classes,如圖9.1所示。 我們已經(jīng)知道,當(dāng)服務(wù)器上某個(gè)含有useBean動(dòng)作標(biāo)簽的JSP頁面被加載執(zhí)行時(shí),JSP引擎將首先根據(jù)id的名

12、字,在一個(gè)同步塊中,查找JSP引擎內(nèi)置pageContent對(duì)象中是否含有名字id和作用域scope的對(duì)象,如果這個(gè)對(duì)象存在,JSP引擎就分配一個(gè)這樣的對(duì)象給客戶,這樣,客戶就獲得了一個(gè)作用域是scope、名字是id的benas。如果在pageContent中沒有查找到指定作用域、名字是id的對(duì)象,就根據(jù)class指定的類創(chuàng)建一個(gè)名字是id的對(duì)象,并添加到pageContent內(nèi)置對(duì)象中,并指定該對(duì)象的作用域是scope,同時(shí)JSP引擎分配給客戶一個(gè)作用域是scope、名字是id的beans。 JSP引擎的內(nèi)置PageContenet對(duì)象用來存儲(chǔ)供服務(wù)器使用的數(shù)據(jù)信息,通過該對(duì)象向客戶提供不同

13、類型的各種數(shù)據(jù)對(duì)象。當(dāng)含有ussBeans標(biāo)簽的JSP頁面被執(zhí)行后,beans就被存放在pageContenet對(duì)象中,如果你更改了創(chuàng)建beans的java類文件后,pageContent對(duì)象中的beans并不能被更新,這是因?yàn)槿魏蜫SP頁面再次被訪問執(zhí)行時(shí),總是先到pageContenet中查找beans。而pageContent對(duì)象直到服務(wù)器關(guān)閉才釋放它存儲(chǔ)的數(shù)據(jù)對(duì)象。(2)只對(duì)examples服務(wù)目錄可用的beans的存放目錄 examples是默認(rèn)web服務(wù)目錄之一,如圖9.7圖9.7 存放beans的目錄 如果想讓某個(gè)beans只對(duì)examples目錄下的JSP頁面可用,那么創(chuàng)建該b

14、eans的字節(jié)碼文件需存放在webapps/example/Web-inf/classes目錄中,如圖9.7所示。 存放在該目錄中的beans和存放在上面(1)中所述的目錄中的beans有所不同的是:JSP引擎首先檢查webapps/example/Web-inf/classes目錄中的創(chuàng)建該beans的字節(jié)碼文件是否被修改過,如果重新修改過,就會(huì)用新的字節(jié)碼文件創(chuàng)建一個(gè)beans,beans的名字是id,并添加到pageContent內(nèi)置對(duì)象中,并指定該對(duì)象的作用域是scope,同時(shí)JSP引擎分配給客戶一個(gè)作用域是scope、名字是id的beans。 如果經(jīng)常調(diào)試beans,可以把beans

15、放在webapps/example/Web-inf/classes。需要注意的是,當(dāng)用戶請(qǐng)求服務(wù)時(shí),由于服務(wù)器引擎每次都要檢查字節(jié)碼文件是否被修改過,將降低服務(wù)器的運(yùn)行效率。 下面是創(chuàng)建beans的java文件,將該文件編譯通過,把字節(jié)碼文件CircleTest.class存放到/webapps/example/Web-inf/classes目錄中。import java.io.*;public class CircleTest int radius; public CircleTest() radius=6500; public int getRadius() return radius; public void setRadius(int newRadius) radius=newRadius; public double c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論