2011-06-23 49 views

回答

1

它們只是傳遞相同數據的稍微不同的方式。

正如你說,你既可以:

(1)

session.setAttribute("entry", entry); 

或(2)

session.setAttribute("name", entry.getName()); 
session.setAttribute("address", entry.getAddress()); 
session.setAttrubute("phone", entry.getPhone()); 

那麼對於(1)中,JSP可能包括:

Name: ${entry.name}<br/> 
Address: ${entry.address}<br/> 
Phone: ${entry.phone}<br/> 

而對於(2),等效JSP可能是:

Name: ${sessionScope['name']}<br/> 
Address: ${sessionScope['address']}<br/> 
Phone: ${sessionScope['phone']}<br/> 

(或者您可以使用<c:set>設置一些局部變量,使上面的代碼有點更具可讀性)。

基本上,兩者都是相同的,但(1)使用較少的代碼並且更易於閱讀和理解。

(雖然我還是一個Java EE新受自己,所以我不會介意一個更有經驗的意見!)

1

有許多的不同之處。首先,當你將東西存儲爲一個屬性時,它被存儲爲一個對象,所以當你檢索它時,它必須被轉換爲實際的東西,而一個bean始終是它的類。

其次,當你使用一個bean時,你不必擔心它是否被創建。如果bean已經被創建,jsp:useBean標籤將訪問這個bean,如果它沒有創建它,那麼如果你想調用一個函數或者使用一個get方法,你可以保證它在你使用bean時存在。如果您打算將它存儲在會話變量中,但在存儲它之前嘗試訪問它,它將返回null並調用函數將導致一些問題。

通常,您使用會話變量來傳遞信息,而您使用bean來傳遞具有您可能需要調用的函數的類。因此,如果你打算傳遞相對簡單的數據(例如字符串),那麼把它扔到會話變量中沒有什麼不妥。 null作爲一個值是有意義的,只是在比較時要小心(例如:string_var.equals((String)session.getAttribute(「attribute_name」))not((String)session.getAttribute(「attribute_name」))。equals(string_var )作爲第二個可能是null.equals()這是沒有定義)。

如果你在MVC框架中編程,那麼(據我的理解),你通常使用bean來寫入會話(或其他,根據情況而定)變量,然後你的JSP頁面將加載信息會話變量。這(除其他外)使網頁更新安全(也就是說,如果點擊刷新按鈕,它將再次從會話變量中獲取信息,而不是再次運行所有代碼並從會話變量中重新載入信息),當你追加信息,遞增或遞減時,這是一件大事。

不可否認,我對JSP比較陌生,但那是我對情況的理解。