jsp会话管理中javabean和session的区别

jsp会话管理中javabean和session的区别,jsp,javabeans,session-management,Jsp,Javabeans,Session Management,在jsp中管理用户会话时,我们有时通过使用session.setAttribute()设置varialble来使用会话,另一方面,我们可以创建JavaBean对象(将作用域设置为session)来存储用户信息,并可以在另一个页面上检索它。谁能告诉我这两件事有什么区别吗?它们只是传递相同数据的方式略有不同而已 正如你所说,你可以: (一) 或(2) 对于(1),JSP可能包括: Name: ${entry.name}<br/> Address: ${entry.address}<

在jsp中管理用户会话时,我们有时通过使用session.setAttribute()设置varialble来使用会话,另一方面,我们可以创建JavaBean对象(将作用域设置为session)来存储用户信息,并可以在另一个页面上检索它。谁能告诉我这两件事有什么区别吗?

它们只是传递相同数据的方式略有不同而已

正如你所说,你可以:

(一)

或(2)

对于(1),JSP可能包括:

Name: ${entry.name}<br/>
Address: ${entry.address}<br/>
Phone: ${entry.phone}<br/>
Name:${entry.Name}
地址:${entry.Address}
电话:${entry.Phone}
而对于(2),等效的JSP可能是:

Name: ${sessionScope['name']}<br/>
Address: ${sessionScope['address']}<br/>
Phone: ${sessionScope['phone']}<br/>
Name:${sessionScope['Name']}
地址:${sessionScope['Address']}
电话:${sessionScope['Phone']}
(或者您可以使用
设置一些局部变量,使上述代码更具可读性)

本质上,两者是相同的,但(1)使用更少的代码,更容易阅读和理解


(虽然我自己还是一个JavaEE新手,所以我不介意有更老练的观点!)

有很多不同之处

首先,当您将某个对象存储为属性时,它被存储为对象,因此当您检索它时,它必须被转换为它实际上是什么,bean始终是它所属的类

其次,当您使用bean时,您不必担心它是否已被创建。如果bean已经创建,jsp:useBean标记将访问该bean,如果尚未创建,则将创建该bean。因此,如果您希望调用函数或使用get方法,则可以保证在使用bean时该bean存在。如果计划将其存储在会话变量中,但在存储之前尝试访问它,它将返回null,调用函数将导致一些问题

通常,您使用session变量来传递信息,而使用bean来传递具有您可能想要调用的函数的类

因此,如果您计划传递相对简单的数据(例如字符串),将其丢弃到会话变量中没有什么错。null作为一个值是有意义的,只是在比较时要小心(例如do string_var.equals((string)session.getAttribute(“attribute_name”))而不是((string)session.getAttribute(“attribute_name”)).equals(string_var),因为第二个可能是null.equals(),但没有定义)

如果您是在MVC框架中编程,那么(据我所知),您通常使用bean写入会话(或其他,取决于情况)变量,然后JSP页面将从会话变量加载信息。这(除其他外)使网页刷新安全(意味着,如果您点击刷新按钮,它将再次从会话变量获取信息,而不是再次运行所有代码并从会话变量重新加载信息),这在添加信息、递增或递减时是一件大事

诚然,我对JSP相对较新,但这是我对情况的理解

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