使用表达式语言访问servlet属性

时间:2014-03-19 14:17:45

标签: jsp servlets

我困惑的两件事......

在servlet类中我有:

    String name = "James Bond";
    Session.setAttribute("name", name);

为什么我读过的所有图书中的属性名称和属性值都相同。我知道一个是字符串文字,一个是对象,但它必须是相同的吗?

我对第二件事感到困惑......让我们说我将servlet代码更改为

    String name = "James Bond";
    Session.setAttribute("hisname", name);

当我尝试使用JSP访问它时:

    ${sessionScope.name}

它工作正常。那么Session.setAttribute()中第一个参数的重点是什么?

3 个答案:

答案 0 :(得分:3)

使用setAttribute()方法在作用域上存储数据时,第一个参数是稍后将在.jsp中使用的名称。它可以是你想要的任何东西。第二个参数是要存储的对象,它将使用您在第一个参数中使用的名称进行接收。

String name = "James Bond";
request.setAttribute("007",name);

然后在.jsp中,您可以使用

进行访问
${requestScope.007}

EL表达式将按以下顺序搜索所有范围内的007对象:

  1. PAGESCOPE
  2. requestScope
  3. sessionScope
  4. applicationScope
  5. 您正在将数据存储在会话范围中,因此当您的会话处于活动状态时,您将拥有可用的数据。所以当你这样做时:

    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"属性将被删除!