gpt4 book ai didi

jsp - EL 将使用哪个范围(应用程序、servletContext、httpSession)来解释属性

转载 作者:行者123 更新时间:2023-12-04 21:54:46 25 4
gpt4 key购买 nike

当我使用 <c:out value="${track}">在jsp中,属性track应该在哪里?位于(servletContext、httpSession 和 request)中?

我试图让一个 Controller 来设置属性 track到 httpSession,然后 ${track} .jsp 中没有给我任何内容。另一方面,如果我将它设置为 servletContext,${track}给我值(value)。好像不对。你能指导一下在 .jsp(使用 jSTL)和 Controller (.java)之间传递属性吗?提前致谢。

最佳答案

它将在引擎盖下使用 JspContext#findAttribute() 找到属性。链接的 javadoc 提到了以下内容:

Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.



因此,它将返回按页面、请求、 session 和应用程序 (servletcontext) 范围的顺序搜索后找到的第一个非空值。

如果您在多个作用域中具有相同名称的属性和/或您想从特定作用域中获取该属性,那么您可以通过 ${pageScope} 提供的属性映射来访问它。 , ${requestScope} , ${sessionScope}和/或 ${applicationScope} .例如。
${requestScope.track}

也可以看看:
  • Our EL wiki page
  • How to access objects in EL expression language ${}


  • 回到您的实际问题:如果您在访问 session 范围属性时遇到问题,则只能表示 JSP 使用的 session 与 servlet 使用的 session 不同。您可以通过在servlet中打印Session ID来调试它,如下所示
    System.out.println(session.getId());

    并在 JSP 中
    ${pageContext.session.id}

    两者都应该打印相同的。如果不是,那么它肯定不是共享同一个 session 。 session 依赖于域、上下文和 cookie。

    您可以通过打印 ${sessionScope} 来显示所有可用的 session 属性。 .它将以 AbstractMap#toString() 中描述的格式显示一个字符串。 ,包含所有 session 属性。
    ${sessionScope}

    关于jsp - EL 将使用哪个范围(应用程序、servletContext、httpSession)来解释属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345180/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com