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