在jsp中管理用户会话时,我们有时会通过使用session.setAttribute()设置varialble来使用会话,另一方面我们可以创建java bean对象(设置范围到会话)来存储用户信息,并可以在另一个上检索它页。谁能告诉我这两件事之间的区别是什么?
答案 0 :(得分: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 :(得分:1)
有许多不同之处。
首先,当你将某个东西存储为一个属性时,它会被存储为一个Object,因此它必须被转换成你检索它时的实际内容,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相对较新,但这是我对情况的理解。