servlet 属性名称可以包含连字符 - 吗?

Can servlet attribute names contain a hyphen -?

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 而不是参数值。

你的具体问题不是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']}

另请参阅:

您可以将 jsp 的隐式对象用作

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

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