У меня есть "Документ 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");
Таким образом, я предполагаю, что мой вопрос точно остается таким же: что определяет, как вкладки/пространство/разрывы строки включаются/удаляются в вывод?
Согласно спецификации JSP:
JSP.6.2.3 Семантическая модель
...
Чтобы наглядно объяснить обработку пробельных символов, мы следуем структуре спецификации XSLT. Первым шагом в обработке документа JSP является определение узлы документа. Затем все текстовые узлы, содержащие только пробелы, отбрасываются. удаляются из документа; единственным исключением являются узлы в элементе jsp:text, которые сохраняются дословно. Полученные узлы интерпретируются, как описано в следующих разделах. Данные шаблона либо передаются непосредственно в ответ, либо они опосредованно через (стандартные или пользовательские) действия.
Поэтому, если вы хотите сохранить пробельные символы, вам нужно обернуть нужные части в
.
<trim-directive-whitespaces>true</trim-directive-whitespaces>
Пробелы внутри
удаляются, если вы используете вышеуказанную директиву в web.xml
. Учитывая семантическую модель, приведенную в ответе BalusC, эта директива полезна, только если вы не используете синтаксис XML.
(Tomcat 6.0.16; декларации Servlet 2.5; декларации JSP 2.1 в синтаксисе XML)
Не очень точный ответ, но согласно это сообщение , Джаспер мог это делать (признаю, что не проверял себя):
Я искал вокруг и не думай об этом уже спрашивали раньше.
Я писал свои страницы JSP как XML документы (суффикс .jspx) и один разница, которая меня немного раздражает между использованием краткого XML-документа синтаксис и устаревший синтаксис (до 2.0) разрывы строк или отсутствие бывший.
Обработанный XML-документ приводит к XHTML, где теги не разорваны либо интервалом, либо переносом строки.
Я полностью понимаю концепцию, лежащую в основе почему это так; первый XML документ разбирается до его узла дерево, а затем создается XHTML на основе этого дерева.
Однако я понимаю что белый интервал не обязательно заблудиться по пути. Я проверил код яшмы, в частности org.apache.jasper.compiler.Node и беглый осмотр обнаруживает много .trim () вызовы, которые могут быть без надобности удаление интервала. Однако я не так хорошо знаком с этот код сказать решительно.
В итоге, это может быть ошибка / область улучшения. Независимо от того, есть ли способ вставки разрывов строк с помощью конфигурация? Я чувствую себя уверенно в состоянии достичь этого с уродливым, уродливым Разделы CDATA или что-то подобное (jsp: текст?) ...но прежде чем я перейду к этому беда, есть ли попроще / аккуратнее способ?
Сообщение довольно старое, но такое же поведение также сообщается в этом комментарии , и ваш вопрос, кажется, подразумевает, что это все еще применимо.
Не уверен, что вы можете изменить это поведение (без использования фильтра).