JSP: Tag <c: out> JSTL

110

Menulis halaman JSP, apa sebenarnya fungsinya <c:out>? Saya perhatikan bahwa keduanya memiliki hasil yang sama:

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

Jawaban:

153

c:out lolos dari karakter HTML sehingga Anda dapat menghindari pembuatan skrip lintas situs.

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

skrip akan dieksekusi dalam kasus kedua, tetapi tidak saat menggunakan c:out

krosenvold.dll
sumber
2
Hanya jika 'escapeXML' itu disetel ke true (tidak yakin apakah itu secara default)
Chris Serra
17
Saya yakin ini benar secara default.
Zack The Human
7
NB itu lolos dari XML bukan HTML. Salah satu seluk-beluk JSTL yang lebih menjengkelkan. Saya akhirnya selalu menulis escape HTML saya sendiri EL fn.
Adam Gent
4
Nama atribut peka huruf besar / kecil jadi escapeXml = "true" bukan escapeXML
Mark Chorley
2
Saya tidak tahu apa yang ditunjukkan oleh contoh kode jawaban ini- dapatkah seseorang menjelaskan? Ini menyebutkan "kasus kedua" tetapi saya tidak melihatnya dan saya tidak melihat c: out digunakan dalam kode.
IcedDante
126

Seperti yang dikatakan Will Wagner, di versi lama jsp Anda harus selalu menggunakan c:outuntuk mengeluarkan teks dinamis.

Selain itu, menggunakan sintaks ini:

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

Anda dapat menampilkan teks "Tanpa nama" jika nama kosong.

alexmeia
sumber
24
Keren! Saya tidak tahu hal itu.
Adam Asham
Setuju, keren. Terima kasih telah mengajar dan membantu. Saya juga tidak tahu itu. Bersulang!
B-Money
20
atau <c: out value = "$ {person.name}" default = "No Name" />
gmustudent
2
JSR 52, pemeliharaan rilis 2, lihat halaman 22 "dengan badan". Tautan: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@Tokopedia Keren. Saya bertanya-tanya mengapa ini tidak pernah membuat tutorial atau contoh apa pun. Sintaks yang lebih nyaman daripada atribut default IMO.
Thilo
5

Anda dapat secara eksplisit mengaktifkan pelolosan entitas Xml dengan menggunakan atribut nilai escapeXml sama dengan true. FYI, itu secara default "benar".

Orang yg masih hijau
sumber
Beberapa kode contoh akan sangat membantu membuat jawaban ini lengkap.
RachelD
4

Versi JSP yang lebih lama tidak mendukung sintaks kedua.

Will Wagner
sumber