JSP Document/JSPX: что определяет, как вкладки/пространство/разрывы строки удалены в выводе?

У меня есть "Документ JSP" ("JSP в XML") приятно отформатированный и когда веб-страница сгенерирована и отправлена пользователю, некоторые разрывы строки удалены.

Теперь действительно странная часть: по-видимому, "основной" .jsp всегда получает весь свой удаленный разрыв строки, но для любого последующего .jsp, включенного от основного .jsp, разрывы строки, кажется, случайным образом удалены (некоторые там, другие не).

Например, если я смотрю на веб-страницу, подаваемую из Firefox, и прошу "просматривать источник", я добираюсь для наблюдения то, что сгенерировано.

Так, что определяет, когда/как разрывы строки сохранены/удалены?

Это - просто пример, который я составил... Можете Вы вынуждать .jsp служить этому:

<body><div id="page"><div id="header"><div class="title">...

или это:

<body>
  <div id="page">
    <div id="header">
      <div class="title">...

?

Я беру его, что разрывы строки удалены, чтобы экономить на пропускной способности, но что, если я хочу сохранить их? И что, если я хочу сохранить то же добавление отступа XML как в моем .jsp файле?

Действительно ли это выполнимо?

Править

Следуя совету skaffman, я смотрел на сгенерированные .java файлы, и "основной" не имеет большого количества out.write, но ни один вкладки записи, ни новые строки. Вопреки тому файлу все у тех, что я включаю от того основного .jsp, есть много строк как:

out.write("\t...\n");

Таким образом, я предполагаю, что мой вопрос точно остается таким же: что определяет, как вкладки/пространство/разрывы строки включаются/удаляются в вывод?

6
задан NoozNooz42 29 May 2010 в 13:47
поделиться

3 ответа

Согласно спецификации JSP:

JSP.6.2.3 Семантическая модель

...

Чтобы наглядно объяснить обработку пробельных символов, мы следуем структуре спецификации XSLT. Первым шагом в обработке документа JSP является определение узлы документа. Затем все текстовые узлы, содержащие только пробелы, отбрасываются. удаляются из документа; единственным исключением являются узлы в элементе jsp:text, которые сохраняются дословно. Полученные узлы интерпретируются, как описано в следующих разделах. Данные шаблона либо передаются непосредственно в ответ, либо они опосредованно через (стандартные или пользовательские) действия.

Поэтому, если вы хотите сохранить пробельные символы, вам нужно обернуть нужные части в .

7
ответ дан 10 December 2019 в 02:43
поделиться
<trim-directive-whitespaces>true</trim-directive-whitespaces>

Пробелы внутри удаляются, если вы используете вышеуказанную директиву в web.xml. Учитывая семантическую модель, приведенную в ответе BalusC, эта директива полезна, только если вы не используете синтаксис XML.

(Tomcat 6.0.16; декларации Servlet 2.5; декларации JSP 2.1 в синтаксисе XML)

0
ответ дан 10 December 2019 в 02:43
поделиться

Не очень точный ответ, но согласно это сообщение , Джаспер мог это делать (признаю, что не проверял себя):

Я искал вокруг и не думай об этом уже спрашивали раньше.

Я писал свои страницы JSP как XML документы (суффикс .jspx) и один разница, которая меня немного раздражает между использованием краткого XML-документа синтаксис и устаревший синтаксис (до 2.0) разрывы строк или отсутствие бывший.

Обработанный XML-документ приводит к XHTML, где теги не разорваны либо интервалом, либо переносом строки.

Я полностью понимаю концепцию, лежащую в основе почему это так; первый XML документ разбирается до его узла дерево, а затем создается XHTML на основе этого дерева.

Однако я понимаю что белый интервал не обязательно заблудиться по пути. Я проверил код яшмы, в частности org.apache.jasper.compiler.Node и беглый осмотр обнаруживает много .trim () вызовы, которые могут быть без надобности удаление интервала. Однако я не так хорошо знаком с этот код сказать решительно.

В итоге, это может быть ошибка / область улучшения. Независимо от того, есть ли способ вставки разрывов строк с помощью конфигурация? Я чувствую себя уверенно в состоянии достичь этого с уродливым, уродливым Разделы CDATA или что-то подобное (jsp: текст?) ...но прежде чем я перейду к этому беда, есть ли попроще / аккуратнее способ?

Сообщение довольно старое, но такое же поведение также сообщается в этом комментарии , и ваш вопрос, кажется, подразумевает, что это все еще применимо.

Не уверен, что вы можете изменить это поведение (без использования фильтра).

2
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: