JSP: etiqueta <c: out> de JSTL

110

Escribiendo una página JSP, ¿qué hace exactamente <c:out>? He notado que lo siguiente ambos tienen el mismo resultado:

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

Respuestas:

153

c:out escapa de los caracteres HTML para que pueda evitar las secuencias de comandos entre sitios.

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

el script se ejecutará en el segundo caso, pero no cuando se usa c:out

krosenvold
fuente
2
Solo si 'escapeXML' se establece en verdadero (no estoy seguro si es de forma predeterminada)
Chris Serra
17
Creo que es verdad por defecto.
Zack The Human
7
Nota: escapa a XML, no a HTML. Una de las sutilezas más molestas de JSTL. Siempre termino escribiendo mi propio HTML escape EL fn.
Adam Gent
4
El nombre del atributo distingue entre mayúsculas y minúsculas, por lo que es escapeXml = "true" no escapeXML
Mark Chorley
2
No tengo idea de lo que muestra el ejemplo de código de esta respuesta, ¿alguien puede aclararlo? Menciona un "segundo caso" pero no veo eso y no veo que c: out se use en el código.
IcedDante
126

Como dijo Will Wagner, en la versión anterior de jsp siempre debe usar c:outpara generar texto dinámico.

Además, usando esta sintaxis:

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

puede mostrar el texto "Sin nombre" cuando el nombre es nulo.

alexmeia
fuente
24
¡Frio! No sabía eso.
Adam Asham
De acuerdo, genial. Gracias por enseñar y ayudar. Yo tampoco lo sabía. ¡Salud!
B-Money
20
o <c: out value = "$ {person.name}" default = "Sin nombre" />
gmustudent
2
JSR 52, versión de mantenimiento 2, ver página 22 "con cuerpo". Enlace: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@Barett. Frio. Me pregunto por qué esto nunca hace ninguno de los tutoriales o ejemplos. Una sintaxis más conveniente que el atributo predeterminado IMO.
Thilo
5

Puede habilitar explícitamente el escape de entidades XML mediante el uso de un atributo escapeXml value igual a true. FYI, es "verdadero" por defecto.

Bisoño
fuente
Algún código de ejemplo realmente ayudaría a completar esta respuesta.
RachelD
4

Las versiones anteriores de JSP no admitían la segunda sintaxis.

Will Wagner
fuente