jsp:useBean 中type、class和beanName

來源:互聯網
上載者:User

網上的解釋是:
class="package.class"
  使用new關鍵字以及class構造器從一個class中樣本一個bean.這個class不能是抽象的,必須有一個公用的,沒有參數的構造器.這個package的名字區別大小寫。

type="package.class"
  如果這個Bean已經在指定的範圍中存在,那麼寫這個Bean一個新的資料庫類型 。如果你沒有使用class或beanName指定type,Bean將不會被樣本.package和class的名字,區分大小寫.

beanName="{package.class | <%= expression %>}" type="package.class"
  使用java.beans.Beans.instantiate方法來從一個class或連續模版中樣本一個Bean,同時指定Bean的類型。beanName可以是package和class也可以是運算式,它的值會傳給Beans.instantiate.tupe的值可以和Bean相同。

 

經實驗後,我的理解:
下面兩種寫法的意義是相同的:

<%
//check session to see if there's a cart in it;
Cart cart = (Cart)session.getAttribute("cart");
if(cart==null){
   cart = new Cart();
   session.setAttribute("cart",cart);
}
%>

第一種:

<jsp:useBean id="cart" class="com.shopping.user.Cart" scope="session"></jsp:useBean>

第二種:

<jsp:useBean id="cart" type="com.shopping.user.Cart" scope="session"></jsp:useBean>

 

假如:當前cart!=null兩者視乎沒什麼區別,若使用session.setAttribute("cart",null);設定後,在訪問包含有<jsp:useBean id="cart" type="com.shopping.user.Cart" scope="session"></jsp:useBean>--- jsp action語句的頁面時就會拋出異常(org.apache.jasper.JasperException: bean cart not found within scope)。而使用<jsp:useBean
id="cart" class="com.shopping.user.Cart" scope="session"></jsp:useBean>不會拋異常,那麼第二種寫法,應是與第一種寫法意義是相同的。//為什麼相同

也就是說使用class時,它是先判斷拿不拿得到執行個體的bean,若拿不到就使用new關鍵字執行個體化一個,而使用的是type時,它只是尋找指定的範圍中是否存在,在不存在時又沒使用classbeanName 指定type就會拋出異常,因此在使用type時就需要注意這點。

並且class與beanName 必須指定package (即使引入了包),而type可以不指定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.