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

Posted

技术标签:

【中文标题】如何访问 JSP 中 servlet 设置的请求属性?【英文标题】:How to access a request attribute set by a servlet in JSP? 【发布时间】:2012-06-09 12:50:12 【问题描述】:

我正在尝试检索由 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 和目标页面)中传递一个参数,效果会非常好。

【问题讨论】:

【参考方案1】:

您是否尝试过使用表达式标签?

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

【讨论】:

我考虑过使用它,但如果可能的话,我更喜欢使用 $sth 约定。 不推荐使用scriptlet。【参考方案2】:

它已经在默认的 EL 范围内可用,所以只需

$attrib

应该这样做。

如果你想显式指定范围(EL会依次搜索页面、请求、会话和应用范围,寻找匹配属性名的第一个非空属性值),那么你需要通过范围来引用它而是映射,请求范围为 $requestScope

$requestScope.attrib

这仅在您可能在页面范围内具有完全相同名称的属性时才有用,否则会获得优先权(但这种情况通常表明设计不佳)。

另见:

Our EL wiki page Java EE 6 tutorial - Expression Language

【讨论】:

如何在 CSS 文件中获得相同的属性?【参考方案3】:

也许EL 语法和scriptlet 语法之间的比较会帮助您理解这个概念。

param 就像 request.getParameter() requestScope 就像 request.getAttribute()

你需要告诉request attributerequest parameter

【讨论】:

谢谢!这有助于我们在不知不觉中认为 requestScope 类似于请求对象本身,而不是 request.getAttribute()。【参考方案4】:

如果范围是请求类型,我们在请求中使用request.setAttribute(key,value)设置属性,在jsp中使用$requestScope.key检索。

【讨论】:

以上是关于如何访问 JSP 中 servlet 设置的请求属性?的主要内容,如果未能解决你的问题,请参考以下文章

在jsp文件中如何编写正确的servlet请求路径

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

请问servlet路径怎么设置?

在servlet中输出文件后,如何再跳转到新页面