我试图了解JSP 动作标签scope
中的属性究竟是如何工作的。jsp:useBean
在我的理解scope
中用于指示 bean 的位置(请求、会话、应用程序等),但是经过一些测试后我遇到了一个有趣的情况,但事实并非如此,请考虑以下 JSP 代码(我在这里使用 scriplets只是为了简单起见):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="package2JSP.User" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user1 = new User("id1","name1");
User user2 = new User("id2","name2");
request.setAttribute("user", user1);
session.setAttribute("user", user2);
%>
<%-- Here I expect to create user bean that represents user2 from session scope--%>
<jsp:useBean id="user" class="package2JSP.User" scope="session"/>
<%-- Here I expect user name to be name2 but it is name1 instead--%>
<jsp:getProperty property="name" name="user"/>
</body>
</html>
所以基本上在这里我创建了 2 个用户对象并将它们设置为请求和会话范围中的“用户”属性,当我尝试从“会话”范围检索“用户”时jsp:useBean
,似乎从“请求”范围检索“用户” .
你能解释一下为什么会这样吗?以这种方式工作而不是通常从指定范围中选择属性的开发原因是jsp:useBean
什么,它有什么优势吗?
现在我知道我可以使用 JSTL/EL 来检索所需的值<c:out value="${sessionScope.user.name}" />
,但我只想知道它是如何jsp:useBean
工作的。