在jsp中进行会话管理的java bean和session之间的区别

3
在JSP中管理用户会话时,有两种常用方法:一种是使用session.setAttribute()设置变量来管理会话,另一种是创建Java Bean对象(将作用域设置为session)来存储用户信息,并在其他页面上检索它。请问这两种方法之间有什么区别?
2个回答

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时,您不必担心它是否已经创建。jsp:useBean标记将访问Bean(如果已经创建),并在没有Bean的情况下创建它,因此如果您想要调用一个函数或使用一个get方法,您可以保证在使用Bean时它实际上是存在的。如果您打算将它存储在会话变量中,但在存储之前尝试访问它,它将返回null,并且调用函数将引起一些问题。

通常,您使用会话变量来传递信息,而使用Bean来传递具有可能需要调用的函数的类。

因此,如果您计划传递相对简单的数据(例如字符串),将其抛到会话变量中没有任何问题。null作为值是有意义的,只需在比较时小心(例如,使用string_var.equals((String)session.getAttribute("attribute_name"))而不是((String)session.getAttribute("attribute_name")).equals(string_var),因为后者可能是null.equals(),这是未定义的)。

如果您正在使用MVC框架进行编程,那么(据我所知),通常使用bean将信息写入会话(或其他变量,具体取决于情况),然后您的JSP页面将从会话变量中加载信息。这使得网页刷新安全(意思是,如果您点击刷新按钮,它将仅从会话变量中再次获取信息,而不是重新运行所有代码并重新加载会话变量中的信息),当您附加信息、增加或减少时,这是非常重要的。

诚然,我对JSP还比较新,但这就是我的理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接