JavaBean在JSP中的應用(3個JSP標籤)

1、在JSP中如何使用JavaBean

爲了能在JSP頁面中集成JavaBean組件和支持JavaBean的功能,JSP規範專門定義了三個JSP標籤:<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>,它們分別用於建立和查找JavaBean的實例對象,設置JavaBean對象的屬性,讀取JavaBean對象的屬性。對於JSP頁面來講,只要一個類具備一個公共的、無參數的構造方法,就能夠把這個類當作JavaBean來使用,若是類中有不接受任何參數的getter方法或只接受一個參數的setter方法,就能夠把前綴get或set後面的部分當着一個屬性名來引用。例如,JDK自帶的java.util.Date類具備一個公共的、無參數的構造方法,其中還包含一個定義的方法:java

public void setTime(long time)

所以,在JSP頁面能夠把該類當作一個JavaBean來看待,且認爲該JavaBean包含一個time的屬性。
express

  • JSP頁面按照調用JavaBean的方式對Date類進行調用session

<jsp:useBean id="currentDate" class="java.util.Date" />
<jsp:setProperty name="currentDate" property="time" value="1234567" />
<jsp:getProperty name="currentDate" property="time" />

  • JSP頁面像調用一個普通Java類的方式調用JavaBeanapp

<%
    java.util.Date currentDate = new java.util.Date();
    currentDate.setTime(1234567);
    out.println(currentDate.getTime());
%>

2、<jsp:useBean>標籤

該標籤用於在某個指定的域範圍(application、session、request、pageContext等)中查找一個指定名稱的JavaBean對象,若是存在則直接返回該JavaBean對象的引用。若是不存在則實例化一個新的JavaBean對象,並將它按指定的名稱存儲在指定的域範圍中。常見語法以下:
jsp

<jsp:useBean id="beanInstanceName" class="package.class" 
    scope="page|request|session|application" />

其中,class屬性用於指定JavaBean的完整類名,JSP引擎將使用這個類名來建立JavaBean的實例對象或做爲查找到JavaBean對象的類型;id屬性用於指定JavaBean實例對象的引用名稱和其存儲在域範圍的名稱;scope屬性用於指定JavaBean實例對象所存儲的域範圍,其默認值是page。spa

  1. page表示將JavaBean實例對象存儲在PageContext對象中,默認存儲進page域範圍;翻譯

  2. request表示將JavaBean實例對象存儲在ServletRequest對象中;code

  3. session表示將JavaBean實例對象存儲在HttpSession對象中。此設置要求當前JSP頁面支持Session,即沒有將page指令的session屬性設置爲false;orm

  4. application表示將JavaBean實例對象存儲在ServletContext對象中。對象

除了上述幾個屬性,該標籤還有:

  • type屬性

用於指定JavaBean實例對象的引用變量的類型,它必須是JavaBean對象的類名稱、父類名稱或所實現的接口名稱中的一個。type屬性的默認值爲class屬性的設置值,當JSP引擎將標籤翻譯成Servlet程序中的代碼時,將使用type屬性值做爲JavaBean對象引用變量的類型。

  • beanName屬性

用於指定JavaBean的名稱,這個名稱不是JavaBean實例對象的引用名稱,而是JavaBean規範中定義的一種名稱,它將做爲傳遞給java.beans.Beans類的instantiate方法的參數。java.beans.Beans類的instantiate方法能夠從這個資源文件中產生JavaBean的實例對象。設置該屬性不能同時設置class屬性,但必須同時設置type屬性。

<jsp:useBean>標籤除了能夠按照空元素的方式進行使用外,還能夠按容器元素的格式進行使用,如:

<jsp:useBean...>
    Body
</jsp:useBean...>

Body部分只在標籤建立JavaBean的實例對象時才執行,也就是說,若是scope屬性指定的域範圍存在id屬性指定的JavaBean對象,那Body內容將被忽略。

3、<jsp:setProperty>標籤

該標籤用於設置JavaBean對象的屬性,也就是調用JavaBean對象的setter方法,其語法以下:

<jsp:setProperty name="beanInstanceName" property="propertyName" 
    [ value="{string | <%= expression %>}" | param="parameterName" ] | 
    property="*"    
/>

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

  • property屬性是必不可少的,用於指定JavaBean實例對象的屬性名。

  • value屬性是可選的,它用於指定JavaBean實例對象的某個屬性的值,value屬性的設置值能夠是一個字符串,也能夠是一個表達式。若是是value屬性的設置值是字符串,那麼它將自動轉換成所要設置的JavaBean屬性的類型;若是是表達式,則表達式的結果類型與所要設置的JavaBean屬性的類型一致(不一致則報錯)

  • param屬性是可選的,它用於將請求參數的值賦給JavaBean實例對象的某個屬性。若是當前請求消息中沒有param屬性所指定的請求參數,該標籤不會將null賦給JavaBean屬性,所設置的JavaBean屬性仍將等於其原來的初始值,value和param屬性不能同時使用。

  • property="*",這種形式用於對JavaBean實例對象多個屬性進行賦值,它表示將請求消息中的參數逐一與JavaBean實例對象中的屬性進行比較,若是找到同名的屬性,則將該參數賦給該屬性,不存在則不會被賦值。

注意:若是param屬性和value屬性都沒有設置,且property="prppertyName",它等效於param屬性的設置值與property屬性值相同的狀況

4、<jsp:getProperty>標籤

該標籤用於讀取JavaBean對象的屬性,也就是調用JavaBean對象的getter方法,而後將讀取的屬性值轉換成字符串後插入進輸出的響應正文中,其使用語法以下:

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

其中,name屬性用於指定JavaBean實例對象的名稱,其值應與<jsp:useBean>標籤的id屬性值相同,property屬性用於指定JavaBean實例對象的屬性名,若是一個JavaBean實例對象的某個屬性的值爲null,則該標籤輸出該屬性的結果將是內容爲null的字符串。

相關文章
相關標籤/搜索