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.