JSP:JSTLの<c:out>タグ


110

JSPページを書いて、正確には何を<c:out>しますか?次の両方が同じ結果になることに気づきました:

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

回答:


153

c:out クロスサイトスクリプティングを回避できるように、HTML文字をエスケープします。

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

スクリプトは2番目のケースで実行されますが、使用時には実行されません c:out


2
'escapeXML'がtrueに設定されている場合のみ(デフォルトかどうかは不明)
Chris Serra

17
私はそれがデフォルトで本当だと信じています。
ザック・ザ・ヒューマン

7
NBはHTMLではなくXMLをエスケープします。JSTLのより厄介な微妙な点の1つ。私はいつも自分のHTMLエスケープEL fnを書くことになります。
アダム・ゲント

4
属性名は大文字と小文字が区別されるため、escapeXMLではなくescapeXml = "true"になります
Mark Chorley

2
この回答のコードサンプルが何を示しているのかわかりません-誰かが明確にできますか?「2番目のケース」について言及していますが、私はそれを見ていないし、c:outがコードで使用されているのを見ていません。
IcedD​​ante 2014年

126

Will Wagnerが言ったように、jspの古いバージョンでは、常にc:out動的テキストの出力に使用する必要があります。

さらに、次の構文を使用します。

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

名前がnullの場合、「名前なし」というテキストを表示できます。


24
涼しい!それは知らなかった。
アダムアシャム

同意しました。教えてくれてありがとう。それも知りませんでした。乾杯!
B-Money

20
または<c:out value = "$ {person.name}" default = "No Name" />
gmustudent 2012

2
JSR 52、メンテナンスリリース2、22ページの「本体付き」を参照。リンク:download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Barett。涼しい。なぜこれがチュートリアルや例をまったく作成しないのでしょうか。デフォルトの属性IMOよりも便利な構文。
Thilo


5

trueに等しい属性escapeXml値を使用して、Xmlエンティティのエスケープを明示的に有効にすることができます。参考までに、デフォルトでは「true」です。


いくつかのサンプルコードは、この答えを完全にするのに役立ちます。
RachelD

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.