【问题标题】:Can servlet attribute names contain a hyphen -?servlet 属性名称可以包含连字符 - 吗?
【发布时间】:2026-02-09 01:30:01
【问题描述】:

servlet 属性名称是否可以包含连字符-

因为,我试图从我的 servlet 中 doPost 中设置的请求中检索属性,但结果不是我想要的。

在我的 servlet 中有这个:

String X_USER = request.getParameter("X-User");
request.setAttribute("X-User", X_USER);

String YYYY_YYYY = request.getParameter("Y_CODE");
request.setAttribute("Y-Code", YYYY_YYYY);

在我想要显示这些属性的 JSP 中,我这样做:

<li>${X-User}</li>
<li>${Y-Code}</li>

问题是我得到的是 0 而不是参数值。

【问题讨论】:

  • 第一个问题:你试过没有“-”吗?
  • 为什么你得到会话然后不使用它?
  • 您是否尝试将参数存储在session 中,因为当前您将它们存储为请求对象的属性...

标签: jsp servlets el


【解决方案1】:

您的具体问题不是 HTTP 请求参数,而是 EL 变量名。所有 Java 关键字和标识符在 EL 变量名中都是非法的。

- 是 Java(以及 EL)中的减法运算符。 EL 处理器应该如何知道您是打算使用具有文字名称 X-User 的属性还是从 ${X} 中减去 ${User} 的整数结果?它被规范解释为后者,这也解释了0 的数字结果。

只需使用下划线或驼峰式,就像在普通 Java 中一样。

request.setAttribute("Y_User", X_USER);
request.setAttribute("Y_Code", Y_CODE);
${X_User}
${Y_Code}

如果您绝对需要在 EL 中访问包含连字符的请求属性,请在请求范围映射上使用大括号表示法:

${requestScope['X-User']}
${requestScope['Y-User']}

这同样适用于请求参数,顺便说一下,您不一定需要将其复制到 servlet 的请求范围中:

${param['X-User']}
${param['Y-Code']}

另见:

【讨论】:

    【解决方案2】:

    你可以使用jsp的隐式对象作为

    response.getAttribute("X-User");
    response.getAttribute("Y-Code");
    

    当您从 servlet 设置属性时,无需通过 jstl 获取它。

    【讨论】:

    • 感谢您的回答 :) 解决了我的问题 :) 方式:“您是否尝试将参数存储在会话中,因为目前您将它们存储为请求对象的属性... “?您能否提供正确的 wya 将它们存储在会话中?
    最近更新 更多