如何在JSP中访问Servlet设置的请求属性?

27

我正在尝试在JSP页面中检索由Servlet设置的属性值,但是我只能通过${param}来运作参数。我不确定是否可以采取其他不同的方法。也许很简单,但我还无法处理它。

public void execute(HttpServletRequest request, HttpServletResponse response) {

    //there's no "setParameter" method for the "request" object
    request.setAttribute("attrib", "attribValue");

    RequestDispatcher rd = request.getRequestDispatcher("/Test.jsp");
    rd.forward(request,response);
}

在JSP中我一直在尝试获取"attribValue",但是没有成功:

<body>
    <!-- Is there another tag instead of "param"??? -->
    <p>Test attribute value: ${param.attrib}
</body>
如果我通过整个过程(调用页面、servlet 和目标页面)传递参数,它的效果非常好。
4个回答

35

它已经在默认的EL作用域中可用了,所以只需要

${attrib}

应该这样做。

如果您希望明确指定范围(EL将按顺序搜索页面、请求、会话和应用程序范围以查找属性名称匹配的第一个非空属性值),则需要通过作用域映射引用它,即对于请求范围需要使用 ${requestScope}

${requestScope.attrib}

只有当您在页面范围内具有可能与属性完全相同的名称而否则会占优势的情况下,此方法才有用(但这种情况通常表明设计不良)。

另请参阅:


我该如何在CSS文件中获取相同的属性? - Vrishank

10

或许比较一下 EL 语法和 scriptlet 语法会帮助你理解这个概念。

  • param 类似于 request.getParameter()
  • requestScope 类似于 request.getAttribute()

你需要区分 request attributerequest parameter


谢谢!这很有帮助。不知不觉中,我们认为requestScope与请求对象本身相似,而不是request.getAttribute()。 - Saurabh Patil

4

你尝试过使用表达式标签吗?

<%= request.getAttribute("attrib") %>

1
我考虑过使用它,但如果可能的话,我更喜欢使用${sth}约定。 - Alex
不建议使用Scriptlet。 - smwikipedia

3
如果范围是请求类型,我们可以使用 request.setAttribute(key,value) 在请求中设置属性,然后在 JSP 中使用 ${requestScope.key} 读取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接