2016-11-17 58 views
0

JSP標籤下面JSP標籤VS表達式語言

<jsp:useBean id=」employee」 class=」employee」/> 
<jsp:getProperty name=」employee」 property=」name」/> 

另一個用於EL

{employee.name} 

假設正確編譯JSP中,怎麼會在2頁不同,如果你有正確填充在一個學生對象在訪問該頁面之前的會話,以及當學生對象爲空時的另一會話。

有人可以解釋這個給我更清楚嗎?

回答

1

JSP標籤:

official Sun documentation說:

<jsp:useBean>元件定位或實例化一個JavaBeans 組件。

它首先嚐試找到一個 bean的實例。如果該bean不存在,則<jsp:useBean>將其從 實例化爲類或序列化模板。

要找到或實例化豆,<jsp:useBean>採取以下步驟 ,順序如下:

  1. 試圖找到與您指定的範圍和名稱的bean。
  2. 使用您指定的名稱定義對象引用變量。
  3. 如果發現該bean,則將其引用存儲在該變量中。如果您指定了類型,則給出該類型的bean。
  4. 如果它沒有找到該bean,則從您指定的類中實例化它,並將其引用存儲到新變量中。如果名稱 名稱表示序列化的模板,則該bean將由java.beans.Beans.instantiate的 實例化。
  5. 如果已經實例化(而不是位於)bean,並且它具有body標籤或元素(介於和 之間),則執行body標籤。

標籤會掃描所有範圍,在pagerequestsessionapplication順序:

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

EL:

它只能找到(從不創建)屬性在所有相同的範圍內(和相同的訂單)我們都有豆類。請務必使用the right EL keywords來訪問它們。


再回到你的問題,對於這兩種策略,如果你有student對象範圍設定,都將獲得得當以及處理它的屬性。

否則,useBean標記會創建一個新對象並將其存儲在指定的範圍內,而EL只會知道對象何時爲null並且不會嘗試訪問其屬性,而只會簡單地打印任何內容。