JSP: JSTLs <c: out> -Tag

110

Was genau macht das Schreiben einer JSP-Seite <c:out>? Ich habe festgestellt, dass die folgenden beiden das gleiche Ergebnis haben:

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

Antworten:

153

c:out Entkommt HTML-Zeichen, damit Sie Cross-Site-Scripting vermeiden können.

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

Das Skript wird im zweiten Fall ausgeführt, jedoch nicht bei Verwendung c:out

Krosenvold
quelle
2
Nur wenn 'EscapeXML' auf true gesetzt ist (nicht sicher, ob es standardmäßig ist)
Chris Serra
17
Ich glaube, dass es standardmäßig wahr ist.
Zack The Human
7
Hinweis: Es entgeht XML, nicht HTML. Eine der nervigeren Feinheiten von JSTL. Am Ende schreibe ich immer meine eigene HTML-Escape-EL fn.
Adam Gent
4
Der Attributname unterscheidet zwischen Groß- und Kleinschreibung, daher ist es EscapeXml = "true", nicht EscapeXML
Mark Chorley
2
Ich habe keine Ahnung, was das Codebeispiel dieser Antwort zeigt - kann jemand das klären? Es wird ein "zweiter Fall" erwähnt, aber ich sehe das nicht und ich sehe nicht, dass c: out im Code verwendet wird.
IcedDante
126

Wie Will Wagner sagte, sollten Sie in der alten Version von jsp immer c:outdynamischen Text ausgeben.

Verwenden Sie außerdem diese Syntax:

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

Sie können den Text "Kein Name" anzeigen, wenn der Name null ist.

alexmeia
quelle
24
Cool! Ich wusste das nicht.
Adam Asham
Einverstanden, cool. Danke fürs Unterrichten und Helfen. Das wusste ich auch nicht. Prost!
B-Geld
20
oder <c: out value = "$ {person.name}" default = "No Name" />
gmustudent
2
JSR 52, Wartungsversion 2, siehe Seite 22 "mit einem Körper". Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@ Barett. Cool. Ich frage mich, warum dies niemals zu Tutorials oder Beispielen führt. Eine bequemere Syntax als das Standardattribut IMO.
Thilo
5

Sie können das Escapezeichen von XML-Entitäten explizit aktivieren, indem Sie ein Attribut verwenden, bei dem der EscapeXml-Wert gleich true ist. Zu Ihrer Information, es ist standardmäßig "wahr".

Grünschnabel
quelle
Ein Beispielcode würde wirklich helfen, diese Antwort zu vervollständigen.
RachelD
4

Ältere Versionen von JSP unterstützten die zweite Syntax nicht.

Will Wagner
quelle