一、JavaBean的優(yōu)點(diǎn):
*************************************************************************************
A.不需要用到Java語(yǔ)法
B.對象的共享更簡(jiǎn)單
C.請求參數與對象屬性之間可以方便地對應起來(lái)
*************************************************************************************
二、JavaBean的特點(diǎn):
*************************************************************************************
A.bean類(lèi)必須擁有一個(gè)零參數的(默認)構造函數:JSP元素創(chuàng )建bean時(shí),會(huì )調用默認的構造函數。實(shí)際的應用中經(jīng)常會(huì )由servlet創(chuàng )建bean,JSP頁(yè)面只是從中查詢(xún)數據。
B.bean類(lèi)不應該有公開(kāi)的實(shí)例變量(字段):要成為JSP可以訪(fǎng)問(wèn)的bean,相應的類(lèi)應該使用訪(fǎng)問(wèn)器方法(access method)取代對實(shí)例變量的直接訪(fǎng)問(wèn)。
C.持續性的值應該通過(guò)getXxx和setXxx方法來(lái)訪(fǎng)問(wèn):盡管我們可以使用JSP script或表達式訪(fǎng)問(wèn)類(lèi)的任意方法,但是,訪(fǎng)問(wèn)bean的標準JSP只能使用那些遵循getXxx/setXxx或isXxx/setXxx命名約定的方法。
*************************************************************************************
三、JavaBean的構建:
*************************************************************************************
A.<jsp:useBean id = “name”class = “package.Class”/>
這個(gè)語(yǔ)句表示:實(shí)例化由Class指定的類(lèi),并將實(shí)例化后的對象綁定到_jspService中的變量,變量的名字由id指定。
B.一定要使用完全限定類(lèi)名——包括包名的類(lèi)名。不管你是否使用<%@ page import…%>引入包,都要滿(mǎn)足這個(gè)要求。
C.jsp:useBean動(dòng)作規定:僅當不存在相同id和scope的bean時(shí)才實(shí)例化新的對象
*************************************************************************************
四、bean類(lèi)的安裝:
*************************************************************************************
A.單個(gè)bean類(lèi)的正確位置是WEB-INF/classes/subdirectoryMatchingPackageName
B.含有bean類(lèi)的JAR文件應該放在WEB-INF/lib目錄中
*************************************************************************************
五、jsp:useBean中beanName、type選項的使用:
*************************************************************************************
A.beanName:即可以指向類(lèi),也可以指定包含序列化bean對象的文件
B.type: 當希望所要聲明的變量的類(lèi)型是實(shí)際bean類(lèi)的超類(lèi),或是bean實(shí)現的接口。應該使用type屬性來(lái)控制這種聲明。此時(shí)type中聲明的類(lèi)型是class中指明的類(lèi)型的父類(lèi)或者接口,即用子類(lèi)的構造方法初始化一個(gè)父類(lèi)對象-多態(tài)。例如:
<jsp:useBean id = “thread1” class = “mypackage.MyClass”
type = “java.lang.Runnable”>
*************************************************************************************
六、jsp:useBean的語(yǔ)法規則:
*************************************************************************************
A.屬性名大小寫(xiě)敏感
B.單引號和雙引號都可以使用(但必須使用其中的一種)
C.標簽的結束標記為/>,不只是>
*************************************************************************************
七、JavaBean屬性的設置:
*************************************************************************************
A.<jsp:setProperty name = “beanName”property = “beanProperty”value = “beanValue”/>
B.jsp:setProperty的value屬性允許給出的值為請求期間的表達式
*************************************************************************************
八、將單個(gè)屬性與輸入參數關(guān)聯(lián):
*************************************************************************************
A.可以不使用value屬性,而是使用param指定一個(gè)輸入參數,被指定的請求參數的值字段用作bean屬性的值,由String到基本類(lèi)型和封裝類(lèi)的類(lèi)型轉換都自動(dòng)執行。
B.如果請求中沒(méi)有指定的參數,則不采用任何動(dòng)作(系統并不傳遞null到相關(guān)聯(lián)的屬性),例如:
<jsp:setProperty name = “bean1”property = “property1”param = “property1”>
C.如果請求參數的名稱(chēng)和bean屬性的名稱(chēng)相同,還可以更進(jìn)一步地簡(jiǎn)化這段代碼。這種情況下可以省略param
*************************************************************************************
九、將所有的屬性與請求參數關(guān)聯(lián):
*************************************************************************************
A.JSP允許將所有的屬性與同名的請求參數關(guān)聯(lián)起來(lái)。我們所要做的只是以”*”作為property參數的值。例如:<jsp:setProperty name = “entry”property = “*”/>
B.系統從請求參數開(kāi)始查找匹配的bean屬性,而非采用相反的方式。因此,對于沒(méi)有請求參數與之匹配的屬性,則不采用任何動(dòng)作。這種行為意味著(zhù):表單bean不必一次填充完畢,相反,一次提交可以填寫(xiě)bean的部分屬性,另一個(gè)表單填寫(xiě)其他屬性。以此類(lèi)推。但要使用這項功能,需要將bean在多個(gè)頁(yè)面中共享。
*************************************************************************************
十、使用屬性與請求參數自動(dòng)關(guān)系方式的注意點(diǎn):
*************************************************************************************
A.輸入參數缺失時(shí)不采取任何動(dòng)作:系統不會(huì )提供null作為屬性的值。因此在設計bean時(shí),一般
要為其設置可以識別的默認值,以便可以確定某個(gè)屬性是否修改過(guò)
B.自動(dòng)類(lèi)型轉換不能像手動(dòng)類(lèi)型轉換那樣那個(gè)防止不合法的值:在使用自動(dòng)類(lèi)型轉換時(shí),應該考慮使錯誤處理頁(yè)面或顯示使用try/catch塊來(lái)處理異常數據
C.bean屬性的名稱(chēng)和請求參數大小寫(xiě)敏感:屬性名和請求參數的名字必須精確匹配
*************************************************************************************
十一、共享bean
*************************************************************************************
使用scope時(shí),系統首先檢查指定的位置是否存在指定名稱(chēng)的bean。僅當系統找不倒現有的bean時(shí),才會(huì )創(chuàng )建新的bean.scope屬性有4個(gè)可選值:page、request、session、application
*************************************************************************************
十二、bean的scpoe = “page”:
*************************************************************************************
A.這個(gè)值表示:在處理當前請求期間,除了要將bean對象綁定到局部變量外,還應該將它放在PageContext對象中。
B.將此對象存儲在此表示,servlet可以通過(guò)調用預定義變量pageContext的getAttribute方法訪(fǎng)問(wèn)它.由于每個(gè)頁(yè)面和每個(gè)請求都有不同的PageContext對象,
C.所有scope = “page”表示不共享bean,也就是針對每個(gè)請求都創(chuàng )建新的bean
*************************************************************************************
十三、bean的scope = “request”:
*************************************************************************************
A.這個(gè)值表示:在處理當前請求期間,除了要將bean對象綁定到局部變量外,還應該將它放在
HttpServletRequest對象中,從而可以通過(guò)getAttribute方法訪(fǎng)問(wèn)它。
B.在使用jsp:include、jsp:forward、RequestDispatcher的include或forward方法時(shí),兩個(gè)JSP頁(yè)面,或JSP頁(yè)面和servlet將會(huì )共享請求對象。而scope = “page”的bean則無(wú)法共享請求對象
*************************************************************************************
十四、bean的scope = “session”:
*************************************************************************************
A.這個(gè)值表示:除了要將bean對象綁定到局部變量之外,還要將它存儲到與當前請求相關(guān)聯(lián)的HttpSession對象中,我們可以使用getAttribute獲取存儲在HttpSession中的對象
B.bean存儲在HttpSession對象中,若該會(huì )話(huà)不失效(如超時(shí))則bean的屬性可跨請求持續
*************************************************************************************
十五、bean的scope = “application”:
*************************************************************************************
A.這個(gè)值表示:除了要將bean對象綁定到局部變量之外,還要將它存儲在ServletContext中,通過(guò)預定義application變量或通過(guò)調用getServletContext獲得。
B.ServletContext由Web應用中多個(gè)servlet和JSP頁(yè)面共享。ServletContext中的值可以用getAttribute方法獲得。
*************************************************************************************
十六、根據條件構建bean:
*************************************************************************************
A.根據條件構建bean:<jsp:useBean…>statements</jsp:useBean>
B.jsp:useBean的起始標簽和結束標簽之間的語(yǔ)句只在創(chuàng )建新的bean時(shí)執行,如果使用已有的bean,則不執行。由于jsp:useBean調用默認(零參數)構造函數,因此,我們經(jīng)常需要在bean創(chuàng )建之后修改它的屬性。為了模擬構造函數,應該在bean首次創(chuàng )建時(shí)執行這些修改,而不應該在訪(fǎng)問(wèn)現存(或更新后)的bean時(shí)執行。
C.多個(gè)頁(yè)面都可以在jsp:useBean的起始標簽和結束標簽之間包含jsp:setProperty語(yǔ)句;只有被第一個(gè)訪(fǎng)問(wèn)的頁(yè)面才會(huì )執行這些語(yǔ)句。
*************************************************************************************
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。