JSP: тег <c: out> JSTL

111

Что именно делает при написании страницы 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>

скрипт будет выполнен во втором случае, но не при использовании c:out

krosenvold
источник
2
Только если 'escapeXML' установлен в true (не уверен, что это по умолчанию)
Крис Серра,
17
Я считаю, что это правда по умолчанию.
Zack The Human
7
NB, он избегает XML, а не HTML. Одна из самых раздражающих тонкостей JSTL. В конце концов, я всегда пишу свой собственный HTML-escape EL fn.
Adam Gent
4
Имя атрибута чувствительно к регистру, поэтому escapeXml = "true" не escapeXML
Марк Чорли,
2
Я понятия не имею, что показывает этот пример кода ответа - может кто-нибудь уточнить? В нем упоминается «второй случай», но я этого не вижу и не вижу, чтобы c: out использовался в коде.
IcedDante 02
126

Как сказал Уилл Вагнер, в старой версии jsp вы всегда должны использовать c:outдля вывода динамического текста.

Более того, используя этот синтаксис:

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

вы можете отобразить текст «Без имени», если имя не указано.

Алексмея
источник
24
Прохладно! Я не знал этого.
Adam Asham
Согласен, круто. Спасибо за обучение и помощь. Я этого тоже не знал. Ура!
B-Money
20
или <c: out value = "$ {person.name}" default = "No Name" />
gmustudent
2
JSR 52, отладочная версия 2, см. Стр. 22 «с корпусом». Ссылка: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@Barett. Прохладно. Интересно, почему это никогда не делает никаких руководств или примеров. Более удобный синтаксис, чем атрибут IMO по умолчанию.
Тило,
5

Вы можете явно включить экранирование сущностей Xml, используя значение атрибута escapeXml, равное true. К вашему сведению, по умолчанию это «правда».

молокосос
источник
Некоторый пример кода действительно поможет сделать этот ответ полным.
RachelD
4

Старые версии JSP не поддерживали второй синтаксис.

Уилл Вагнер
источник