ChatGPT解决这个技术问题 Extra ChatGPT

JSP:JSTL 的 <c:out> 标签

编写 JSP 页面,<c:out> 究竟是做什么的?我注意到以下两者具有相同的结果:

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>

M
Mdhar9e

c:out 对 HTML 字符进行转义,以便避免跨站点脚本。

如果person.name = <script>alert("Yo")</script>

脚本将在第二种情况下执行,但在使用 c:out 时不会执行


仅当 'escapeXML' 设置为 true 时(不确定是否为默认设置)
我相信默认情况下这是真的。
注意它转义 XML 而不是 HTML。 JSTL 更令人讨厌的细微之处之一。我最终总是编写自己的 HTML 转义 EL fn。
属性名称区分大小写,因此它是 escapeXml="true" 而不是 escapeXML
我不知道这个答案的代码示例显示了什么 - 有人可以澄清一下吗?它提到了“第二种情况”,但我没有看到,也没有看到代码中使用了 c:out。
j
jpaugh

正如 Will Wagner 所说,在旧版本的 jsp 中,您应该始终使用 c:out 来输出动态文本。

此外,使用这种语法:

<c:out value="${person.name}">No name</c:out>

当名称为空时,您可以显示文本“无名称”。


凉爽的!我不知道。
同意,酷。感谢您的教导和帮助。我也不知道。干杯!
JSR 52,维护版本 2,请参见第 22 页“带有正文”。链接:download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
@巴雷特。凉爽的。我想知道为什么这从来没有制作任何教程或示例。比默认属性 IMO 更方便的语法。
C
Chris Serra

如果 person.name 的值恰好为空,c:out 还具有分配默认值的属性。

来源:out (TLDDoc Generated Documentation)


G
Greenhorn

您可以通过使用属性 escapeXml 值等于 true 来显式启用 Xml 实体的转义。仅供参考,默认情况下为“true”。


一些示例代码确实有助于使这个答案完整。
W
Will Wagner

旧版本的 JSP 不支持第二种语法。