JSP:JSTL的<c:out>标记


110

编写一个JSP页面,该<c:out>怎么做?我注意到以下两者具有相同的结果:

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

Answers:


153

c:out 转义HTML字符,以便避免跨站点脚本编写。

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

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


2
仅当“ escapeXML”设置为true时(不确定默认情况下)
Chris Serra

17
我相信默认情况下是正确的。
Zack The Human

7
注意,它转义XML而不是HTML。JSTL比较烦人的微妙之一。我最终总是写自己的HTML Escape EL fn。
亚当·根特

4
属性名称区分大小写,因此它是escapeXml =“ true”而不是escapeXML
Mark Chorley

2
我不知道此答案的代码示例显示了什么—有人可以澄清吗?它提到了“第二种情况”,但我没有看到,也没有看到在代码中使用c:out。
IcedD​​ante 2014年

126

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

此外,使用以下语法:

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

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


24
凉!我不知道。
亚当·阿瑟姆

同意,很酷。感谢您的指导和帮助。我也不知道 干杯!
B-Money

20
或<c:out value =“ $ {person.name}” default =“ No Name” />
gmustudent 2012年

2
JSR 52,维护版本2,请参见第22页“带有主体”。链接:download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Barett。凉。我不知道为什么这从不制作任何教程或示例。比默认属性IMO更方便的语法。
Thilo 2012年


5

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


一些示例代码确实可以帮助完成此答案。
RachelD 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.