JavaBean筆記新_第1頁(yè)
JavaBean筆記新_第2頁(yè)
JavaBean筆記新_第3頁(yè)
JavaBean筆記新_第4頁(yè)
JavaBean筆記新_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、3、課程名稱:JavaBeanJavaBean是整個(gè)JSP的核心部分,如果不會(huì)編寫JavaBean則基本上等同于JSP不會(huì),所以在JavaBean的編寫中大家一定要把Java中所學(xué)習(xí)到的各個(gè)概念都要應(yīng)用上,尤其是最后編寫的DAO程序。3.1、JavaBean簡(jiǎn)介JavaBean使用java語(yǔ)言開發(fā)的一個(gè)可以重用的組件,在jsp開發(fā)中可以使用JavaBean減少重復(fù)的代碼,使得jsp代碼開發(fā)的更簡(jiǎn)潔,Jsp搭配JavaBean來使用,有以下優(yōu)點(diǎn):(1) 可以將HTML代碼和java代碼分離,將(HTML和)寫到頁(yè)面代碼又多又亂(2) 將常用的程序?qū)懗山M件,當(dāng)使用時(shí),只要調(diào)用組件來執(zhí)行用戶所要的功

2、能,不用再重復(fù)寫相同的程序,節(jié)省開發(fā)時(shí)間。JavaBean實(shí)際上就是一個(gè)個(gè)的Java類,里面完全符合于面向?qū)ο蟮母鱾€(gè)基本概念,在JSP之中可以通過javaBean完成一些細(xì)小的功能實(shí)現(xiàn),也可以使用JavaBean封裝一些公共的程序代碼。在JSP中如果要想使用一個(gè)JavaBean,有如下幾個(gè)原則(以簡(jiǎn)單JavaBean為準(zhǔn)):· 所有的JavaBean必須放在一個(gè)包中;· 所有的javaBean必須聲明為public class· 類中的所有屬性都必須封裝· 封裝之后的屬性通過setter、getter方法設(shè)置和獲取· 如果現(xiàn)在是通過了JSP標(biāo)簽

3、進(jìn)行JavaBean調(diào)用的話,則必須存在一個(gè)無參構(gòu)造方法。范例:下面就定義了一個(gè)簡(jiǎn)單的javaBean (簡(jiǎn)單叫法 POJO 類)P.hbmu.demo ;public class SimpleBean private String name ;private int age ;public void setName(String name) = name ;public void setAge(int age)this.age = age ;public String getName()return ;public int get

4、Age()return this.age ;無參的構(gòu)造方法,自動(dòng)生成但是,在這里面一個(gè)問題就出現(xiàn)了,到底這個(gè)javaBean要保存在那里?如果要想解決這個(gè)問題,首先就必須掌握一下整個(gè)WEB目錄的標(biāo)準(zhǔn)結(jié)構(gòu):WEB ROOTà虛擬目錄就指向此文件夾|- WEB-INFà安全級(jí)別最高|- web.xmlàWEB的部署描述符|- classesà存放所有的*.class文件|- libà存放所有的*.jar文件|- pagesà存放所有的頁(yè)面文件的|- frontà前臺(tái)展示界面|- backà后臺(tái)管理界面|- images

5、à存放所有的圖片|- cssà存放所有的樣式表文件|- jsà存放所有的Java腳本文件|- index.htm、index.jspà首頁(yè)所以,JavaBean肯定是保存在WEB-INF/classes文件夾之中。JavaBean最終肯定也是以類的形式運(yùn)行的,所以必須將*.java文件編譯成*.class文件。3.2、調(diào)用JavaBeanJavaBean的調(diào)用有兩種形式,一種是通過page指令導(dǎo)入,另外一種是通過標(biāo)簽指令導(dǎo)入,此時(shí),一定要記住的是,在WEB-INF/classes文件夾本身也是一個(gè)CLASSPATH的路徑。、通過page指令導(dǎo)入通過pag

6、e的import屬性就可以導(dǎo)入編譯好的*.class文件。_JavaBean_demo01.jsp<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo.*"%><%SimpleBean simple = new SimpleBean() ;simple.setName("張三") ;simple.setAge(30) ;%><h2>姓名:<%=si

7、mple.getName()%></h2><h2>年齡:<%=simple.getAge()%></h2>這個(gè)時(shí)候已經(jīng)完成了調(diào)用的過程,實(shí)際上這一點(diǎn)與之前的導(dǎo)包操作沒太大的區(qū)別。、通過標(biāo)簽指令導(dǎo)入在JavaBean的操作中,也可以通過以下的標(biāo)簽進(jìn)行JavaBean的聲明:use_JavaBean_demo02.jsp<jsp:useBean id="實(shí)例化對(duì)象的名稱" class="包.類名稱" scope="保存范圍">范例:通過標(biāo)簽使用JavaBean use_Ja

8、vaBean_demo02.jsp<% page contentType="text/html" pageEncoding="GBK"%><jsp:useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/><%simple.setName("張三") ;simple.setAge(30) ;%><h2>姓名:<%=simple.getName

9、()%></h2><h2>年齡:<%=simple.getAge()%></h2>/<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo.*"%><jsp:useBean id="simple" scope="page" class=".hbmu.demo.SimpleBean

10、"></jsp:useBean><%simple.setName("張三") ;simple.setAge(30) ;%><h2>姓名:<%=simple.getName()%></h2><h2>年齡:<%=simple.getAge()%></h2>實(shí)際上,在使用以上的標(biāo)簽指令的時(shí)候,就意味著,程序?qū)⒆詣?dòng)進(jìn)行javaBean對(duì)象的實(shí)例化,JavaBean調(diào)用也是依靠了反射的操作原理,通過反射進(jìn)行對(duì)象的實(shí)例化的實(shí)現(xiàn)。如果此時(shí)要想驗(yàn)證的話,可以直接在SimpleBe

11、an中定義一個(gè)無參構(gòu)造方法,此構(gòu)造方法中有一個(gè)輸出的操作。package org.lxh.demo ;public class SimpleBean private String name ;private int age ;public SimpleBean()System.out.println("*") ;public void setName(String name) = name ;public void setAge(int age)this.age = age ;public String getName()return

12、;public int getAge()return this.age ;但是,這個(gè)時(shí)候有一個(gè)問題出現(xiàn)了,如果每次在更改javaBean的時(shí)候都要重新啟動(dòng)服務(wù)器則開發(fā)太麻煩了,所以此時(shí),可以通過一個(gè)配置,讓Tomcat自動(dòng)的加載新的修改后的javabean,修改server.xml文件。<Context path="/mldn" docBase="D:mldnwebdemo" reloadable="true"/>使用reloadable之后,以后只要是JavaBean修改之后,服務(wù)器過一段時(shí)間都可以將其自動(dòng)加載進(jìn)來,但是

13、由于這種情況,服務(wù)器一直處于監(jiān)聽修改狀態(tài)的操作,所以對(duì)于發(fā)布的服務(wù)器而言,這種性能是極其差的,所以這種操作只有在開發(fā)的時(shí)候才會(huì)使用,而真正運(yùn)行的時(shí)候肯定將其設(shè)置成false,而且一定要記住的是,如果真的出現(xiàn)了重新加載之后,則之前所有設(shè)置的session都將小時(shí),重新加載就跟重新啟動(dòng)沒什么區(qū)別。2010-4-1 10:40:56 org.apache.catalina.core.StandardContext reload信息: Reloading this Context has started當(dāng)出現(xiàn)以上提示的時(shí)候就表示服務(wù)器已經(jīng)重新加載了新的內(nèi)容上來。3.3、JavaBean與表單要想將Ja

14、vaBean的優(yōu)點(diǎn)發(fā)揮出來,必須使用表單的操作,結(jié)合表單才可以發(fā)現(xiàn)JavaBean的優(yōu)點(diǎn)。范例:現(xiàn)在有如下的一個(gè)表單 input_bean.html<form action="input.jsp" method="post">姓名:<input type="text" name="name"><br>年齡:<input type="text" name="age"><br><input type="s

15、ubmit" value="提交"><input type="reset" value="重置"></form>一定要注意,現(xiàn)在表單中的參數(shù)與SimpleBean中的完全一樣,下面分兩種情況進(jìn)行Javabean的調(diào)用。范例:通過page指令調(diào)用 input.jsp<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo

16、.*"%><%request.setCharacterEncoding("GBK") ;%><%SimpleBean simple = new SimpleBean() ;simple.setName(request.getParameter("name") ;simple.setAge(Integer.parseInt(request.getParameter("age") ;%><h2>姓名:<%=simple.getName()%></h2><h2

17、>年齡:<%=simple.getAge()%></h2>這種方式是一種較為常用的形式,但是這種方法本身也有問題,即:所有請(qǐng)求參數(shù)只能一個(gè)個(gè)的設(shè)置到了SimpleBean之中,如果現(xiàn)在一次性傳遞了多個(gè)參數(shù)過來,則肯定很麻煩。范例:通過javaBean完成 input_bean.jsp<% page contentType="text/html" pageEncoding="GBK"%><%request.setCharacterEncoding("GBK") ;%><jsp:

18、useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/><jsp:setProperty name="simple" property="*"/><h2>姓名:<%=simple.getName()%></h2><h2>年齡:<%=simple.getAge()%></h2><jsp:setProperty name=

19、"simple" property="*"/>含義如下:· 表示的是設(shè)置SimpleBean中的屬性內(nèi)容· name:就是訪問的id· property:表示訪問的屬性,如果是“*”的話表示自動(dòng)匹配現(xiàn)在的代碼不用手工設(shè)置屬性內(nèi)容,而且如果是數(shù)字的話,會(huì)自動(dòng)完成轉(zhuǎn)換,那么這種機(jī)制實(shí)際上就是依靠的反射完成的,在設(shè)置的時(shí)候?qū)嶋H上是根據(jù)表單的參數(shù)名稱找到了對(duì)應(yīng)的setter方法,如果參數(shù)名稱不合法,則無法設(shè)置,這一點(diǎn)與之前講解的setter、getter的反射調(diào)用完全一樣,那么更進(jìn)一步的解釋,對(duì)于setter、getter方法

20、本身是有其自己的命名方式的,必須與屬性保持一致,所以也可以簡(jiǎn)單的理解為提交參數(shù)必須和屬性名稱一致,才可以完成設(shè)置,但是在這之中有一個(gè)需要注意的地方,就是如果對(duì)于輸入數(shù)字的地點(diǎn)放,輸入的是字符串,則將出現(xiàn)異常。3.4、屬性的設(shè)置之前已經(jīng)見過了一種屬性的設(shè)置操作了,通過“*”完成自動(dòng)的匹配功能,但是除了這種功能之外,在JavaBean中還有四種屬性設(shè)置方法:· 自動(dòng)匹配:<jsp:setProperty name="simple" property="*"/>· 設(shè)置一個(gè)指定屬性:<jsp:setProperty nam

21、e="simple" property="name"/>· 指定參數(shù):<jsp:setProperty name="simple" property="name" param="age"/>,將age參數(shù)的內(nèi)容給name屬性· 設(shè)置具體內(nèi)容:<jsp:setProperty name="simple" property="name" value="張三"/>3.5、屬性的取得如果現(xiàn)在要想

22、完成屬性的取得操作可以使用<jsp:getProperty>語(yǔ)法完成。 value_bean.jsp<% page contentType="text/html" pageEncoding="GBK"%><%request.setCharacterEncoding("GBK") ;%><jsp:useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/&g

23、t;<jsp:setProperty name="simple" property="*"/><h2>姓名:<jsp:getProperty name="simple" property="name"/></h2><h2>年齡:<jsp:getProperty name="simple" property="age"/></h2>通過這種標(biāo)簽已經(jīng)可以完全的進(jìn)行了屬性的操作了。3.6、JavaB

24、ean的屬性范圍Javabean本身也是有四種屬性范圍的:page、request、session、application,但是與之前的四種屬性范圍不同的是,現(xiàn)在的page屬性范圍直接通過page指定即可,而不用通過pageContext指定,下面為了方便測(cè)試,做一個(gè)簡(jiǎn)單的JavaBean。四種范圍在整個(gè)javabean中同時(shí)保存了4中屬性范圍而且這四種屬性范圍在使用的時(shí)候一般不建議修改以下以Count.java為例:package .humu.demo;public class Countprivate int count=0;public Count()System.out.p

25、rintln("*對(duì)象被實(shí)例化*");public void setCount(int count)this.count=count;public int getCount()return +this.count;1. page范圍:只在當(dāng)前頁(yè)面保存 page_bean01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="pag

26、e"/><%System.out.println("-");%><h2>頁(yè)面被訪問了<font color="red"><jsp:getProperty name="count" property="count"/></font>次!</h2>每刷新一次對(duì)象都要被實(shí)例化,證明只在當(dāng)前也中保存信息有效,跳轉(zhuǎn)之后無效跳轉(zhuǎn)后是否有效:<jsp:forward page="pageBean02.jsp">

27、</jsp:forward><% page language="java" import="java.util.*" pageEncoding="GB2312"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html> <jsp:useBean id="cou" scope="page" class=".hubmu.demo

28、.Count"></jsp:useBean> <body> <h3>第<jsp:getProperty property="count" name="cou"/>次訪問</h3> </body></html>2.request范圍(一次服務(wù)器跳轉(zhuǎn)有效)范例:requestDemo01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="

29、;count" class="org.zxl.demo.Count" scope="request"/><%System.out.println("*");%><h2>頁(yè)面被訪問了<font color="red"><jsp:getProperty name="count" property="count"/></font>次!</h2><jsp:forward page="

30、;requestDemo02.jsp"/>requestDemo02.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="request"/><h2>頁(yè)面被訪問了<font color="red"><jsp:getProperty name="count&quo

31、t; property="count"/></font>次!</h2>每刷新一次對(duì)象只被實(shí)例化一次3.session范圍:范例:SessionDemo01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="session"/><h2>頁(yè)面被訪問了<font color

32、="red"><jsp:getProperty name="count" property="count"/></font>次!</h2>4.application范圍范例:ApplicationDemo01.jsp4、總結(jié)1、JavaBean可以封裝Java程序2、JavaBean中自動(dòng)設(shè)置形式對(duì)于接收表單參數(shù)比較方便3、JavaBean也存在四種屬性范圍注冊(cè)驗(yàn)證:package .hbmu.demo;import java.util.HashMap;import java.ut

33、il.Map;public class Register private String name;private String age;private String email;private Map<String, String> errors = null;public Register() = ""this.age = ""this.email = ""this.errors = new HashMap<String, String>();public boolean isValida

34、te() boolean flag = true;if (!.matches("w6,15") flag = false; = ""this.errors.put("errorname", "用戶名應(yīng)該是六到十五位的字母或者數(shù)字");if (!this.email.matches("w+w+.w+.?w*") flag = false;this.email = ""this.errors.put("errormail",

35、 "輸入的郵件地址不合法");if (!this.age.matches("d+") flag = false;this.age = ""this.errors.put("errorage", "年齡只能是數(shù)字");return flag;public String getErrorMsg(String key) String value = this.errors.get(key);return value = null ? "" : value;public String

36、 getName() return name;public void setName(String name) = name;public String getAge() return age;public void setAge(String age) this.age = age;public String getEmail() return email;public void setEmail(String email) this.email = email;<% page language="java" import="java.

37、util.*" pageEncoding="GB2312"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html><%request.setCharacterEncoding("GBK");%><jsp:useBean id="reg" class=".hbmu.demo.Register" scope="request">

38、;</jsp:useBean><body><form action="check.jsp" method="post">用戶名:<input type="text" name="name"value="<jsp:getProperty name="reg" property="name"/>" /><%=reg.getErrorMsg("errorname")%>&

39、lt;br>年齡:<input type="text" name="age"value="<jsp:getProperty name="reg" property="age"/>" /><%=reg.getErrorMsg("errorage")%><br>email:<input type="text" name="email"value="<jsp:getProperty name="reg" property="email"/>" /><%=reg.getErrorMsg("errormail")%><br><input type="submit" value="提交"></form></body></html><% pag

溫馨提示

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