java_web學習(1)理解JavaBean

JavaBean簡介java

      JavaBean是一種特殊的 Java 類,它聽從必定的設計模式,開發工具和其餘組件能夠根據這種模式來調用JavaBean。
JavaBean能夠設計得像Swing組件同樣複雜,提供方法、屬性、事件、以及供開發工具將它實例化到一個GUI容器中並對其屬性和行爲進行定製的特性。JavaBean也能夠設計得很簡單,僅僅提供一些方法和屬性供外部環境和其餘組件調用。用做JavaBean的類必須具備一個公共的、無參數的構造方法,這個方法能夠是經過編譯器自動產生的那個缺省構造方法。JavaBean的屬性經過遵循某種規範的公共方法暴露給外部,外部的其餘程序能夠經過Java 的反射API 來查找JavaBean中遵循這一規範的方法,從而發現JavaBean中的屬性。
 
JavaBean的屬性 
     JavaBean的屬性與普通Java類的屬性的概念不同,JavaBean的屬性是以方法定義的形式出現的。用於對屬性賦值的方法稱爲屬性修改器或setter方法,用於讀取屬性值的方法稱爲屬性訪問器或getter方法。屬性修改器必須以小寫的set 前綴開始,後跟屬性名,且屬性名的第一個字母要改成大寫,例如,nickName屬性的修改器名稱爲setNickName,password屬性的修改器名稱爲setPassword。屬性訪問器一般以小寫的get 前綴開始,後跟屬性名,且屬性名的第一個字母要改成大寫,例如,nickName屬性的訪問器名稱爲getNickName,password屬性的訪問器名稱爲getPassword。JavaBean的屬性名是根據setter方法與getter方法的名稱來生成的, setter方法或getter方法中除去前綴「set」和「get」後的部分即爲屬性名,但屬性名的首字母必須小寫。
屬性分類:只讀/讀寫/只寫,簡單/複雜
    1)簡單屬性:
package org.it315;
public class RegisterBean
{
	private String nickName = null;
	private boolean male = false;
	public void setNickName(String nickName)
	{
		this.nickName = nickName;
	}
	public String getNickName()
	{	
		return nickName;
	}
	public void setMale(boolean male)
	{
		this.male = male;
	}
	public boolean isMale()
	{
		return male;
	}
}

  2)Indexed屬性express

package org.it315;
public class RegisterBean
{
	private String [] specialities = 
		new String[]{"none","none","none","none","none"};	
	public void setSpecialities(String [] sp)
	{
		this.specialities = sp;
	}
	public void setSpecialities(int index,String sp)
	{
		specialities[index] = sp;
	}
	public String [] getSpecialities()
	{
		return specialities;
	}
	public String getSpecialities(int index)
	{
		return specialities[index];
	}
}

JavaBean在JSP中的應用編程

     在JSP中如何使用JavaBean
      1)<jsp:useBean>標籤
      2)<jsp:setProperty>標籤
      3)<jsp:getProperty>標籤
     JSP自身沒有實現HTML代碼與Java代碼的徹底分離,網頁設計人員和Java編程人員須要操做同一個JSP文件,不易維護和管理。把JSP頁面中的業務邏輯代碼封裝到一個JavaBean中,JSP頁面再調用JavaBean,則可提供一種分離顯示內容和業務邏輯的簡單方式,而且有利於軟件的組件化、模塊化。JSP規範專門定義了三個JSP標籤:<jsp:useBean>,<jsp:setProperty> 和 <jsp:getPropperty>,它們分別用於建立和查找JavaBean的實例對象、設置JavaBean對象的屬性、讀取JavaBean對象的屬性。對於JSP頁面來講,只要一個類具備一個公共的、無參數的構造方法,就能夠把這個類看成JavaBean來使用,若是類中有不接受任何參數的getter方法或只接受一個參數的setter方法,就能夠把前綴「get」或「set」後面的部分當着一個屬性名來引用。JSP頁面能夠像調用一個普通Java類的方式去調用JavaBean,即先使用Java代碼建立JavaBean的實例對象,而後直接調用JavaBean對象的getter方法和setter方法。
//例1:testBean.jsp
<jsp:useBean id="currentDate" class="java.util.Date"/>
<jsp:setProperty name="currentDate" property="time" value="1234567"/>
<jsp:getProperty name="currentDate" property="time"/>


//例2:testBean.jsp
<%
	java.util.Date currentDate = new java.util.Date();
	currentDate.setTime(1234567);
	out.println(currentDate.getTime());
%>

  1)<jsp:useBean>標籤設計模式

      <jsp:useBean>標籤用於在某個指定的域範圍(application、session、request、pageContext等)中查找一個指定名稱的JavaBean對象,若是存在則直接返回該JavaBean對象的引用,若是不存在則實例化一個新的JavaBean對象並將它按指定的名稱存儲在指定的域範圍中。
      常見語法:    
<jsp:useBean id="beanInstanceName " class="package.class"  scope="page|request|session|application"/>
      class屬性用於指定JavaBean的完整類名(即必須帶有包名)。
      id屬性用於指定JavaBean實例對象的引用名稱和其存儲在域範圍中的名稱。
      scope屬性用於指定JavaBean實例對象所存儲的域範圍,其取值只能是page、request、session和application等四個值中的一個,其默認值是page。

      <jsp:useBean>標籤內部原理session

//JSP中的語句:
	<jsp:useBean id="currentDate" class="java.util.Date"/>
//翻譯成的Servlet源碼:
java.util.Date currentDate = null;
synchronized (_jspx_page_context) {
	currentDate = (java.util.Date) _jspx_page_context.getAttribute("currentDate", PageContext.PAGE_SCOPE);
	if (currentDate == null){
		currentDate = new java.util.Date();
		_jspx_page_context.setAttribute("currentDate",currentDate, PageContext.PAGE_SCOPE);
	}
}

  <jsp:useBean>標籤完整語法 app

//完整語法:
<jsp:useBean id="beanInstanceName" 
	scope="page | request | session | application" 
	{
      class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | <%= expression %>}" type="package.class"
	} /> 

   type屬性用於指定JavaBean實例對象的引用變量的類型,它必須是JavaBean對象的類名稱、超類名稱和所實現的接口名稱中的一個,其默認值爲class屬性的設置值。beanName屬性用於指定JavaBean的名稱,這個名稱不是JavaBean實例對象的引用名稱,而是JavaBeans規範中定義的一種名稱,它將被做爲傳遞給java.beans.Beans類的instantiate方法的參數,例如,a.b.c。a.b.c能夠表明一個類的完整名稱,也能夠表明a/b/c.ser這樣的資源文件,java.beans.Beans類的instantiate方法能夠從這個資源文件中產生出JavaBean的實例對象。beanName屬性值還能夠經過一個表達式來產生。jsp

       帶標籤體的<jsp:useBean>標籤模塊化

//語法:
	<jsp:useBean ...> 
		Body 
	</jsp:useBean> 
//功能:
	//Body部分的內容只在<jsp:useBean>標籤建立JavaBean的實例對象時才執行。

  2)<jsp:setProperty>標籤工具

      <jsp:setProperty>標籤用於設置JavaBean對象的屬性,也就是調用JavaBean對象的setter方法。
//語法格式:
<jsp:setProperty name="beanInstanceName" 
{ 
    property="propertyName" value="{string | <%= expression %>}" |property="propertyName" [ param="parameterName" ] | property= "*" 
}/>

    name屬性用於指定JavaBean實例對象的名稱,其值應與<jsp:useBean>標籤的id屬性值相同。組件化

       property屬性用於指定JavaBean實例對象的屬性名。

       value屬性用於指定JavaBean實例對象的某個屬性的值,其設置值能夠是一個字符串,也能夠是一個表達式。若是value屬性的設置值是一個表達式,那麼該表達式的結果類型必須與所要設置的JavaBean屬性的類型一致。 
      param屬性用於將JavaBean實例對象的某個屬性值設置爲一個請求參數值,它能夠將做爲字符串類型返回的請求參數值自動轉換成要設置的JavaBean屬性的類型。 
<jsp:setProperty name="beanInstanceName" property="propertyName" value="{string | <%= expression %>}" /> 
<jsp:setProperty name="beanInstanceName" property="propertyName" param="parameterName" /> 
<jsp:setProperty name="beanInstanceName" property="propertyName" /> 
<jsp:setProperty name="beanInstanceName" property="*" /> 
<jsp:useBean id="beanInstanceName" …/>
		…
		<jsp:setProperty name="beanInstanceName"  property="propertyName" …/>
		…
</jsp:useBean>

    3)<jsp:getProperty>標籤

     <jsp:getProperty>標籤用於讀取JavaBean對象的屬性,也就是調用JavaBean對象的getter方法,而後將讀取的屬性值轉換成字符串後插入進輸出的響應正文中。

//語法:
   <jsp:getProperty name="beanInstanceName" property="PropertyName" />

   name屬性用於指定JavaBean實例對象的名稱,其值應與<jsp:useBean>標籤的id屬性值相同。property屬性用於指定JavaBean實例對象的屬性名。

       若是一個JavaBean實例對象的某個屬性的值爲null,那麼,使用<jsp:getProperty>標籤輸出該屬性的結果將是一個內容爲「null」的字符串。

使用JavaBean的注意事項

       JavaBean應放置在JSP頁面的類裝載器或其父級類裝載器所能裝載的目錄中,一般放置於WEB應用程序下的 WEB-INF/classes目錄中。
       有些版本的Tomcat不會自動從新加載修改過的JavaBean,若是JSP頁面加載JavaBean之後又修改和從新編譯了JavaBean程序,那麼須要修改JSP頁面或者從新啓動Tomcat。
       JavaBean必須帶有包名,不能用缺省包名。
       在選擇存儲JavaBean的域範圍時,若是使用request域可以知足需求的話,則不要使用Session域。 
        要存儲在Session域中或跨JVM傳輸的JavaBean應實現Serializable接口。

JSP開發模式

       1)MVC設計模式

       MVC(模型-視圖-控制器)是一種分離業務邏輯與顯示界面的設計方法。MVC的模型(Model)部分負責管理程序的業務數據,視圖(View)部分負責顯示界面,控制器(Controller)部分則負責與用戶進行交互(接受請求和選擇響應視圖)。

 

        2)JPS設計模式(兩種模式)

相關文章
相關標籤/搜索