在jsp頁(yè)面內(nèi)的五種成份中,html是靜態(tài)成份,服務(wù)器對(duì)于jsp的靜態(tài)成份不作處理直接交付給客戶機(jī),作數(shù)據(jù)表示層;但對(duì)于jsp頁(yè)面的動(dòng)態(tài)成份如java程序片、Java表達(dá)式等則需作處理,作數(shù)據(jù)處理層;如果在一個(gè)jsp頁(yè)面中既有靜態(tài)部分又有動(dòng)態(tài)部分將導(dǎo)致代碼混亂和代碼的復(fù)用率較低,為此可以采用javaBean方式處理數(shù)據(jù),將數(shù)據(jù)的表示和處理進(jìn)行分離,這也是sun公司所提倡的一種方式。
javaBean是用Java語(yǔ)言按照一種規(guī)則編寫(xiě)的類生成的實(shí)例,可簡(jiǎn)稱為bean;一個(gè)jsp頁(yè)面的數(shù)據(jù)處理部分可以交給一個(gè)bean或者幾個(gè)bean完成,只需在jsp頁(yè)面中調(diào)用該創(chuàng)建bean的類并生成實(shí)例即可,這種方式可以將數(shù)據(jù)的處理部分從jsp頁(yè)面中分離出來(lái)更好的實(shí)現(xiàn)代碼復(fù)用;
一、編寫(xiě)和使用javaBean
1、編寫(xiě)創(chuàng)建bean的類
為了能讓服務(wù)器識(shí)別并使用bean,編寫(xiě)創(chuàng)建bean的類必須符合以下規(guī)則:
a、如果類的成員變量為XXX,那么為了獲得和修改該成員,類中必須提供兩個(gè)方法getXxx(用來(lái)獲得類的屬性(變量));和setXxx()(用來(lái)修改類的屬性(變量));
b、對(duì)于boolean類型的變量,可以使用“is”代替上面的get和set;
c、類中方法的訪問(wèn)屬性必須是public;
d、類的構(gòu)造函數(shù)的訪問(wèn)屬性必須是public且是無(wú)參數(shù)的;
下面創(chuàng)建一個(gè)可以計(jì)算矩形面積創(chuàng)建bean的類,代碼如下:

2、使用bean
jsp使用bean,tomcat服務(wù)器必須使用相應(yīng)類的字節(jié)碼文件創(chuàng)建一個(gè)bean,為了讓tomcat服務(wù)器找到相應(yīng)的字節(jié)碼文件,必須把字節(jié)碼文件放到指定的目錄中,故使用bean應(yīng)有以下兩步:
a.字節(jié)碼文件放到指定的目錄
在當(dāng)前的服務(wù)目錄中建立\WEB-INF\classes目錄,然后在該目錄下根據(jù)類的包名建立相應(yīng)的子目錄,最后重新啟動(dòng)服務(wù)器后把字節(jié)碼文件復(fù)制到目錄中;(若使用eclipse開(kāi)發(fā)工具不需此不,只需在項(xiàng)目里創(chuàng)建類即可)
b、在jsp頁(yè)面里使用bean
這里將用到j(luò)sp頁(yè)面的動(dòng)作標(biāo)記usebean,有兩種格式:<jsp:usebean id="給bean起的名字" class="創(chuàng)建bean的類" scope="bean的有效范圍"></jsp:usebean>和<jsp:usebean id="給bean起的名字" class="創(chuàng)建bean的類" scope="bean的有效范圍"/>,其中id的值為bean的名字,可按此名字調(diào)用類的方法,scope的值可取page、session、request和application;當(dāng)用戶使用bean時(shí),服務(wù)器根據(jù)scope的取值確定分配給用戶的bean空間的生存時(shí)間,當(dāng)取值為page時(shí)有效范圍為該頁(yè)面,用戶離開(kāi)該頁(yè)面時(shí)釋放該空間、取值為session時(shí),bean的有效范圍為該用戶的所有頁(yè)面,且只要用戶的session會(huì)話不關(guān)閉,bean一直有效,直到session會(huì)話消失并取消分配的bean空間、取值為request時(shí)bean的有效范圍為當(dāng)前請(qǐng)求期間,當(dāng)服務(wù)器作出回應(yīng)時(shí)即取消分配的bean空間、當(dāng)取值為application時(shí)bean的有效范圍為整個(gè)服務(wù)器服務(wù)期間,只有在服務(wù)器關(guān)閉時(shí)才釋放分配的bean空間;下面通過(guò)新建一個(gè)jsp頁(yè)面使用上面的類創(chuàng)建一個(gè)scope取值為session的bean來(lái)計(jì)算矩形的面積,代碼如下:

二、獲取和修改bean的屬性
上面通過(guò)在Java程序片中使用bean調(diào)用相應(yīng)方法獲取和修改bean的屬性,下面通過(guò)jsp的動(dòng)作標(biāo)記獲取和修改bean的屬性;
1、動(dòng)作標(biāo)記getProperty
這個(gè)標(biāo)記可以獲得bean的屬性,并且將這個(gè)值用串的形式顯示給客戶,格式為:<jsp:getProperty name="bean的名字" property="bean的屬性"/>或者為<jsp:getProperty name="bean的名字" property="bean的屬性"></jsp:getProperty>
2、動(dòng)作標(biāo)記setProperty
setProperty動(dòng)作標(biāo)記可以通過(guò)3種方式設(shè)置bean的屬性值;
a、將bean屬性的值設(shè)置為一個(gè)表達(dá)式的值或者字符串,設(shè)置為表達(dá)式時(shí)格式為:<jsp:setProperty name="bean的名字" property="bean的屬性" value="<%=expression%>"/>;設(shè)置為字符串的格式為:<jsp:setProperty name="bean的名字" property="bean的屬性" value=字符串/>
b、通過(guò)http表單的參數(shù)的值來(lái)設(shè)置bean屬性的值
這種方式需要將要提交的表單的參數(shù)的名字和bean的屬性的名字一致,表單提交后tomcat會(huì)自動(dòng)進(jìn)行匹配賦值,格式為:<jsp:setProperty name="bean的名字" property="*"/>,該標(biāo)記只有提交后才會(huì)觸發(fā);
c、通過(guò)request的參數(shù)的值來(lái)設(shè)置bean的相應(yīng)屬性的值
這種方式也要求request的參數(shù)的名字和bean的屬性的名字相同,格式為:<jsp:setProperty name="bean" property="屬性名" param="參數(shù)名"/>,該標(biāo)記只有提交后才會(huì)觸發(fā);
三種方式的示例代碼如下,用上述矩形的bean示例:

注意:第二種和第三種方式只有在被提交的頁(yè)面才能觸發(fā)。
3、bean的輔助類
當(dāng)我們編寫(xiě)一個(gè)bean的類的時(shí)候,有可能要使用編寫(xiě)的其他類,這時(shí)只要將這些類編寫(xiě)在同一個(gè)java的源文件里,然后將編譯的所有字節(jié)碼文件復(fù)制到指定的目錄中即可;