Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 使用表达式语言访问servlet属性_Jsp_Servlets - Fatal编程技术网

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

Jsp 使用表达式语言访问servlet属性,jsp,servlets,Jsp,Servlets,有两件事我很困惑 在servlet类中,我有: String name = "James Bond"; Session.setAttribute("name", name); 为什么我读过的所有书中的属性名和属性值都是一样的。我知道一个是字符串文字,一个是对象,但它必须是相同的吗 第二件事我很困惑。。。假设我将servlet代码更改为 String name = "James Bond"; Session.setAttribute("hisname", name

有两件事我很困惑

在servlet类中,我有:

    String name = "James Bond";
    Session.setAttribute("name", name);
为什么我读过的所有书中的属性名和属性值都是一样的。我知道一个是字符串文字,一个是对象,但它必须是相同的吗

第二件事我很困惑。。。假设我将servlet代码更改为

    String name = "James Bond";
    Session.setAttribute("hisname", name);
当我尝试使用JSP访问它时:

    ${sessionScope.name}

它很好用。那么Session.setAttribute()中第一个参数的意义是什么呢?

我猜,您仍然可以从会话中访问旧的“name”,尝试使会话无效,并且“name”属性将被删除

我猜,您仍然可以从会话访问旧的“名称”,尝试使会话无效,“名称”属性将被删除

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

String name = "James Bond";
request.setAttribute("007",name);
然后在.jsp中,您可以使用

${requestScope.007}
EL表达式将按以下顺序在所有范围内搜索007对象:

  • 寻呼机
  • 请求范围
  • 会话范围
  • 应用范围
  • 您将数据存储在会话作用域中,因此当会话处于活动状态时,您将拥有可用的数据。所以当你这样做的时候:

    String name = "James Bond";
    Session.setAttribute("name", name);
    
    然后在同一范围内(在同一会话中)存储另一个属性


    访问fist${sessionScope.name}不会出现任何错误,因为它仍然可用。尝试使用其他作用域。

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

    String name = "James Bond";
    request.setAttribute("007",name);
    
    然后在.jsp中,您可以使用

    ${requestScope.007}
    
    EL表达式将按以下顺序在所有范围内搜索007对象:

  • 寻呼机
  • 请求范围
  • 会话范围
  • 应用范围
  • 您将数据存储在会话作用域中,因此当会话处于活动状态时,您将拥有可用的数据。所以当你这样做的时候:

    String name = "James Bond";
    Session.setAttribute("name", name);
    
    然后在同一范围内(在同一会话中)存储另一个属性


    访问fist${sessionScope.name}不会出现任何错误,因为它仍然可用。尝试使用其他作用域。

    名称和值不必相同

    当你做
    ${sessionScope.name}
    时,你仍然得到了“詹姆斯·邦德”。这一定是因为您仍然可以在会话范围中使用您定义的“name”属性

    第二次将名称更改为其他名称,如下所示:

    String name = "James Bond";
    Session.setAttribute("name", name);
    String name = "The Bond";////////////////make this change. 
    Session.setAttribute("hisname", name);
    
    因此,当您这次执行
    ${sessionScope.name}
    时,您将得到“詹姆斯·邦德”,而不是“邦德”


    如果您执行
    ${sessionScope.hisname}
    ,您将得到“债券”

    名称和值不需要相同

    当你做
    ${sessionScope.name}
    时,你仍然得到了“詹姆斯·邦德”。这一定是因为您仍然可以在会话范围中使用您定义的“name”属性

    第二次将名称更改为其他名称,如下所示:

    String name = "James Bond";
    Session.setAttribute("name", name);
    String name = "The Bond";////////////////make this change. 
    Session.setAttribute("hisname", name);
    
    因此,当您这次执行
    ${sessionScope.name}
    时,您将得到“詹姆斯·邦德”,而不是“邦德”


    如果你做了
    ${sessionScope.hisname}
    ,你会得到“债券”

    名称和值不需要相同。为什么属性名称和属性值在我读过的所有书籍中基本上是相同的,为了代码可读性和维护的目的。假设您通过所有应用程序将
    Dog
    数据保存在一个名为
    login
    的对象中,反之亦然,您必须对该应用程序进行维护。如果你在一到两页中工作,就不会那么痛苦了……名称和值不需要相同。为什么我读过的所有书籍中的属性名称和属性值基本上都是相同的,以便于代码可读性和维护。假设您通过所有应用程序将
    Dog
    数据保存在一个名为
    login
    的对象中,反之亦然,您必须对该应用程序进行维护。如果你只写一两页,就不会那么痛苦了。。。