2011-06-23 53 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比较陌生,但那是我对情况的理解。