Java (JSP): повторение contentType заголовка в “sub-jsp”

Что происходит, когда заголовки повторяются в .jsp, Вы включаете в другой .jsp?

Например, если example.jsp запускается с этого:

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page">
<jsp:directive.page contentType="text/html; charset=UTF-8" />

<div class="content">

<jsp:include page="support.jsp"/>
...

(это включает support.jsp),

И затем support.jsp запускается также с этого:

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page">
<jsp:directive.page contentType="text/html; charset=UTF-8" />
... 

Это - проблема? Это - плохая практика?

Что действительно конкретно происходит, когда Вы несколько раз повторяете заголовок, который только соответствует одному заголовку на получающейся .html странице?

6
задан SyntaxT3rr0r 24 May 2010 в 17:53
поделиться

3 ответа

Из Спецификация JSP :

JSP.5.4

...

Включенная страница не может изменить код состояния ответа или установить заголовки. Это исключает использование таких методов, как setCookie. Попытки вызвать эти методы будут проигнорированы. В ограничение эквивалентно одному налагается на метод включения RequestDispatcher класс.

То есть попытки установить тип контента будут проигнорированы.

5
ответ дан 17 December 2019 в 00:04
поделиться

Директива транслируется непосредственно в ServletResponse.setContentType call

В документации для этого метода говорится:

Устанавливает тип содержимого ответа отправляется клиенту, если ответ еще не получен. Данный тип контента может включать в себя спецификация кодировки символов, для например, text / html; charset = UTF-8. В кодировка символов ответа только устанавливается из данного типа контента, если этот метод вызывается перед getWriter называется.

Этот метод можно вызывать повторно. изменить тип контента и характер кодирование. Этот метод не действует, если вызывается после того, как ответ был преданный идее. Он не устанавливает кодировка символов ответа, если это вызывается после вызова getWriter или после того, как ответ был преданный идее.

Контейнеры должны сообщать тип содержимого и персонаж кодировка, используемая для сервлета автор ответа клиенту, если протокол предоставляет способ для этого. В случае HTTP Content-Type используется заголовок.

Мне кажется, что лучше использовать эту директиву только один раз на странице JSP верхнего уровня, возможно, даже в сервлете контроллера, но определенно не во включенных страницах.

Для страниц, написанных не на JSPX, одна директива, которая IS полезна и должна быть установлена ​​во всех JSP, содержащих символы, отличные от ascii, - это <% @ page pageEncoding = "XXXX"%> . Я настоятельно рекомендую его, если вам не нравится печатать коды \ uXXXX на всех страницах.

2
ответ дан 17 December 2019 в 00:04
поделиться

Это абсолютно нормальная практика.

То, что вы называете «заголовками», - это просто директивы для jsp-компилятора.

0
ответ дан 17 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

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