3

有 -

<html>
<body>
         <jsp:useBean id="user" class="user.UserData" scope="session"/>
</body>
</html>

和 -

<html>
<body>
         <%
             Object user = session.getAttribute("user.UserData") ; 
         %>
</body>
</html>

假设user.UserData存在于session. 这两种方式有什么区别吗?

4

2 回答 2

3
<jsp:useBean id="user" class="user.UserData" scope="session"/>

相当于

<%
    Object userDataObject = session.getAttribute("user") ; // id="user" of <jsp:useBean> maps to session attribute name "user"
%>

此外,scriptlet 仅从 session 中读取现有数据,如果未找到属性,则返回 null。
如果 <jsp:useBean> 发现 session 中的属性“user”为空,它将创建一个 'user.UserData' 的实例并添加到 session 范围内的属性“user”中。

于 2012-08-02T18:22:35.337 回答
3

JSP 中的一个众所周知的问题是:避免在页面 (.jsp) 中使用 Java 代码。所以第一种方法更合适,你同意吗?Taglibs<jsp:useBean />是一种无需混合层即可访问代码的好方法。我几乎没有介绍过的这个概念是MVC “规范”的一部分。

- 编辑 -

访问 bean 的第二种方式称为 scriptlet,应尽可能避免使用。可以在此处找到JSTL 与 jsp scriptlets的简要比较。

于 2012-08-02T18:15:29.353 回答