我困惑的两件事......
在servlet类中我有:
String name = "James Bond";
Session.setAttribute("name", name);
为什么我读过的所有图书中的属性名称和属性值都相同。我知道一个是字符串文字,一个是对象,但它必须是相同的吗?
我对第二件事感到困惑......让我们说我将servlet代码更改为
String name = "James Bond";
Session.setAttribute("hisname", name);
当我尝试使用JSP访问它时:
${sessionScope.name}
它工作正常。那么Session.setAttribute()中第一个参数的重点是什么?
答案 0 :(得分:3)
使用setAttribute()方法在作用域上存储数据时,第一个参数是稍后将在.jsp中使用的名称。它可以是你想要的任何东西。第二个参数是要存储的对象,它将使用您在第一个参数中使用的名称进行接收。
String name = "James Bond";
request.setAttribute("007",name);
然后在.jsp中,您可以使用
进行访问${requestScope.007}
EL表达式将按以下顺序搜索所有范围内的007对象:
您正在将数据存储在会话范围中,因此当您的会话处于活动状态时,您将拥有可用的数据。所以当你这样做时:
String name = "James Bond";
Session.setAttribute("name", name);
然后将另一个属性存储在同一范围内(在同一个会话中)
String name = "James Bond";
Session.setAttribute("hisname", name);
您不会因访问拳头$ {sessionScope.name}而获得任何错误,因为您仍然可以使用它。尝试使用其他范围。
答案 1 :(得分:2)
名称和值不必相同。
当你${sessionScope.name}
时,你仍然得到了詹姆斯邦德"。这一定是因为你仍然拥有"名称"您在会话范围中定义的属性。
第二次将名称更改为其他内容,如下所示:
String name = "James Bond";
Session.setAttribute("name", name);
String name = "The Bond";////////////////make this change.
Session.setAttribute("hisname", name);
所以当你这次${sessionScope.name}
时,你会得到詹姆斯邦德"而不是"邦德"。
如果你做${sessionScope.hisname}
,你就会得到#34; The Bond"
答案 2 :(得分:1)
我的猜测,你仍然可以访问旧名称"从会话中,尝试使会话无效," name"属性将被删除!