一. JavaBean
1. 什麼是JavaBean?
(1) JavaBean, 咖啡豆。 JavaBean是一種開發規範,可以說是一種技術。
(2) JavaBean是一個遵循特定寫法的Java類,它通常具有如下特點(也就是說,只有符合以
下規定才能稱之爲JavaBean):
① 這個Java類必須提供一個無參數的構造方法;
② 類中屬性都必須私有化;③ 該類提供公開的getter 和 setter方法,私有化的屬性必須通過public類型的方法暴露給其
它程序,並且方法的命名也必須遵守一定的命名規範。
(3) JavaBean在J2EE開發中,通常用於封裝數據,對於遵循以上寫法的JavaBean組件,其它程序可以通過反射技
術實例化JavaBean對象,並且通過反射那些遵守命名規範的方法,從而獲知JavaBean的屬性,進而調用其屬性
保存數據。
2. JavaBean的作用
用於封裝數據,保存數據。訪問JavaBean只能使用getter和setter方法;
3. JavaBean的屬性
(1) JavaBean的屬性可以是任意類型,並且一個JavaBean可以有多個屬性。每個屬性通常都需要具有相應的
setter、 getter方法,setter方法稱爲屬性修改器,getter方法稱爲屬性訪問器。
(2) 屬性修改器必須以小寫的set前綴開始,後跟屬性名,且屬性名的第一個字母要改爲大寫,例如,name屬性
的修改器名稱爲setName,password屬性的修改器名稱爲setPassword。
(3) 屬性訪問器通常以小寫的get前綴開始,後跟屬性名,且屬性名的第一個字母也要改爲大寫,例如,name屬
性的訪問器名稱爲getName,password屬性的訪問器名稱爲getPassword。
(4) 一個JavaBean的某個屬性也可以只有set方法或get方法,這樣的屬性通常也稱之爲只寫、只讀屬性。
4. JavaBean的使用場景
(1) 項目中用到實體對象(entity)符合JavaBean規範;
(2) EL表達式訪問對象屬性。${student.name} 調用getName()方法,符合JavaBean規範;
(3) JSP標籤中的屬性賦值。 setNum(Integer num)。符合JavaBean規範;
(4) JSP頁面中使用JavaBean。符合JavaBean規範;
5. 以下方法哪些屬於JavaBean的規範的方法?
(1) 答案 :( 1,3,5,6 );
(2) 分析:①Get方法是沒有參數的,因爲它是用來取值的,它只是有返回值;③而設值就是傳遞參數,所以裏面
必須有參數;⑤也是賦值,只不過傳遞的是一個布爾值;⑥boolean類型的get方法名稱叫 isXXX()方法。
① getName(); ② getName(String name); ③ setName(String name);
④ setName(); ⑤ setFlag(boolean flag); ⑥ isFlag();
二. 在JSP中使用JavaBean
1. JSP中關於JavaBean組件的動作元素
JSP技術提供了三個關於JavaBean組件的動作元素,即JSP標籤,它們分別爲:
(1) <jsp:useBean>標籤:用於在JSP頁面中查找或實例化一個JavaBean組件;
(2) <jsp:setProperty>標籤:用於在JSP頁面中設置一個JavaBean組件的屬性;
(3) <jsp:getProperty>標籤:用於在JSP頁面中獲取一個JavaBean組件的屬性;
2. <jsp:useBean>標籤
(1) <jsp:useBean>標籤用於在指定的域範圍內查找指定名稱的JavaBean對象:
① 如果存在則直接返回該JavaBean對象的引用;
② 如果不存在則實例化一個新的JavaBean對象並將它以指定的名稱存儲到指定的域範圍中。
(2) 常用語法:
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
① id屬性用於指定JavaBean實例對象的引用名稱和其存儲在域範圍中的名稱;
② class屬性用於指定JavaBean的完整類名(即必須帶有包名);
③ scope屬性用於指定JavaBean實例對象所存儲的域範圍,其取值只能是page、request、session和
application等四個值中的一個,其默認值是page;
(3) 帶標籤體的<jsp:useBean>標籤
① 語法:
<jsp:useBean ...>
Body
</jsp:useBean>
② 功能:
Body部分的內容只在<jsp:useBean>標籤創建JavaBean的實例對象時才執行。
③ 注意:
默認採用page域,每次都是沒有的,所以執行,而如果是session域,第一次沒有,以後都有,除非session過
期,application類推…
3. <jsp:setProperty>標籤
(1) <jsp:setProperty>標籤用於設置和訪問JavaBean對象的屬性。
(2) 語法:
<jsp:setProperty name="beanName"
{
property="propertyName" value="{string | <%= expression %>}" |
property="propertyName" [ param="parameterName" ] |
property= "*"
}/>
① name屬性用於指定JavaBean對象的名稱;
② property屬性用於指定JavaBean實例對象的屬性名;
③ value屬性用於指定JavaBean對象的某個屬性的值,value的值可以是字符串,也可以是表達式。爲字符串
時,該值會自動轉化爲JavaBean屬性相應的類型,如果value的值是一個表達式,那麼該表達式的計算結果必須
與所要設置的JavaBean屬性的類型一致;
④ param屬性用於將JavaBean實例對象的某個屬性值設置爲一個請求參數值,該屬性值同樣會自動轉換成要設
置的JavaBean屬性的類型。
(3) 注意
① 在通過該標籤設置Bean的屬性值時對於八種基本類型,該標籤可以將字符串自動轉換,而其他類型無法轉
換。比如Date,param=“<%=new Date()%>”;
② param和*設置(param對請求參數的自動轉型);
4. <jsp:getProperty>標籤
(1) <jsp:getProperty>標籤用於讀取JavaBean對象的屬性,也就是調用JavaBean對象的getter方法,然後將讀
取的屬性值轉換成字符串後插入進輸出的響應正文中;
(2) 語法
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
① name屬性用於指定JavaBean實例對象的名稱,其值應與<jsp:useBean>標籤的id屬性值相同;
② property屬性用於指定JavaBean實例對象的屬性名;
(3) 如果一個JavaBean實例對象的某個屬性的值爲null,那麼,使用<jsp:getProperty>標籤輸出該屬性的結果將
是一個內容爲“null”的字符串。
三. WEB開發模式
SUN公司推出JSP技術後,同時也推薦了兩種web應用程序的開發模式,一種是JSP+JavaBean模式,一種是
Servlet+JSP+JavaBean模式。
1. JSP+JavaBean模式
(1) JSP+JavaBean模式適合開發業務邏輯不太複雜的web應用程序,這種模式下,JavaBean用於封裝業務數
據,JSP即負責處理用戶請求,又顯示數據。
(2) 用戶首先訪問的是JSP頁面,JSP頁面可以收集用戶數據也可以顯示用戶數據,它收集數據以後還是提交給
JSP,最終目標是要保存數據到數據庫,也就是在JSP頁面中訪問Javabean,它先把數據放到對象裏面去使用
Javabean封裝業務數據,所以應該是先到Javabean,再到數據庫就會更加靈活。可以在JSP中用標籤去操作
Javabean。在這個模式中和用戶打交道的是JSP,處理業務邏輯的也是JSP。
2. Servlet+JSP+JavaBean(MVC)模式
(1) Servlet+JSP+JavaBean(MVC)模式適合開發複雜的web應用,在這種模式下,Servlet負責處理用戶請求,
JSP負責數據顯示,JavaBean負責封裝數據。 Servlet+JSP+JavaBean模式程序各個模塊之間層次清晰,web開
發推薦採用此種模式。
(2) 用戶訪問的是JSP頁面,JSP頁面可以顯示數據,並把收集到的數據提交給Servlet,最終也是需要存到數據庫
中,爲了提高數據的擴展性,我們可以把數據封裝到JavaBean中,JavaBean也是用來封裝業務數據,在Servlet
中就是爲了保存這個JavaBean,再把它保存到數據庫中,在Servlet和JavaBean之間,我們可以在Servlet中直接
保存數據或查詢數據,但是我們可以在Servlet和DB數據庫之間多寫一層dao層(數據訪問對象,裏面是一些
CURD方法),有了dao之後,在Servlet中並不直接操作JavaBean,而是通過dao操作封裝JavaBean,然後再把
數據存進數據庫中,或者取出來,我們是通過dao來訪問JavaBean,訪問JavaBean就意味着我們可以訪問數據
庫,在Servlet中可以直接調用dao層。但是處理業務邏輯的代碼不要在Servlet中去做,在Servlet和dao層之間還
有一層Service層(業務邏輯層),項目中設計到邏輯的代碼放到這一層中,這一層中也是一些CURD方法,但是
這個Service和dao層又不一樣,它們是有區別的,比如說在dao層中有一個添加聯繫人的方法add(),在這個方法
中可以保存到db中,那麼這個Service層在添加聯繫人之前可能還會執行一些業務,比如說判斷姓名是否是重複
的,如果不重複再保存,不重複就調用dao的add方法,所以Service層中就先處理這些業務,處理完之後就去保
存。此時在Servlet層中就不做處理業務了,而是做調用業務邏輯,真正的業務邏輯在Service層中處理。數據的
訪問和數據的增刪改查都放在dao層,Service層和dao層的關係是Service層去調用dao層的一些方法。Servlet調
用Service層。
四. 總結
1. MVC開發模式
(1) Model:JavaBean實現,用於封裝業務數據;
(2) View:Jsp實現,用於顯示數據;
(3) Controller:Servlet實現,用於控制Model和View;
2. 三層結構
(1) dao層:和數據訪問相關的操作;
(2) service層:和業務邏輯相關的操作;
(3) web層:和用戶直接交互相關的操作(傳接參數,跳轉頁面);