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>

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


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.


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".


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.