JSP:JSTL的<c:out>标记

Ste*_*Kuo 109 java tags jsp jstl

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

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>
Run Code Online (Sandbox Code Playgroud)

kro*_*old 151

c:out 转义HTML字符,以避免跨站点脚本.

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

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

  • 我相信这是默认的. (16认同)
  • NB它逃脱XML而不是HTML.JSTL更令人讨厌的微妙之处.我最终总是编写自己的HTML转义EL fn. (7认同)
  • 属性名称区分大小写,因此它的escapeXml ="true"不是escapeXML (4认同)
  • 只有'escapeXML'设置为true(不确定是否默认) (2认同)
  • 我不知道这个答案的代码示例是什么 - 有人可以澄清吗?它提到了"第二种情况",但我没有看到,我没有看到c:在代码中使用. (2认同)
  • @IcedD​​ante:第一种情况是OP提到的第一个代码行,其中c:out.第二种情况是OP的第二行代码 (2认同)

ale*_*eia 123

正如Will Wagner所说,在旧版本的jsp中,你应该总是使用c:out输出动态文本.

而且,使用这种语法:

<c:out value="${person.name}">No name</c:out>
Run Code Online (Sandbox Code Playgroud)

当name为null时,您可以显示文本"No name".

  • 凉!我不知道. (23认同)
  • 或<c:out value ="$ {person.name}"default ="No Name"/> (20认同)
  • JSR 52,维护版本2,参见第22页"带有主体".链接:http://download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec/ (2认同)

Chr*_*rra 5

c:out如果值person.name恰好为null,则还具有用于指定默认值的属性.

来源:out(TLDDoc生成的文档)


Gre*_*orn 5

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