A. 關於javabean和DAO模式
JavaBean是數據的承載體,負責把一組有邏輯的數據從一個層傳到另一個層。
DAO的出現是對持久層的變動的一個解決方案。
對於不同的持久介質(RDBMS、XML、ODBMS等)、不同的提供廠商(Oracle、Mysql等)提供的產品,進行持久化操作時,對於業務邏輯層應該是統一的,於是DAO模式就出現了。
對於同一個業務操作,例如添加一個用戶,請求到達業務層,只需調用DAO層的addUser()即可。而到底是怎麼添加的、以及添加到哪裡,是業務層不用關心的,也是不要關心的。
於是,持久層將利用業務層傳遞來的請求數據,即封裝了要添加的用戶信息JavaBean,添加到持久層:Oracle就要取序列,Mysql會自動增長,XML就要手動控制了。這些實現細節對業務邏輯層是一樣的效果。
但是DAO模式中也會有一些數據承載體,不過它們承載的不是業務數據,而是持久化操作的相關對象,例如DAO對象,DAO工廠,連接對象等。表面上看,這些也承載數據,但它實際是包含了內在的邏輯和操作。例如連接對象的打開和關閉,事務的回滾和提交等。
所以,嚴格意義上來說,它們不是純粹的JavaBean。純粹的JavaBean是只包含屬性和這些屬性對應的getter和setter。
B. javaBean的用法
<jsp:setProperty>標簽用來設置已經實例化的JavaBean對象的屬性.設置setProperty標簽屬性值有三種語法格式.
1.通過表達式或字元串設置
語法格式:
<jsp:setProperty name="beanName" property="propertyName" value="<%=expression%>|字元串" />
其中name表示JavaBean的名字,對應useBean標簽中的id屬性;property表示要給哪個屬性設置值,value表示設置屬性的表達式或者字元串.
如果將表達式的值設置為JavaBean屬性的值,表達式值的類型必須和JavaBean屬性的類型一致;如果將字元串設置為JavaBean屬性的值,這個字元串將會自動轉化成JavaBean屬性的類型.
比如:
<HTML>
<BODY>
<%@ page language="java" %>
<jsp:useBean id="taxbean" scope="application" class="tax.TaxRate" />
<jsp:setProperty name="taxbean" property="proct" value="A002" />
<jsp:setProperty name="taxbean" property="rate" value="17" />
產品: <jsp:getProperty name="taxbean" property="proct">
<br>
稅率:<jsp:getProperty name="taxbean" property="rate">
</BODY>
</HTML>
2.通過HTTP表單的參數值設置
語法格式:
<jsp:setProperty name="beanName" property="*" />
其中name表示JavaBean的名字,對應useBean標簽中的id屬性;property為星號,表示不用再具體指定JavaBean屬性的值將對應表單中的那個參數,系統會自動根據名字進行匹配.但要求表單參數的名字必須與JavaBean中屬性的名字完全相同.
3.通過request的參數值設置
語法格式:
<jsp:setProperty name="beanName" property="propertyName" param="paramName" />
其中name表示JavaBean的名字,對應useBean標簽中的id屬性;property表示要給哪個屬性設置值;param表示表單中的參數名字.此種格式通過request獲得表單中的參數值,JSP引擎自動將request獲取的參數值傳遞給JavaBean中對應的屬性.但要求request參數名字必須與JavaBean中的屬性名字一致.