#java #servlets
#java #сервлеты
Вопрос:
Когда я вызываю, HttpServletRequest.setAttribute(name, string)
содержимое ASCII, подобное <
строке атрибута, преобразуется в amp;<
и т.д.
Каков обходной путь, чтобы содержимое не преобразовывалось? Я хочу отображать содержимое в javascript confirm()
.
Обновление: строка выводится с помощью <c:out>
Ответ №1:
setAttribute не экранирует содержимое, он просто помещает объект на карту. Скорее всего, это делает ваш движок шаблонов.
Комментарии:
1. Я использую плитки struts1 . Ты думаешь, они это делают? Спасибо.
2. Скорее всего, да. Как вы распечатываете переменную?
3.
<c:out/>
экранирует содержимое по умолчанию. Вам нужно использоватьescapeXml="false"
. Ваша IDE должна обеспечивать автозаполнение для этого, в противном случае взгляните на download.oracle.com/docs/cd/E17802_01/products/products/jsp /…
Ответ №2:
AFAIK, такого преобразования нет, смотрите http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletRequest.html#setAttribute(java.lang.Строка, java.lang.Объект) или http://download.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#setAttribute (java.lang.Строка, java.lang.Объект)
Можете ли вы предоставить больше контекста?
Ответ №3:
<c:out>
имеет атрибут, позволяющий экранировать XML. И что интересно, по умолчанию это true. Ниже приведен пример отключения экранирования XML.
<c:out value="${user.company}" escapeXml="false"/>
Комментарии:
1. Да, это интересно. И странно.
2. Это правильная вещь, которую нужно сделать. В противном случае 95% всех приложений на основе JSP были бы уязвимы для XSS.