第4章 JSP與JavaBean_第1頁
第4章 JSP與JavaBean_第2頁
第4章 JSP與JavaBean_第3頁
第4章 JSP與JavaBean_第4頁
第4章 JSP與JavaBean_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1第4章 JSP 與與 JavaBean 2本章主要內容: 編寫和使用JavaBean; 使用有關標記加載JavaBean、設置和獲取JavaBean的屬性值; 針對實際問題編寫JSP頁面。3 為了有利于為了有利于WebWeb應用的擴展和維護,應用的擴展和維護,我們編寫一個我們編寫一個WebWeb應用時,提倡將數據應用時,提倡將數據的表示和處理分離。的表示和處理分離。 1 1、JSPJSP頁面通過使用頁面通過使用HTMLHTML標記為用戶提標記為用戶提供一個友好的界面,數據的表示層。供一個友好的界面,數據的表示層。 2 2、JSPJSP頁面中變量的聲明、程序片以及頁面中變量的聲明、程序片以及表

2、達式為動態(tài)部分,對數據進行處理。表達式為動態(tài)部分,對數據進行處理。 4JavaBean 簡介 Sun公司對于JavaBean的定義是:“Java Beans是一個可重復使用的軟件部件”。 JavaBean是描述Java的軟件組件模型,是Java程序的一種組件結構,也是Java類的一種。 在Java模型中,通過JavaBean可以無限擴充Java程序的功能,通過JavaBean的組合可以快速的生成新的應用程序。 5 JavaBean JavaBean是一個可重復使用的軟件組件,是一個可重復使用的軟件組件,是遵循一定標準、用是遵循一定標準、用JavaJava語言編寫的一語言編寫的一個 類 , 該

3、類 的 一 個 實 例 稱 為 一 個個 類 , 該 類 的 一 個 實 例 稱 為 一 個JavaBeanJavaBean,簡稱,簡稱beanbean 6 JavaBean實質上是一個Java類,但有它獨有的特點,JavaBean的特性包括:1.是公共的類;2.構造函數沒有輸入參數;3.屬性必須聲明為private,方法必須聲明為public;4.用一組set方法設置內部屬性;5.用一組get方法獲取內部屬性;7 JavaBean和JSP技術的結合不僅可以實現表現層和商業(yè)邏輯層的分離,而且可以提高JSP程序的運行效率和代碼重用的程度,還可以實現并行開發(fā),是JSP編程中常用的技術。85.1 編

4、寫和使用編寫和使用JavaBean一、編寫bean 編寫一個JavaBean就是編寫一個Java的類,這個類創(chuàng)建的一個對象稱為一個bean,為了讓Tomcat知道這個bean的屬性和方法,我們必須在類的方法命名上遵守以下規(guī)則:9 1.1.如果類的成員變量的名字是如果類的成員變量的名字是xxxxxx,那么為了獲取或更,那么為了獲取或更改成員變改成員變 量的值,即獲取或更改屬性,類中必須提量的值,即獲取或更改屬性,類中必須提供兩個方法:供兩個方法: getXxxgetXxx()() 用來獲取屬性用來獲取屬性xxxxxx setXxx setXxx() () 用來修改屬性用來修改屬性xxxxxx 即

5、方法的名字用即方法的名字用getget或或setset為前綴,后綴是將成員變?yōu)榍熬Y,后綴是將成員變量名字的首字母大寫的字符序列。量名字的首字母大寫的字符序列。 2.2.對于對于booleanboolean類型的成員變量,即布爾邏輯類型的類型的成員變量,即布爾邏輯類型的屬性,允許使用屬性,允許使用“isis”代替上面的代替上面的“getget”和和“set”set”。 3.3.類中聲明的方法的訪問屬性都必須是類中聲明的方法的訪問屬性都必須是publicpublic的。的。 4.4.類中聲明的構造方法必須是類中聲明的構造方法必須是publicpublic、無參數的。、無參數的。 10 注意:bea

6、n必須要帶有包名。使用package語句給bean一個包名。 例如:package gping; package tom.jiafei; 例1 創(chuàng)建bean的源文件,該bean的作用計算圓的面積。11package mypackage;import java.io.* ;public class circle double radius;public void setRadius(double radius)this.radius=radius;public double getRadius()return radius;12public double circleLength()return

7、 radius*2*3.14;public double circleArea()return 3.14*radius*radius;13二、二、 使用使用Bean JavaBean可以在任何Java程序編寫環(huán)境下完成編寫,再通過編譯成為一個字節(jié)碼文件(.class文件),為了讓Tomcat找到這個字節(jié)碼,必須把字節(jié)碼文件放在特定的位置. 14Bean的保存 在當前在當前WebWeb服務目錄下建立如下目錄結構:服務目錄下建立如下目錄結構: Web服務目錄服務目錄WEB-INFclasses 根據類的包名,在目錄根據類的包名,在目錄classesclasses下建立相應的下建立相應的子目錄子目錄

8、. .比如比如: : Web Web服務目錄服務目錄WEB-INFclassestomjiafeiWEB-INFclassestomjiafei注意:啟用這些目錄,必須重新啟動注意:啟用這些目錄,必須重新啟動TomcatTomcat服服務器。將務器。將.class.class文件復制到該目錄下即可。文件復制到該目錄下即可。 152. JSP頁面中使用頁面中使用bean 使用使用JSPJSP動作標記:動作標記:useBeanuseBean。 useBeanuseBean標記的格式:標記的格式: 或或16useBean語句執(zhí)行流程 在useBean標簽中獲得id,scope的值在pageConte

9、nt中查找指定的id,scope值的對象。這個對象存在嗎?Y創(chuàng)建指定id,scope值的一個 對 象 , 添 加 到papeContent中給客戶分配一個指定id,scope值的對象useBean語句執(zhí)行結束useBean語句執(zhí)行開始N17 標簽的基本屬性含義見圖18 例如: 19Bean是如何被加載的? Tomcat服務器1、首先根據id的名字,在Tomcat內置的pageContent對象中看是否含有名字id和作用域scope的對象;2、如果該對象存在,Tomcat就將這個對象的副本(Bean)分配給JSP頁面;3、如果沒有找到,就根據class指定的類創(chuàng)建一個名字是id的Bean,并添加

10、到pageContent對象中,同時將這個Bean分配給JSP頁面。20 注意:首次創(chuàng)建一個新的Bean,需要相應的字節(jié)碼文件,以后用的是副本,如果修改了字節(jié)碼文件,必須重新啟動Tomcat服務器,才能使用新的字節(jié)碼文件。21Scope的取值1、scope取值page 該Bean 的有效范圍是當前頁面。當客戶請求Bean時,分配內存空間給它,當客戶離開這個頁面時,便取消分配的Bean,并收回內存空間。 Tomcat分配給每個JSP頁面的Bean是不相同的。它占有的內存空間不同。22 注意:當兩個客戶訪問同一個JSP頁面時,一個用戶對自己Bean的屬性的改變,不會影響到另一個客戶。232、sco

11、pe取值session Bean的有效范圍是客戶的會話期間。如果客戶在多個頁面中互相連接,每個頁面都含有一個相同的useBean標記,那么這個客戶在這些頁面得到的bean是相同的,即占有相同的內存空間。當會話結束,Bean也消失,釋放空間。24 注意:如果客戶在某個頁面更改了Bean的某個屬性,那么其他頁面的Bean的屬性也發(fā)生變化。 兩個客戶同時訪問一個JSP頁面時,一個用戶對自己Bean的屬性的改變不會影響到另一個客戶。253、scope取值request Bean的有效范圍是request期間。客戶在網站訪問時請求多個頁面,如果每個頁面都含有useBean標記,那么在每個頁面分配的bea

12、n也不相同。Tomcat服務器對請求作出相應后,Bean消失。26 注意:當兩個客戶同時請求一個JSP頁面時,一個用戶對自己Bean屬性的改變,不會影響另外一個客戶。274、scope取值application Bean的有效范圍是application期間。Tomcat服務器為所有的JSP頁面分配一個共享的bean. 當幾個客戶同時訪問一個JSP頁面時,任何一個客戶對自己的bean的屬性的改變都會影響到其他用戶。28例編寫一個圓bean,計算圓的面積和周長問題分析:問題分析:這里部署圓bean的三個步驟:1給bean起一個包名small.dog。由于Tomcat服務器要求bean字節(jié)碼必須放

13、在一個包中。我們在編寫Circle.java時,使用package語句給bean起的包名是small.dog。2創(chuàng)建包small.dog。在某目錄下創(chuàng)建子目錄smalldog,把編譯后的字節(jié)碼文件Circle.class復制到smalldog目錄下,這就完成了small.dog包的創(chuàng)建。3把包small.dog復制到存放bean的公有目錄中。Tomcat5.0服務器存放bean字節(jié)碼的公有目錄是Tomcat 5.0commonclasses,我們將smalldog目錄復制到Tomcat 5.0commonclasses目錄下,就完成了包small.dog包的復制。程序結構:程序結構:由Circ

14、le.java類實現bean功能;useBean.jsp頁面調用圓bean。29程序算法:程序算法: Circle.java:聲明三個變量,表示圓的半徑/面積/周長:radius/circleArea/circleLength定義三個方法,分別獲取圓的半徑/面積/周長的值 useBean.jsp:導入包small.dog以類small.dog.Circle創(chuàng)建一個對象,對象名是:girl設置對象girl的半徑為100輸出對象girl的半徑,周長,面積的值。3031Package small.dog;import java.io.* ;public class circle double rad

15、ius;public void setRadius(double radius)this.radius=radius;public double getRadius()return radius;32public double circleLength()return radius*2*3.14;public double circleArea()return 3.14*radius*radius;33例例1useBeans示例 圓的半徑是: beans2.jsp 34測試測試bean的生命周期的生命周期例例2bean1.jsp 圓的半徑是: bean2.jsp 35bean2.jsp 圓的半

16、徑是: 修改后的圓的半徑是:bean1.jsp 36例子例子3appbean.jsp 圓的初始半徑是: 修改后的圓的半徑是: 37user.jsp;Hello : ;注:該bean作用范圍還包括a.jsp384.2 獲取和修改bean的屬性 當使用useBean創(chuàng)建好一個bean后,就可以使用這個bean了。比如修改屬性、使用類中的方法等。 我們還可以使用和 標記設置和獲取bean的屬性。39一、一、動作標簽動作標簽getPropertygetProperty 使用該標記可以獲得使用該標記可以獲得beanbean的屬性值的屬性值 . .格式如下:格式如下:或或這條指令相當于這條指令相當于get

17、Xxx()方法。方法。40NewCircle.javapackage tom.jiafei;import java.io.*;public class NewCircle double radius=1,circleArea,circleLength; public double getRadius() return radius; public void setRadius(double newRadius) radius=newRadius; public double getCircleArea() circleArea=Math.PI*radius*radius; return cir

18、cleArea; public double getCircleLength() circleLength=2.0*Math.PI*radius; return circleLength; 41beanGetProperty.jsp 圓的半徑是:圓的面積是:圓的周長是:42二、二、動作標記動作標記setProperty 使用該標記可以設置使用該標記可以設置beanbean的屬性值,可以通過的屬性值,可以通過3 3種方式設置種方式設置beanbean屬性的值。屬性的值。1 1、將、將beanbean屬性的值設置為一個表達式的值或字屬性的值設置為一個表達式的值或字符串。符串。 設置為一個表達式的值

19、格式如下:設置為一個表達式的值格式如下:jsp:setProperty name=bean的名字的名字 property= bean的屬性的屬性 value= /43 設置為一個字符串格式如下:設置為一個字符串格式如下: 注意:表達式值和字符串的值都會注意:表達式值和字符串的值都會自動地轉化自動地轉化為為bean屬性的類型屬性的類型。44 Java語言字符串轉換為其他數值類型的方法: Integer.parseInt(String s) Long.parseLong(String s) Float.parseFloat(String s) Double.parseDouble(String s

20、)45 例5 定義一個描述學生基本信息的類Student.java。在編寫student.jsp,使用動作標記設置、獲取相關的屬性。46Student.javaPackage tom.jiafei;public class Student String name=null; long number; double height,weight; public String getName() return name; public void setName(String newName) name=newName; public long getNumber() return number; p

21、ublic void setNumber(long newNumber) 47 number=newNumber; public double getHeight() return height; public void setHeight(double newHeight) height=newHeight; public double getWeight() return weight; public void setWeight(double newWeight) weight=newWeight; 48例子例子5student.jsp 名字是: 學號是: jsp:setProperty

22、 name=zhang property=height value=/身高是: 米 體重是: 公斤492 2、通過、通過HTTPHTTP表單的參數的值來設置表單的參數的值來設置beanbean的相應屬性的值的相應屬性的值: : 注意:格式中不用再具體指定注意:格式中不用再具體指定beanbean屬性的屬性的值,將對應表單中哪個參數指定的,系值,將對應表單中哪個參數指定的,系統會統會自動根據名字進行配對自動根據名字進行配對。50 例6 用戶通過表單的形式來指定表單的值。51Goods.java 商品類:價格,名稱,數量package tom.jiafei;public class Goods S

23、tring name, goodsNumber; double price; public String getName() return name; public void setName(String newName) name=newName; 52public String getGoodsNumber() return goodsNumber; public void setGoodsNumber(String s) goodsNumber=s; public double getPrice() return price; public void setPrice(double ne

24、wPrice) price=newPrice; 53例子例子6goods.jsp 輸入商品的名稱: 輸入商品的代號: 輸入商品的價格: 提交表單才能設置商品的信息 商品的名稱:商品的代號:商品的價格:543 3、通過、通過requestrequest的參數的值來設置的參數的值來設置beanbean的的相應屬性的值,要求相應屬性的值,要求requestrequest參數名字參數名字必須與必須與beanbean屬性的名字相同屬性的名字相同其格式如下:其格式如下:55例例7 7 使用使用requestrequest參數設置參數設置beanbean的屬的屬性的值性的值56 JSP頁面中調用JavaBe

25、an的一般操作方法:(1)編寫實現特定功能的JavaBean;(2)應用在JSP頁面中聲明并初始化JavaBean,這個JavaBean有一個唯一的id標志,還有一個生存范圍scope(根據具體的需要進行指定),同時還要指定JavaBean的class來源(如mybean.LoginBeanr);(3)調用JavaBean提供的public方法或者直接使用和標簽來得到 和設置JavaBean中屬性的值。 (4)調用JavaBean中的特定方法完成指定的功能。57課堂實踐 任務1 使用JavaBean實現計數器。counter.java實現計數操作; counter.jsp通過Bean中的方法顯

26、示訪問計數; counter1.jsp通過讀取Bean中的屬性顯示訪問計數。585.3 bean的輔助類的輔助類 有時在寫一個有時在寫一個beanbean的時候,可能還需要的時候,可能還需要自己編寫的其他類,那么只要將這些類自己編寫的其他類,那么只要將這些類和創(chuàng)建和創(chuàng)建beanbean的類寫在一個的類寫在一個JavaJava源中即可,源中即可,但必須按將源文件編譯后產生的全部字但必須按將源文件編譯后產生的全部字節(jié)碼文件復制到相應的目錄中節(jié)碼文件復制到相應的目錄中 . .59 例8 定義一個beanListFile,列出JSP頁面所在目錄中特定擴展名的文件。再定義一個實現FilenameFilt

27、er接口的輔助類FileName,該類可以幫助我們的bean列出指定擴展名的文件。60ListFile.javapackage tom.jiafei;import java.io.*;class FileName implements FilenameFilter String str=null; FileName (String s) str=.+s; public boolean accept(File dir,String name) return name.endsWith(str); 61public class ListFile String extendsName=null; S

28、tringBuffer allFileName; public void setExtendsName(String s) extendsName=s; public String getExtendsName() return extendsName; public StringBuffer getFileName() File dir=new File(d:/2000); FileName help=new FileName(extendsName); String file_name=dir.list(help); for(int i=0;ifile_name.length;i+) al

29、lFileName.append(file_namei+ ); return allFileName; 62file.jsp 輸入文件的擴展名: 擴展名是 的文件有: 635.4 舉例 例10 定義一個三角形bean計算三角形的面積,再編寫一個JSP頁面,該頁面提供一個表單,用戶可以通過表單將三角形三邊的長度提交給該頁面。 該bean能判斷三條邊能否構成一個三角形64 分析:在三角形bean中應該設計幾個屬性,分別代表什么含義?需要提供哪些方法?65問題分析:問題分析:部署三角形bean的步驟:1給bean起一個包名small.dog。編寫Triangle.java時,使用package語句給

30、bean起的包名是small.dog。2把編譯后的字節(jié)碼文件Triangle.class復制到存放bean的公有目錄Tomcat 5.0commonclasses smalldog 目錄下。這也意味著,Triangle.class字節(jié)碼保存在small.dog包中。程序結構:程序結構:由Triangle.java類實現bean功能;Triangle.jsp頁面調用bean。66程序算法:程序算法:Triangle.java:聲明5個變量,保存bean的5種屬性:sideA, sideB, sideC, area, triangle。定義方法getArea(),計算三角形面積。定義方法boole

31、an isTriangle(),判斷給出的三條邊能否構成一個三角形。 Triangle.jsp: 1導入包small.dog2創(chuàng)建一個表單,該表單包含三個文本框(接受客戶輸入三條邊的長度)3以類small.dog.Triangle創(chuàng)建一個對象,對象名是triangle。4給對象triangle的屬性(sideA,sideB,sideC)賦值。5. 將對象triangle的屬性值輸出。 67Triangle.javapackage red.star;public class Triangle double sideA=-1,sideB=-1,sideC=-1, area=-1; boolean

32、triangle; public void setSideA(double a) sideA=a; public double getSideA() return sideA; public void setSideB(double b) sideB=b; public double getSideB() return sideB; 68public void setSideC(double c) sideC=c; public double getSideC() return sideC; public double getArea() double p=(sideA+sideB+sideC

33、)/2.0; if(triangle) area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC); return area; public boolean isTriangle() if(sideAsideB+sideC&sideBsideA+sideC&sideCsideA+sideB) triangle=true; else triangle=false; return triangle; 69triangle.jsp 輸入三角形三邊: 邊A: 邊B: 邊C: 三角形的三邊是: 邊A:, 邊B:, 邊C:.這三個邊能構成一個三角形嗎?面積

34、是: 70四則運算bean例11 定義一個四則運算bean 完成四則運算,再編寫一個JSP頁面,該頁面提供一個表單,用戶可以通過表單將兩個運算數和運算符提交給該頁面。71 分析:在四則運算bean中應該設計幾個屬性,分別代表什么含義?需要提供哪些方法?72ComputerBean.javapackage red.star;public class ComputerBean double numberOne,numberTwo,result; String operator=+; public void setNumberOne(double n) numberOne=n; public dou

35、ble getNumberOne() return numberOne; public void setNumberTwo(double n) numberTwo=n; public double getNumberTwo() return numberTwo; 73public void setOperator(String s) operator=s.trim(); public String getOperator() return operator; public double getResult() if(operator.equals(+) result=numberOne+num

36、berTwo; else if(operator.equals(-) result=numberOne-numberTwo; else if(operator.equals(*) result=numberOne*numberTwo; else if(operator.equals(/) result=numberOne/numberTwo; return result; 74computer.jsp Input type=text name=numberOne value= size=6 + - * / Input type=text name=numberTwo value= size=6

37、 = 75計數器計數器bean 記錄某個web服務目錄(通常所說的網站)被訪問的次數。但需要限制客戶通過不斷刷新頁面或再次訪問該網站的其他頁面來增加計數。76comeOne.jsp Welcome歡迎您訪問本站,這是本網站的comeOne.jsp頁面 您是第 個訪問本網站的客戶。 歡迎去comeTwo.jsp參觀 77comeTwo.jsp Welcome歡迎您訪問本站,這是本網站的comeTwo.jsp頁面 您是第 個訪問本網站的客戶。 歡迎去comeOne.jsp參觀78CounterCount.javapackage red.star;import java.io.*;public cl

38、ass CounterCount int number=0; boolean isCome=false; File file=new File(count.dat) ; private void countPeople() if(!file.exists() number+; try file.createNewFile(); FileOutputStream out=new FileOutputStream(file); DataOutputStream dataOut=new DataOutputStream(out); dataOut.writeInt(number); out.clos

39、e(); dataOut.close(); catch(IOException ee) 79else try FileInputStream in=new FileInputStream(file); DataInputStream dataIn=new DataInputStream(in); number=dataIn.readInt(); number+; in.close(); dataIn.close(); FileOutputStream out=new FileOutputStream(file); DataOutputStream dataOut=new DataOutputS

40、tream(out); dataOut.writeInt(number); out.close(); dataOut.close(); catch(IOException ee) isCome=true; 80public int getNumber() if(isCome=false) countPeople(); return number; 81瀏覽圖像瀏覽圖像 bean 單擊“上一張”或“下一張”瀏覽圖像82Play.javapackage red.star;import java.io.*;class FileName implements FilenameFilter /輔助類 p

41、ublic boolean accept(File dir,String name) boolean boo=false; if(name.endsWith(.jpg)|name.endsWith(.JPG) boo=true; return boo; 83public class Play int imageNumber=0,max; String pictureName, playImage; public Play() File dir=new File(D:/apache-tomcat-5.5.20/webapps/ch4/image); pictureName=dir.list(ne

42、w FileName(); max=pictureName.length; public void setImageNumber(int n) if(n0) n=max-1; if(n=max) n=0; imageNumber=n; 84public int getImageNumber() return imageNumber; public String getPlayImage() playImage=new String(); return playImage; 85play.jsp 單擊上一張或下一張按鈕瀏覽圖像 Input type=hidden name=imageNumber

43、 value= Input type=hidden name=imageNumber value= 86成績單成績單 beanScoreList.javapackage red.star;public class ScoreList String studentName,courseName=,score=; StringBuffer scoreWatch=new StringBuffer(); public void setScore(String n) score=n; public void setStudentName(String s) studentName=s; public v

44、oid setCourseName(String s) courseName=s; public String getCourseName() return courseName; 87 public StringBuffer getScoreWatch() if(studentName!=null&studentName.length()0&score.length()0) scoreWatch.append(); scoreWatch.append(); scoreWatch.append(studentName); scoreWatch.append(); scoreWa

45、tch.append(); scoreWatch.append(+score); scoreWatch.append(); scoreWatch.append(); studentName=; score=; return scoreWatch; 88studentScore.jsp 課程名稱:Input type=text name=courseName value= 學生姓名: 學生成績: 89日歷日歷bean 90CalendarBean.javapackage red.star;import java.util.*;public class CalendarBean String calendar=null; int year=-1,month=-1; public void setYear(int year) this.year=year; public int getYea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論