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

问题描述 投票:0回答:2

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

jsp servlets el
2个回答
3
投票

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

-是Java(以及EL)中的减法运算符。 EL处理器应如何得知您是要使用文字名称X-User还是${User}减去${X}的整数的结果?按规范解释为后者,它也解释了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']}

另请参见:


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.