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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.