Java (JSP): повторение заголовка contentType в «sub-jsp» - PullRequest
6 голосов
/ 24 мая 2010

Что происходит, когда заголовки повторяются в файле .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?

Ответы [ 3 ]

5 голосов
/ 24 мая 2010

От Спецификация JSP :

JSP.5.4

...

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

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

2 голосов
/ 24 мая 2010

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

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

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

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

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

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

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

0 голосов
/ 24 мая 2010

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

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

...