В этой Главе описаны требования по локализации в JavaServer Pages 1.2 (JSP 1.2).
Поддержка платформой Java локализованного содержимого базируется на
универсальном внутреннем представлении текста как символов Unicode 2.0
(ISO010646) и поддержке нескольких кодировок символов в Unicode.
Java Virtual Machine (JVM)/Виртуальная Машина Java
обязана поддерживать кодировки Unicode и Latin-1, но большинство машин
поддерживают гораздо больше кодировок. Кодировки символов, поддерживаемые JVM от Sun,
описаны по адресу:
http://java.sun.com/products/jdk/1.1/docs/guide/intl/encoding.doc.html
JSP-страница использует кодировку символов. Кодировка может быть описана явно
атрибутом
pageEncoding
директивы
. По умолчанию кодировка выполняется по атрибуту
page
contentType
директивы
, если она имеется, или, в противном случае, устанавливается
ISO-8859-1. ISO-8859-1 известна также как Latin-1.page
Верные имена кодировок символов в JSP 1.2 - те же, что и имена
IANA. Они описаны по адресу:
ftp://venera.isi.edu/in-notes/iana/assignments/character-sets
Атрибут
pageEncoding
должен использоваться только тогда, когда кодировка символов JSP-страницы
организована так, что символы
ASCII отображают сами себя. Директива, содержащая атрибут
pageEncoding
, должна появляться на JSP-странице как можно раньше.
JSP-контейнер может использовать какую-нибудь зависящую от реализации эвристику
и/или структуру для определения ожидаемой кодировки JSP-страницы и проверки
соответствия атрибута
contentType
.
JSP-контейнер вызовет ошибку времени трансляции, если запрошена неподдерживаемая
кодировка символов.
Большинство JSP-страниц написаны так, чтобы отправлять ответ, используя
специфические тип содержимого/content type и кодировку символов. JSP-страница
может использовать атрибут contentType
директивы page
для обозначения типа
содержимого, предоставляемого в ответ на запросы.
Если используется таким образом, данная страница будет всегда предоставлять
содержимое одного и того же типа.
Если страница определяет, что ответ должен иметь другой тип содержимого, она
должна делать это "раньше", определяя, какая иная JSP-страница или сервлет будет
обрабатывать этот запрос, и направлять запрос другой JSP-странице или сервлету.
Значение TYPE по умолчанию
"text/html"
, а значение по умолчанию для кодировки символов - ISO-8859-1.
Регистр имён типов содержимого хранится в IANA.
См.:
ftp://venera.isi.edu/in-notes/iana/assignments/media-types/media-types
Атрибут
contentType
обязан использоваться только в том случае, если кодировка символов
организована так, что символы
ASCII отображают сами себя, как минимум до тех пор, пока атрибут
contentType
не будет найден. Директива, содержащая атрибут contentType
, должна
появляться на JSP-странице как можно раньше.
Некоторые JSP-страницы созданы так, что они могут направлять содержимое,
используя различные типы содержимого и кодировки символов, в зависимости от
ввода времени запроса. Эти страницы могут быть организованы как специальные
акции или скриптлеты, которые определяют тип содержимого ответа и предоставляют 'связку'
с другим кодом, реально генерирующим содержимое ответа.
Динамическая установка типа содержимого основана на вызове response.setcontentType
().
Этот метод может быть вызван, пока никакого содержимого не было выслано в поток
ответа. Данные высылаются в поток ответа при очистках буфера буферизованных
страниц или при обнаружении первого содержимого (избегая пробелов)
небуферизованных страниц.
Пробел в страницах JSP вводится известным трюком синтаксиса JSP, но более
управляем в JSP-страницах с синтаксисом XML.
Спецификация JSP не предписывает определённого подхода к структурированию
локализованного содержимого, поэтому возможны различные подходы.
Два обычных подхода заключаются в использовании шаблонной taglib
и помещения локализованных строк из хранилища ресурсов, либо в
использовании локализованных JSP-страниц. Каждый подход имеет свои преимущества
и недостатки. Некоторые пользователи используют трансформацию
JSP-документов для простого замещения элементов локализованными строками,
обрабатывая таким образом синтаксис JSP без снижения производительности на этапе
прогона. Сочетание этих трёх подходов также имеет определённый смысл.
Есть несколько подходов к наилучшему проведению локализации. Мы ожидаем
появления JSR-052,
стандартной библиотеки тэгов JSP, чтобы адресовать к ней некоторые из этих
вопросов.