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