Отображение содержимого xhtml на странице jsp - PullRequest
1 голос
/ 18 ноября 2009

У меня есть страница JSP, которая отображает содержимое XHTML. Я добавил следующие строки вверху моей страницы JSP:

<?xml version="1.0" encoding="UTF-8"?>
<% response.setContentType("application/xhtml+xml"); %>
<% request.setCharacterEncoding("UTF-8"); %>

Если я изменю вышеприведенную строку на:

<?xml version="1.0" encoding="UTF-8"?>
<% response.setContentType("application/xhtml+xml;charset=UTF-8"); %>
<% request.setCharacterEncoding("UTF-8"); %>

Страница останавливает рендеринг и выдает ошибку синтаксического анализа XML, например, «где-то в моем JavaScript ожидается точка с запятой» или «Инструкция обработки не найдена» и т. Д.

Удаление "charset = utf-8" из response.setContentType заставляет страницу отображаться. Единственная проблема заключается в том, что & rarr; отображается как знак квеста "?"

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Возможно, у вас есть такой код:

<script type="text/javascript"> if (a && b) </script>

, что запрещено в режиме XHTML, но требуется в режиме text/html. Вы найдете объяснение этой проблемы в Отправка XHTML в виде text / html Считается вредным .

И такой код:

<a href="foo?bar&baz">

не допускается ни в одной версии HTML или XHTML. Это всегда должно быть записано как:

<a href="foo?bar&amp;baz">

Очевидно, вы не генерируете страницу с помощью XML-сериализатора (он не позволит вам создавать недопустимые объекты или неправильно закодированные символы), поэтому я предлагаю вам использовать HTML 4 Strict или HTML5-as- text/html, больше подходит для ручной разметки.

1 голос
/ 18 ноября 2009

Страница прекращает рендеринг и выдает ошибку синтаксического анализа XML, такую ​​как «где-то в моем javascript ожидается точка с запятой» или «Инструкция обработки не найдена» и т. Д.

Это произойдет, если вы объявите XHTML как XML вместо «HTML с синтаксисом XML». Действительно избавиться от этой декларации XML. Если бы вы могли, я бы пошел дальше и просто использовал HTML как настоящий HTML, то есть использовал <!doctype html> или любой другой HTML strict тип документа. Также см. http://hsivonen.iki.fi/doctype/.

<% request.setCharacterEncoding("UTF-8"); %>

Первая деталь в том, что request.setCharacterEncoding("UTF-8") - это излишне. На этом этапе уже слишком поздно, чтобы установить это. Вторая деталь в том, что для этого вы используете скриптлеты. Я рекомендую не делать этого. Используйте taglibs / EL, где это необходимо. Если это невозможно, тогда логика кода фактически принадлежит классу Java, прямо или косвенно - классу сервлетов или фильтров.

Удаление "charset = utf-8" из response.setContentType заставляет страницу отображаться. Единственная проблема заключается в том, что → отображается как квестовый знак "?"

response.setContentType(..) является излишним, если вы уже установили его в качестве тега <meta> в HTML <head>, который, на мой взгляд, намного чище.

Наконец, вам также нужно установить в ответ кодировку символов (это отличается от установки типа контента!) Следующим образом:

<%@ page pageEncoding="UTF-8" %>

Кстати, это также неявно создает тег <meta> для content-type. Дополнительную справочную информацию и советы можно найти здесь .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...