Request.SetAttribute JSP的作用

时间:2015-03-25 02:27:00

标签: jsp java-ee

这是我的jsp页面:

          <!DOCTYPE html>
    <html>
     <head>
      <meta charset="utf-8" />
       <title>Test EL</title>
     </head>
    <body>
    <p>

    <% 
    /* Creation */
    String[] animals = {"dog", "cat", "mouse", "horse"};
    request.setAttribute("animals" , animals);
    %>

    ${ animals[2] }<br />

</p>
</body>

我不明白的是:指令的效用是什么:&#34; request.setAttribut&#34;,我已经宣布了表格,我不知道为什么当我删除那条指令我无法得到动物[2]的价值..我在这里想念的是什么?!

3 个答案:

答案 0 :(得分:0)

${}这是一个JSP EL表达式。 EL只能引用作用域变量,而不能引用本地变量。 Scoped 变量是对作为属性添加的对象的引用,可用于pageContextrequest,{{1}的四个范围中的任何一个}和session

在您的示例中,application本地变量,因此无法通过String[] animals自行访问。要使${}数组可用于JSP EL,需要首先将其放入任何一个可用范围。

因此,在您的示例中,以下内容将数组放在animals范围内。

request

您还可以根据应用程序要求使用以下任何一种方法。

// restricted to current request cycle
request.setAttribute("animals" , animals);

// restricted to this JSP page pageContext.setAttribute("animals" , animals); // restrcited to this user's session session.setAttribute("animals" , animals); // available throughout the application application.setAttribute("animals" , animals); 按以下顺序自动解析上述任何一个范围内的对象:首先查找${animals[i]},然后pageContext,然后request,最后session

要覆盖上述查找顺序,范围也可以明确指定为

application

答案 1 :(得分:0)

除了Ravi之外,如果您仍想在不设置其中一个属性的情况下访问数组,请使用jsp表达式标记显示:

 Eg: <%=animals[2]%> <br/>

答案 2 :(得分:0)

正如ServletRequest documentation中提到的那样,setAttribute()方法用于在请求中存储属性,以便您以后可以访问它。

${variable}是一个用于在Web应用程序中轻松访问这些存储数据的jsp EL,请查看JSP - Expression Language (EL)以获取有关它的更多信息。

如果您在声明变量的同一页面中,可以避免使用setAttribute()和EL并使用out.print()打印变量结果,如下所示:

<%  out.println(animals[2]);%>