JSP: tag <c: out> JSTL

110

Pisząc stronę JSP, co dokładnie robi <c:out>? Zauważyłem, że oba mają ten sam wynik:

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>
Steve Kuo
źródło

Odpowiedzi:

153

c:out wymyka znaki HTML, dzięki czemu można uniknąć skryptów między witrynami.

Jeśli person.name = <script>alert("Yo")</script>

skrypt zostanie wykonany w drugim przypadku, ale nie podczas używania c:out

krosenvold
źródło
2
Tylko jeśli 'escapeXML' jest ustawione na true (nie jestem pewien, czy jest to ustawienie domyślne)
Chris Serra,
17
Uważam, że domyślnie jest to prawda.
Zack The Human
7
Uwaga: ucieka z XML, a nie HTML. Jedna z bardziej irytujących subtelności JSTL. W końcu zawsze piszę własny HTML escape EL fn.
Adam Gent,
4
W nazwie atrybutu rozróżniana jest wielkość liter, więc jest to escapeXml = "true", a nie escapeXML
Mark Chorley
2
Nie mam pojęcia, co pokazuje przykład kodu tej odpowiedzi - czy ktoś może to wyjaśnić? Wspomina o „drugim przypadku”, ale nie widzę tego i nie widzę, aby c: out był używany w kodzie.
IcedDante
126

Jak powiedział Will Wagner, w starej wersji jsp powinieneś zawsze używać c:outdo generowania dynamicznego tekstu.

Co więcej, używając tej składni:

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

możesz wyświetlić tekst „No name”, gdy nazwa jest pusta.

alexmeia
źródło
24
Chłodny! Nie wiedziałem tego.
Adam Asham
Zgoda, spoko. Dzięki za nauczanie i pomoc. Tego też nie wiedziałem. Twoje zdrowie!
B-Money
20
lub <c: out value = "$ {person.name}" default = "No Name" />
gmustudent,
2
JSR 52, wydanie konserwacyjne 2, patrz strona 22 „z korpusem”. Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett,
1
@Barett. Chłodny. Zastanawiam się, dlaczego to nigdy nie tworzy żadnego z samouczków ani przykładów. Wygodniejsza składnia niż domyślny atrybut IMO.
Thilo,
5

Możesz jawnie włączyć ucieczkę jednostek XML, używając atrybutu wartości escapeXml równej true. FYI, domyślnie jest to „prawda”.

Żółtodziób
źródło
Przykładowy kod naprawdę pomógłby uzupełnić tę odpowiedź.
RachelD
4

Starsze wersje JSP nie obsługiwały drugiej składni.

Will Wagner
źródło