JavaBean

概念:用純java代碼編寫的pojo程序,mvc設計模式的model層

種類:

數據bean:表單bean;結果bean;

表單bean:完成對錶單數據的封裝

語法要求:屬性的名字、個數、類型與表單裏參數的名字、個數、類型一致;

結果bean:在hibernate中又叫實體類,封裝外部信息,主要封裝數據庫對應的記錄;

語法要求:屬性的名字、個數、類型與記錄中字段的名字、個數、類型一致;

 

邏輯bean:業務bean,持久bean

業務bean:封裝對業務的操作,完成對請求的操作

持久bean:封裝對外部數據(數據庫,文件)的操作

 

優點:

1 易於開發維護

框架自動收集表單結果數據

實現邏輯的封裝,事物處理和顯示互不干擾

2 提高代碼的可複用性

對於通用的事務處理邏輯,數據庫操作等都可以封裝在JavaBean中,

通過調用JavaBean的屬性和方法可快速進行程序設計

3 支持分佈式操作

支持同樣的代碼在不同的程序上

同樣的程序,不同的代碼分佈在不同的服務器上

效率特別高,可以災難救援

 

表單bean(收集表單數據)

語法:

1 包聲明

2 表單bean主類名和文件名相同(不能出現主方法)

3 屬性(私有的)的名字個數和類型要和表單裏的參數名字個數和類型一致

4 對外提供public 的get()set()方法

5 顯示提供無參的構造方法(標籤和框架需要調用無參構造方法來生成bean對象)

 

部署

² 默認路徑在WEB-INF/classes/以包對應的目錄結構下(classes需要自己手動創建);

² 存放方式:

® 手動創建文件夾,太麻煩,不推薦;

® 打包編譯 javac -d . SimpleBean.java;

 

命名規範

包命名:全部字母小寫:cn.mldn.lxh  

類命名:每個單詞的首字母大寫:SimpleBean

屬性名稱:第一個單詞的首字母小寫,之後每個單詞的首字母大寫:studentName ;  

方法命名:與屬性命名相同:public void sayHello() ;

常量命名:final類型的常量一般都要大寫,接口裏的變量都是常量,但卻沒有大寫;

 

表單Bean的優化

用標籤來代替原生Java程序

標籤就相當與一行或多行java程序;

實例

<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="zs" scope="page" class="cn.mldn.lxh.SimpleBean"/>
<%
        zs.setName("tom") ;
        zs.setPassword("123456") ;
%>
<h1>姓名:<%=zs.getName()%></h1>
<h1>密碼:<%=zs.getPassword()%></h1>

 

標籤創建對象,導包

<jsp:useBean id="zs" scope="page" class="cn.mldn.lxh.SimpleBean"/>

含義:

先看當前頁面的page內置對象裏是否有屬性名爲zs的屬性值,沒有就創建一個SimpleBean對象:

先找到class屬性,從WEB-INF下通過路徑的全稱找到SimpleBean的字節碼文件;

然後會tomcat會自動調用無參的構造方法創建出SimpleBean對象

把SimpleBean對象以屬性名爲zs的形式,設到page內置對象裏;

再從page內置對象裏取出屬性名爲zs的屬性值,賦給變量名爲zs的變量;

 

屬性名:

id:既是page內置對象存放SimpleBean對象的屬性名,又是存放SimpleBean對象地址的變量名;

scope:存放SimpleBean的內置對象,如果省略默認是page內置對象;

class:指定SimpleBean類的位置;

等價的java代碼:

if(page.getAttrribute("zs")==null){

page.setAttribute("zs",new SimpleBean());

}

SimpleBean zs = (SimpleBean)page.getAttribute("zs");

 

標籤收集數據

<jsp:setProperty name="zs" property="*"/>

含義

把表單裏的所有參數收集到表單Bean(前提是表單裏的名字、個數、類型要和表單Bean裏屬性的名字、個數、類型一致)

到page裏取得屬性名爲zs的屬性值,SimpleBean對象;

給SimpleBean對象所有的屬性設值,數據來源表單中的同名參數

property="*":給zs所指Simplebean對象的所有屬性設置,這些值來自表單當中的同名參數;

屬性設置可以一次解決,屬性的獲取必須一個個取;

el表達式輸出:不能設值只能輸出;

${zs.name};

scope裏找到屬性zs的屬性值SimpleBean對象,調用他的getName方法;

setProperty有自動轉換的功能,但表單裏參數的類型,必須和表單Bean裏的對應屬性的類型一致才能轉換,否則就會出現NumberFormatException;

若表單裏的參數比表單bean裏的屬性少,就只給表單bean裏有確定參數值的屬性設值,沒有參數值的屬性保持原值;

 

屬性設值

<jsp:setProperty>用來設置已經實例化的Bean對象的屬性

方式一

<jsp:setProperty name="zs" property="*"/>

先到scope裏找到屬性名爲zs的屬性值--SimpleBean對象,並給SimpleBean對象的所有屬性設值;

方式二

<jsp:setProperty name="zs" property="name"/>

只給zs所指的SimpleBean對象的name屬性設值,屬性的值來自表單當中的同名參數;

其他沒有設值的屬性保持原值;

方式三

<jsp:setProperty name="zs" property="name" param="password"/>

從表單裏取出屬性名爲password的屬性值賦給屬性name;

方式四

<jsp:setProperty name="zs" property="name" value="password"/>

直接把"password"賦給zs所指對象的屬性name;

value的值必須爲String類型;

 

表單Bean的傳遞

page內置對象

不能傳遞,表單bean只會保存在當前頁面,頁面結束,表單bean對象就被銷燬,不會傳遞到另一個組件裏;

request內置對象

服務端跳轉的request內置對象不會被銷燬,表單bean可以通過request內置對象傳遞給下一個組件;

但客戶端跳轉不能通過request內置對象傳遞,因爲客戶端跳轉是客戶端重新發送請求,request內置對象會被銷燬,不能傳遞表單bean

session內置對象

只要用戶不下線,就可以一直傳遞表單bean;

application內置對象

<jsp:getProperty name="cb" property="coun"/>
查找順序:page--request--session--application,只要在前面的內置對象裏找到表單bean,就不會再去後面的內置對象裏查找; 

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