HttpServletRequest.setAttribute() преобразует символы ASCII

#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.