WEB開發模式

一. 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層:和用戶直接交互相關的操作(傳接參數,跳轉頁面);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章