| |
В этой главе описаны синтаксис ядра и семантика спецификации JavaServer Pages 1.2 (JSP 1.2).
JSP-страница это текстовый документ, который описывает, как создавать объект response
из объекта request для данного протокола. Процессинг JSP-страницы может
включать создание и/или использование других объектов.
JSP-страница определяет класс реализации JSP-страницы который реализует
семантику JSP-страницы. Этот класс является подклассом Servlet'а (см.
Главу JSP.8). Во время запроса, запрос, предназначенный для JSP-страницы,
направляется объекту реализации JSP-страницы для обработки/процесинга.
HTTP является протоколом по умолчанию для запросов и ответов. Дополнительные
протоколы запроса/ответа могут поддерживаться JSP-контейнерами (см. ниже).
Объекты request
и response
по умолчанию имеют тип HttpServletRequest
и
HttpServletResponse
, соответственно.
JSP-контейнер это экземпляр системного уровня, предоставляющий
обслуживание жизненного цикла и поддержку на этапе прогона для JSP-страниц Servlet-компонентов.
Запросы, направляемые JSP-странице, направляются JSP-контейнером подходящему
объекту реализации JSP-страницы. Термин web-контейнер
является синонимом JSP-контейнера.
Web-компонент это сервлет или JSP-страница. Элемент servlet
в дескрипторе публикации
web.xml используется для описания обоих типов web-компонентов. Компоненты - JSP-страницы
- определяются неявно в дескрипторе публикации через использование неявного
отображения расширения .jsp
JSP-страницы имеют эквивалент - XML-документ. XML-просмотр JSP-страницы создан для фазы трансляции
(см. ниже).
JSP-страница может быть написана сразу как XML-документ. Начиная с версии JSP
1.2, XML-документ может быть направлен JSP-контейнеру для процесинга.
Нельзя смешивать стандартный синтаксис и XML-синтаксис в одном файле-источнике.
Однако JSP-страница любого синтаксиса может включать JSP-страницу любого
синтаксиса через директиву.
JSP-контейнер обслуживает две фазы существования JSP-страницы. В фазе трансляции
контейнер определяет класс реализации JSP-страницы, соответствующий JSP-странице.
В фазе выполнения контейнер обслуживает один или более экземпляров этого класса
в ответ на запрос и другие события.
Во время фазы трансляции контейнер локализует или создаёт класс
реализации JSP-страницы, соответствующий данной JSP-странице. Этот процесс
определяется семантикой JSP-страницы. Контейнер интерпретирует имеющиеся на этой
странице стандартные директивы и акции и специальные акции, ссылающиеся на
библиотеки тэгов. Библиотека тэгов может по выбору представлять метод проверки
корректности использования на JSP-странице данной библиотеки.
JSP-контейнер гибко работает с деталями класса реализации JSP-страницы, что
может использоваться для адресации вопросов quality-of-service/качества-сервиса.
В фазе выполнения
JSP-контейнер направляет события объекту реализации JSP-страницы. Контейнер
отвечает за инициацию объектов request
и
response
и вызов подходящего объекта реализации JSP-страницы.
По окончании процессинга, объект
response
получается контейнером для соединения с клиентом.
Детали соглашения/контракта между классом реализации JSP-страницы и JSP-контейнером
описаны в Главе JSP.8.
Трансляция JSP-страницы-источника в класс её реализации может произойти в любой
момент между начальной публикацией JSP-страницы в JSP-контейнер и получением и
процессингом запроса клиента для целевой JSP-страницы. В Разделе JSP.2.1.5
описывается выполнение фазы трансляции перед публикацией.
JSP-страница может отмечать обработку некоторых событий. В JSP 1.2 только события init и destroy могут быть описаны в JSP-странице.
Когда первый запрос направляется JSP-странице, метод
jspInit()
, если он имеется,
будет вызван для подготовки страницы.
Аналогично, JSP-контейнер может вызывать метод JSP jspDestroy()
для переделки ресурсов, используемых JSP-страницей, в любой момент, когда запрос
не обслуживается. Это такой же жизненный цикл, что и у сервлетов.
JSP-страница может быть откомпилирована в свой класс реализации, плюс
информация публикации в процессе создания (JSP-страница может также
компилироваться в процессе публикации).
Таким способом утилиты авторизации JSP-страниц и библиотеки тэгов JSP могут
использоваться для создания сервлетов. Преимущества этого подхода таковы:
Компиляция JSP-страницы в контексте web-приложения предоставляет разрешение
спецификаций относительных URL в директивы include
(и в другом месте),
ссылок на taglib
и акции времени трансляции, используемых в специальных акциях.
JSP-страница может также компилироваться во время публикации.
Когда класс реализации JSP-страницы зависит от поддержки классов (в дополнение к классам JSP 1.2 и Servlet 2.3), классы поддержки включаются в упакованный WAR-файл (как определено в спецификации Servlet 2.3) для обеспечения переносимости по JSP-контейнерам.
В Приложении JSP.A есть два примера упаковки JSP-страниц в WAR'ы:
В информации для публикации указаны необходимые поддерживающие классы и отображение между путём оригинального URL в JSP-страницу и URL для класса реализации этой JSP-страницы.
Раньше утилиты отладки не имели стандартного формата для передачи информации отображения исходного кода, позволяющей использовать отладчик одного производителя с JSP-контейнером другого. Спецификация с поддержкой отладки, преодолевшая эти ограничения, разрабатывается как JSR-045 процесса JCP 2.0 под названием "Debugging Support for Non-Java Languages/Поддержка Отладки для Не-Java-Языков".
Детали можно найти по адресу
http://jcp.org/jsr/detail/45.jsp
JSP-страница упаковывается в один или более файлов, часто - как web-приложение,
и направляется утилите типа JSP-контейнера, J2EE-контейнера или IDE. Полная JSP-страница
может содержаться в одном файле. В других случаях основной файл содержит другие
файлы, которые содержать полные JSP-страницы или включаемые фрагменты.
Утилиты обычно требуют отделения файлов JSP-страницы от других файлов.
В некоторых случаях утилиты также требуют отделения файлов верхнего уровня/top JSP
от включаемых фрагментов. Например, если фрагмент может не быть правильной JSP-страницей
и может не компилироваться соответствующим образом.
Определение типа файла также часто практикуется на уровне документации и
обслуживания, как должно быть уже известно тем, кто работает с соглашениями ".c"
и ".h" языка C.
Спецификация Servlet 2.3 использует расширение ".jsp" для обозначения JSP-страницы,
но не дифференцирует основные JSP-файлы и включаемые фрагменты.
Мы рекомендуем (но не обязываем), чтобы:
Приложение web это коллекция ресурсов, которые доступны по указанным URL.
Web-приложение состоит из следующих компонентов:
Web-приложения описаны более детально в спецификации Servlet 2.3.
Web-приложение содержит дескриптор публикации
web.xml, содержащий информация о JSP-страницах,
сервлетах и других ресурсах, используемых в этом web-приложении. Дескриптор
публикации детально описан в спецификации Servlet 2.3.
JSP 1.2 требует, чтобы эти ресурсы были неявно/косвенно ассоциированы с, и доступны через, уникальный экземпляр
ServletContext
, доступный как неявный объект приложения (Раздел JSP.2.8).
Приложение, которому принадлежит JSP-страница, отражается в объекте
application
и влияет на семантику следующих элементов:
include
(Раздел JSP.2.10.3).jsp:include
(Раздел JSP.4.4).jsp:forward
(Раздел JSP.4.5).JSP 1.2 поддерживает переносимую упаковку и публикацию/deployment web-приложений через спецификацию Servlet 2.3. Спецификация JavaServer Pages наследует от спецификации Servlet концепцию приложений, ServletContext'ы, Sessions/Сессии, Requests/Запросы и Responses/Ответы.
Элементы могут использовать спецификации относительных URL, называемые "URI-пути"
в спецификации Servlet 2.3. Эти пути описаны в
спецификации RFC 2396. Мы имеем в виду часть path данной спецификации, а не
части scheme или authority.
Некоторые примеры:
Путь относительно контекста это путь, начинающийся со знака "/". Он
интерпретируется относительно приложения, к которому принадлежит JSP-страница,
то есть говорится, что её объект ServletContext
предоставляет базовый контекстный URL.
Путь относительно страницы это путь, не начинающийся со знака "/". Он
интерпретируется как относительный к текущей JSP-странице или текущему JSP-файлу,
в зависимости от того, где путь используется:
для директивы include
(Раздел
JSP.2.10.3); когда путь используется в атрибуте файла - интерпретация
относительно JSP-файла;
для акции jsp:include
(Раздел JSP.4.4), когда путь используется атрибуте
страницы - интерпретация относительно JSP-страницы.
В обоих случаях текущая страница (или файл) обозначается некоторой частью пути,
начинающейся с "/", который (путь) затем модифицируется новой спецификацией, производящей путь
с начальным "/".
Новый путь интерпретируется через объект ServletContext
. См. точную информацию
об этой интерпретации в Разделе JSP.2.10.4.
Спецификация JSP универсально интерпретирует пути в контексте web-сервера, где JSP-страница
публикуется. Спецификация проходит через отображающую трансляцию. Семантика,
обрисованная здесь, применяется к фазе времени трансляции, а не к фазе времени запроса.
В этом разделе описаны базовые синтаксические правила JSP-страниц.
JSP-страница содержит элементы и шаблонные данные.
Элемент является экземпляром типа элемента, известного JSP-контейнеру.
Шаблонные данные это то, о чём JSP-танслятор ничего не знает.
Тип элемента описывает его синтаксис и семантику. Если элемент имеет атрибуты, тип описывает имена, верные типы атрибутов и их интерпретацию. Если элемент определяет объекты, семантика включает эти определяемые объекты и их типы.
Имеются элементы трёх типов: директивы, элементы скриптинга и акции.
Директивы предоставляют глобальную информацию, которая концептуально верна, независимо от специфики запроса, полученного JSP-страницей. Директивы предоставляют информацию для фазы трансляции.
Синтаксис элемента-директивы
<%@ директива...%>
Акции предоставляют информацию для фазы обработки запроса. Интерпретация
акции может, и часто так и бывает, зависеть от специфики запроса,
полученного JSP-страницей.
Акции могут быть стандартными, то есть
определёнными этой спецификацией, или
custom/специальными, то есть предоставленными через посредство механизма
развёртывания переносимых тэгов.
Элементы action
следуют синтаксису XML-элемента: они имеют начальный тэг, включающий имя
элемента, и могут иметь атрибуты, необязательное тело/body и соответствующий
конечный тэг, или они могут быть пустыми тэгами, возможно, с атрибутами:
<mytag attr1="значение атрибута"...>body</mytag>
и
<mytag attr1="значение атрибута".../>
<mytag attr1="значение атрибута" ...></mytag>
Элемент имеет тип элемента, описывающий имя его тэга, верные атрибуты и их семантику.
Мы обращаемся к типу по имени его тэга.
JSP-тэги чувствительны к регистру, как в XML и XHTML.
Акция может создавать объекты и делать их доступными элементам скриптинга через
специфические для скриптинга переменные.
Элементы Скриптинга являются связкой между шаблонным текстом и акциями.
Есть три типа элементов скриптинга:
declarations\объявления, scriptlets\скриптлеты и expressions\выражения.
Объявления имеют синтаксис
<%! ... %>
скриптлеты
<% ... %>
выражения
<%= ... %>
Элементы, имеющие разные начальный и конечный тэги (при наличии тела), обязаны
иметь начало и конец в одном файле. Стартовый тэг не может быть в одном файле,
когда конечный тэг находится в другом файле.
То же самое правило применяется к элементам с альтернативным синтаксисом.
Например, скриптлет имеет синтаксис
<% скриптлет %>
.
Открывающий <%
и закрывающий %>
символы обязаны находиться в одном
и том же физическом файле.
Язык скриптинга может также вводить ограничения на размещение начальных и
конечных тэгов для специфических конструкций скриптинга. Например, в
Главе 6
демонстрируется, как блоки языка Java не могут разделять начальный и конечный
тэг; см. детали в Разделе JSP.6.4.
Следуя спецификации XML, элемент, описанный с использованием пустого тэга, не
отличается от элемента. использующего начальный тэг, пустое тело и конечный тэг.
Вот примеры пустых тэгов:
<x:foo></x:foo>
<x:foo />
<x:foo/>
<x:foo><%-- любой комментарий --%></x:foo>
Далее - примеры непустых тэгов:
<foo> </foo>
<foo><%= выражение %></foo>
<foo><% скриптлет %></foo>
<foo><bar/></foo>
<foo><!-- комментарий --></foo>
Следуя спецификации XML, атрибуты всегда заключаются в кавычки. Одинарные или двойные кавычки могут использоваться для уменьшения необходимости ввода кавычек мнемониками; соглашения по кавычкам описаны в Разделе JSP.2.6. Есть два типа значений атрибутов: литералы и выражения времени запроса (Раздел JSP.2.13.1), но правила применения кавычек - одинаковы.
Имена акций обязаны следовать соглашению XML (т.е. обязаны быть NMTOKEN
, как указано
в спецификации XML 1.0). Имена атрибутов обязаны следовать соглашениям, описанным в спецификации JavaBeans.
Имена атрибутов, начинающиеся с jsp,
_jsp, java или sun зарезервированы данной спецификацией.
В HTML и XML пробел обычно не является значащим, но есть исключения.
Например, файл XML может начинаться символами
<?xml
, и,
если это так, ведущих пробельных символов не должно быть.
Данная спецификация следует поведению пробелов, определённому в спецификации XML.
Пробел в теле текста документа не является значащим, но сохраняется.
Далее идут два фрагмента JSP с ассоциированным выводом.
Обратите внимание, что директивы не генерируют никаких данных и применяются глобально к
JSP-странице.
N Строки | Исходный Текст |
---|---|
1 |
<?xml version="1.0" ?>
|
2 | <%@ page buffer="8kb" %> |
3 | Здесь - остальная часть документа. |
Результат:
N Строки | Текст на Выходе |
---|---|
1 |
<?xml version="1.0" ?>
|
2 | |
3 | Здесь - остальная часть документа. |
Следующие две таблицы - другой пример ввода и вывода:
N Строки | Исходный Текст |
---|---|
1 |
<% response.setContentType("....");
|
2 | что-нибудь... %><?xml version="1.0" ?>
|
3 |
<%@ page buffer="8kb" %>
|
4 | Здесь - остальная часть документа. |
Результат:
N Строки | Текст на Выходе |
---|---|
1 |
<?xml version="1.0" ?>
|
2 | |
4 | Здесь - остальная часть документа. |
Ошибки могут появляться на этапах трансляции или запроса. В этом разделе описывается, как ошибки обрабатываются соответствующей реализацией.
Трансляция JSP-страницы-источника в соответствующий класс реализации JSP-страницы JSP-контейнером
может производиться в любой момент между начальной публикацией JSP-страницы в JSP-контейнер
и получением и обработкой запроса клиентом целевой JSP-страницы.
Если трансляция возникает до получения клиентского запроса целевой JSP-страницы,
обработка ошибок и уведомление зависят от реализации и не рассматриваются в
данной спецификации. Фатальные ошибки трансляции должны в результате приводить к
невозможности выполнения последующих клиентских запросов на трансляцию целевой
страницы с соответствующей спецификацией ошибки:
для протоколов HTTP будет возвращаться код ошибки 500 (Server Error/Ошибка Сервера).
В процессе обработки запросов клиентов ошибки могут возникать в теле класса
реализации JSP-страницы или в каком-либо другом коде (языка Java или других
языков программирования реализации), вызываемом из тела класса реализации JSP-страницы.
Возникающие ошибки этапа прогона обрабатываются в реализации страницы, используя
механизм исключений языка программирования Java для сообщения вызывающему(-им) о
нарушениях.
Обратите внимание, что это не зависит от языка программирования. Данная
спецификация требует, чтобы о необработанных ошибках, возникающих в среде языка
скриптинга, используемого реализацией JSP-контейнера, сообщалось классу
реализации JSP-страницы через механизм исключений языка
Java.
Эти исключения могут отлавливаться и обрабатываться (как необходимо) в теле класса реализации JSP-страницы.
Любые неотловленные исключения, вызываемые в теле класса реализации JSP-страницы,
приводят к перенаправлению клиентского запроса и неотловленного исключения по URL
errorPage
, специфицированному этой JSP-страницей (или выполнением действий по
умолчанию, если ничего не специфицировано).
Нарушающее java.lang.Throwable
, описывающее появляющуюся ошибку, хранится в экземпляре
javax.ServletRequest
клиентского запроса, использующего метод
setAttribute()
, использующего имя "javax.servlet.jsp.jspException"
.
Имена, начинающиеся с префиксов "java"
и "javax"
, зарезервированы различными
спецификациями платформы Java. Префикс "javax.servlet"
зарезервирован и используется спецификациями Servlet и JSP.
Если атрибут errorPage
директивы страницы именует URL, который ссылается на другую JSP и та JSP
сигнализирует, что на странице имеется ошибка (установкой атрибута
isErrorPage
директивы страницы в true
), тогда неявная переменная языка программирования
"exception" этой страницы инициализируется ссылкой Throwable
-нарушителя.
В JSP-странице есть два типа комментариев:
комментарии к самой JSP-странице, документирующие действия страницы, и
комментарии, предназначенные для вывода в генерируемом документе, направляемом клиенту.
Для генерации комментариев, появляющихся в потоке вывода response
к
запрашивающему клиенту, используется следующий синтаксис комментариев HTML и XML:
<!-- комментарии
... -->
Такие комментарии рассматриваются JSP-контейнером как неизменяемый шаблонный
текст. Если генерируемый комментарий должен содержать динамические данные, это
может быть сделано посредством такого синтаксиса:
<!-- комментарии
<%= выражение %> ещё комментарии ... -->
JSP-комментарий имеет форму:
<%-- что-либо, кроме закрывающих символов --%> ... --%>
Содержимое тела комментария полностью игнорируется. Комментарии используются для
документирования, а также для
"закомментирования" некоторой части JSP-страницы.
Обратите внимание, что JSP-комментарии не вкладываются.
Альтернативным способом размещения "комментария" на JSP-странице является
использование механизма комментария языка скриптинга. Например:
<% /** это комментарий ... **/ %>
В JSP-страницах применяются следующие соглашения по кавычкам:
Литерал %>
закавычивается %\>
Литерал <%
закавычивается <\%
Закавычивание выполняется независимо от того, является значение атрибута
литералом или выражением атрибута этапа запроса. Закавычивание может
использоваться в значениях атрибутов независимо от того, ограничены они
одинарными или двойными кавычками. Это выполняется только так, как описано ниже:
\'
. Это необходимо делать внутри значения атрибута,
ограниченного одинарными кавычками.\"
. Это необходимо делать внутри значения атрибута,
ограниченного двойными кавычками.\\
%>
записывается %\>
<%
записывается <\%
В следующей строке показаны неправильные значения атрибутов:
<mytags:tag value="<%= "hi!" %>"
/>
В следующей строке дан верный скриптлет, но с, возможно, неожиданным результатом. Результат будет "Joe said %\>", а не "Joe said %>":
<%= "Joe said %\\>" %>
В следующих строках - правильное закавычивание:
<%= "Joe said %/>" %>
<%= "Joe said %\>" %>
<% String joes_statement = "hi!";
%>
<%= "Joe said \"" + joes_statement
+ "\"." %>
<x:tag value='<%="Joe said \\"" +
joes_statement + "\\"."%>'/>
<x:tag value='<%= "hi!" %>' />
<x:tag value="<%= \"hi!\" %>" />
<x:tag value='<%= \"name\" %>' />
<x:tag value="<%= \"Joe said
'hello'\" %>"/>
<x:tag value="<%= \"Joe said
\\\"hello\\\" \" %>"/>
<x:tag value="end expression
%\>"/>
<% String s="abc"; %>
<x:tag value="<%= s + \"def\" + \"jkl\"
+ 'm' + \'n\' %>" />
<x:tag value='<%= s + \"def\" + "jkl"
+ \'m\' + \'n\' %>' />
Соглашения по кавычкам отличаются от соглашений XML. См. Главу JSP.5.
Класс реализации JSP-страницыопределяет отображение метода _jspService()
из объекта request в объект response. Некоторые детали этой
трансформации специфичны для используемого языка скриптинга (см.
Главу JSP.6).
Некоторые детали не зависят от языка и описаны в данной главе.
Содержимое JSP-страницы большей частью описывает данные, которые записываются в
поток вывода ответа. (JSP-контейнер обычно посылает эти данные обратно клиенту.)
Это описание базируется на объекте JspWriter
, который выводится через неявный объект
out (см. Раздел JSP.2.8.3, "Неявные Объекты).
Его значение варьируется:
JspWriter
. Этот объект может отличаться
от объекта stream, возвращаемого от response.getWriter()
, и может рассматриваться
как вставляемый позднее в последнем, чтобы
реализовать буферизацию (см. Раздел JSP.2.10.1, "Директива page
").
Это - начальный объект out. Авторам JSP-страниц запрещено записывать
непосредственно в
PrintWriter
или OutputStream
, ассоциированные с
ServletResponse
.response.getWriter()
до тех пор, пока первая часть содержимого не будет
переслана клиенту. Здесь поднимаются вопросы использования JSP, включая использование JSP
как языка для 'склейки' акций, дающих бинарный контекст, или надёжного
перенаправления сервлету, или динамического изменения типа содержимого ответа
до генерации содержимого. См. Главу JSP.3.JspWriter
. То, какой это случай, зависит от деталей семантики акции. Обычно
содержимое этих временных потоков присоединяется к потоку, на который out
ссылался перед этим, и out последовательно переназначается для того,
чтобы ссылаться на предыдущий (внешний) поток. Такие вложенные потоки всегда
буферизуются и требуют явной очистки/flushing, чтобы выгрузить вкладывающие потоки и их содержимое.JspWriter
буферизуется, тогда, в зависимости от значения атрибута
autoFlush
директивы page
, содержимое этого буфера будет либо автоматически очищаться перед потоком
вывода ServletResponse
, чтобы избежать переполнения, либо должно вызываться
исключение, чтобы сигнализировать о переполнении буфера. Если начальный out-объект
JspWriter
не буферизуется, тогда содержимое, записанное в него, будет передано прямо в поток вывода
ServletResponse
.JSP-страница может создавать и модифицировать серверные объекты/server-side и
получать к ним доступ.
Объекты могут быть сделаны видимыми для акций и элементов
скриптинга. Объект имеет scope\область видимости, которая описывает,
какие экземпляры могут получать доступ к объекту.
Акции могут получать доступ к объекту, используя имя в объекте
PageContext
. Объект, видимый через переменную
скриптинга, имеет область видимости в пределах страницы.
Элементы скриптинга могут получать доступ к объектам непосредственно через
переменную скриптинга.
Некоторые неявные объекты видны через переменные скриптинга на любой
JSP-странице.
Объект может быть сделан доступным для кода в элементах скриптинга через переменную языка скриптинга.
Элемент может определять переменные скриптинга,
которые будут содержать, в процессе времени запроса, ссылку на объект, определённый этим элементом,
хотя могут существовать и другие ссылки, в зависимости от области видимости объекта.
Тип элемента указывает имя и тип таких переменных, хотя в деталях имя переменной
может зависеть от Языка Скриптинга.
Язык скриптинга может также влиять на то, как происходит доступ к различным
свойствам объекта. Например, в спецификации
JavaBeans доступ к свойствам осуществляется через методы
getter
и setter, в то время как эти свойства доступны напрямую как переменные в
языке JavaScript≥.
Точные правила видимости переменных зависят от языка скриптинга. В
Главе JSP.2.1
определены правила для случая, когда атрибут
language
директивы page
установлен в "java"
.
JSP-страница может создавать и/или получать доступ к Java-объектам при обработке
запроса. Спецификация JSP указывает, что некоторые объекты создаются неявно,
возможно, как результат директивы
(см. Раздел JSP.2.8.3, "Неявные Объекты"). Другие объекты создаются явно через
акции или непосредственно путём использования кода скрипта. Созданные объекты
имеют атрибут scope, определяющий, где находится ссылка на объект и когда
эта ссылка удаляется.
Созданные объекты могут также непосредственно видимы элементам скриптинга через
переменные уровня скриптинга (см. Раздел JSP.2.8.3, "Неявные Объекты").
Каждая акция и объявление определяют, как часть своей семантики, какой объект
они создают, с каким атрибутом scope
и доступны ли они элементам скриптинга.
Объекты создаются внутри экземпляра JSP-страницы, которая отвечает объекту request.
Имеется несколько областей видимости:
pageContext
.request
.session
из страницы, которая не находится в данной сессии (см.
Раздел
JSP.2.10.1, "Директива page"). Все ссылки на такой объект должны быть
разорваны после того, как ассоциированная сессия закончилась. Ссылки на
объекты с областью видимости session хранятся в объекте session
,
ассоциированном с активацией страницы.application
, ассоциированном с активацией страницы. Объект application
является
контекстом сервлета, получаемым из объекта конфигурации сервлета. Все ссылки
на этот объект должны быть разорваны, когда рабочая среда/runtime environment запрашивает ServletContext
.Имя/name должно ссылаться на уникальный объект из всех точек в ходе выполнения, то есть все области видимости должны в действительности вести себя как единое пространство имён. Реализация JSP-контейнера может или может не форсировать это правило явно по соображениям производительности.
Авторы JSP-страниц имеют доступ к определённым неявным (неявно создаваемым) объектам,
которые всегда доступны для использования в скриптлетах и выражениях через
переменные скриптинга, которые объявляются неявно в начале страницы. Все языки
скриптинга должны предоставлять доступ к этим объектам.
Неявные объекты доступны обработчикам тэгов через объект pageContext
(см. ниже).
Каждый неявный объект имеет тип класса или интерфейса, определённый в основной
технологии Java или в пакете Java Servlet API, как
показано в Таблице JSP. 2-1.
Имя Переменной | Тип | Семантика & Области Видимости |
---|---|---|
request
|
подтип, зависящий от протокола: javax.servlet.ServletRequest ,например: javax.servlet.http.HttpServletRequest
|
Запрос, включающий вызов сервиса/службы. Область видимости: request. |
response
|
подтип, зависящий от протокола: javax.servlet.ServletResponse ,например: javax.servlet.http.HttpServletResponse
|
Ответ на запрос. Область видимости: page. |
pageContext
|
javax.servlet.jsp.PageContext
|
Контекст страницы для данной JSP-страницы. Область видимости: page. |
session
|
javax.servlet.http.HttpSession
|
Объект session , созданный для запрашивающего клиента (если клиент имеется).Эта переменная верна только для протоколов Http. Область видимости: session . |
application
|
javax.servlet.ServletContext
|
Контекст сервлета, полученный из объекта конфигурации сервлета
(как при вызовеgetServletConfig().getContext() )Область видимости: application . |
out | javax.servlet.jsp.JspWriter | Объект, записывающий в поток вывода. Область видимости: page . |
config
|
javax.servlet.ServletConfig
|
ServletConfig для данной JSP-страницы.Область видимости: page . |
page
|
java.lang.Object
|
Экземпляр класса реализации данной страницы,
обрабатывающий текущий запрос. Область видимости: page . |
a. Если язык скриптинга - "java", тогда "page" является синонимом для "this" в
теле/body страницы.
Кроме того, может быть получен доступ к неявному объекту
exception
на странице ошибок, как указано в
Таблице JSP.2-2.
pageContext
PageContext
это объект, предоставляющий контекст для хранения ссылок на объекты,
используемые страницей. Он инкапсулирует зависящие от реализации свойства и
предоставляет нужные методы. Класс реализации JSP-страницы может использовать
PageContext для прогона в неизменённом виде в любом подходящем JSP-контейнере,
одновременно используя преимущества специфичных для реализации улучшений типа
высокопроизводительного JspWriters
.
См. детали в Главе JSP.9.
Имя Переменной | Тип | Семантика & Область Видимости |
---|---|---|
|
java.lang.Throwable
|
Неотловленный Throwable ,
приводящий к вызову страницы информации об ошибках.Область видимости: page . |
Имена объектов с префиксами jsp, _jsp, jspx и _jspx, в любой комбинации нижнего и верхнего регистров, зарезервированы данной спецификацией JSP. См. в Разделе JSP.7.6.1 некоторые ненормативные соглашения для введения новых неявных объектов.
Семантика шаблонного (или неинтерпретированного) Текста очень проста:
шаблонный текст передаётся текущему out\выводящему неявному объекту
JspWriter
после применения замен Раздела JSP.2.6,
"Соглашения по Кавычкам и Escape-Последовательностям".
Директивы являются сообщениями JSP-контейнеру.
Синтаксис директивы:
<%@ директива {
атрибут="значение" }* %>
Могут иметься необязательные пробелы после "<%@" и перед "%>".
Это синтаксис легко вводится и понятен, но он несовместим с XML.
В Главе JSP.5 описано отображение директив в элементы XML.
Директивы не производят никакого вывода в текущий поток out.
Есть три директивы:
page
и taglib
описаны здесь, а директива include
- в следующей главе.
page
Директива page
определяет количество свойств страницы и сообщает о них JSP-контейнеру.
Трансляционный модуль (JSP файл-источник и любые файлы, включённые директивой
include
) может содержать более одного экземпляра директивы page
, все атрибуты
будут применяться ко всему трансляционному модулю (т.е. директивы page
не
зависят от позиции). Однако должно быть только одно вхождение любого
атрибута/значения, определённого этой директивой, в данном трансляционном
модуле, исключая атрибут
"import"; многократные использования этого атрибута накапливаются
(с семантикой объединения упорядоченного набора/ordered set union).
Другие такие множественные (пере)определения атрибута/значения приводят к
фатальной ошибке трансляции.
Пространство имён attribute/value зарезервировано для использования данной и
последующими спецификациями JSP.
Нераспознаваемые атрибуты или значения приводят к фатальным ошибкам трансляции.
Следующая директива предоставляет некоторую видимую пользователем информацию на
данной JSP-странице:
<%@ page
info="my latest JSP Example" %>
Следующая директива запрашивает отсутствие буферизации, указывает, что страница
является "безопасным потоком"/thread
safe и предоставляет страницу для сообщений об ошибке:
<%@ page
buffer="none" isThreadSafe="yes" errorPage="/oops.jsp" %>
Следующая директива указывает, что язык скриптинга базируется на Java,
что типы, объявленные в пакете com.myco, непосредственно доступны коду
скриптинга и что должна использоваться буферизация в 16KB:
<%@ page
language="java" import="com.myco.*" buffer="16kb" %>
<%@ page
список_атрибутов_директивы_page %>
список_атрибутов_директивы_page ::= { language="scriptingLanguage\языкСкриптинга"}
{ extends="className"}
{ import="importList"}
{ session="true|false" }
{ buffer="none|sizekb" }
{ autoFlush="true|false" }
{ isThreadSafe="true|false" }
{ info="info_text" }
{ errorPage="error_url" }
{ isErrorPage="true|false" }
{ contentType="ctinfo" }
{ pageEncoding="peinfo"
Далее дана детальная информация об атрибутах:
Атрибут | Описание |
---|---|
language
|
Определяет язык скриптинга, используемый в скриптлетах,
скриптлетах выражений и объявлениях внутри тела трансляционного модуля (JSP-страница
любые файлы, включённые с использованием последующей директивы
include ).
В JSP 1.2 единственным определённым и необходимым для данного атрибута
значением языка скриптинга является "java".
Данная спецификация описывает семантику только для скриптов со значением атрибута языка "java".
Если "java" является значением языка скриптинга, фрагменты исходного кода Java
Programming Language, используемые внутри данного трансляционного модуля, должны
соответствовать спецификации Java
Programming Language Specification так, как описано в Главе JSP.6.Все языки скриптинга обязаны предоставлять неявные объекты, которые автор JSP-страниц может использовать в объявлениях, скриптлетах и выражениях. Специфические объекты, которые могут использоваться, определены в Разделе JSP.2.8.3, "Неявные Объекты." Все языки скриптинга обязаны поддерживать Java Runtime Environment (JRE)/Среду Java. Все языки скриптинга обязаны представлять объектную модель технологии Java окружению скрипта, особенно неявные переменные, свойства компонентов JavaBeans и публичные методы. Будущие версии спецификации JSP могут определять дополнительные значения атрибута language , и все такие
значения резервируются.Для директивы с атрибутом language не-"java"
будет фатальной ошибкой появление после первого вычисленного элемента скриптинга. |
extends
|
Значением является полное квалифицированное имя класса языка программирования Java, которое именует суперкласс класса, к которому JSP-страница трансформируется (см. Главу JSP.8). Этот атрибут не должен использоваться без тщательного учёта ограничения им способности JSP-контейнера предоставлять специализированные суперклассы, которые могут улучшить качество службы представления. См. в Разделе JSP.7.6.1 альтернативный способ ввода объектов на JSP-страницу, не имеющий такого недостатка. |
import
|
Атрибут import описывает типы, которые доступны среде
скриптинга. Значение - такое же, как для объявления import в языке
программирования Java, т.е. список (разделённых запятыми) полных
квалифицированных имён типов языка программирования Java, обозначающих этот
тип, или имя пакета с последующей строкой ".*", обозначающей все публичные
типы, объявленные в этом пакете. Список import должен будет импортироваться
транслируемой реализацией транслируемой JSP-страницы и будет, таким образом,
доступен среде скриптинга.По умолчанию список импорта - java.lang.*, javax.servlet.*, javax.servlet.jsp.*
и javax.servlet.http.* . В настоящее время это значение определено только
тогда, когда значением директивы language является "java". |
session
|
Означает, что данная страница требует участия в (http) сессии.
Если "true", тогда неявная переменная языка скрипта с названием "session" типа
javax.servlet.http.HttpSession ссылается на текущую/новую сессию для этой страницы.
Если "false" - тогда эта страница не участвует в сессии; неявная переменная "session"
недоступна, и любая ссылка на неё в теле JSP-страницы является недопустимой и приводит к фатальной ошибке трансляции.
По умолчанию "true". |
buffer
|
Специфицирует модель буферизации для начального "out"
JspWriter для обработки содержимого вывода с этой страницы.
Если "none", тогда буферизации нет и весь вывод записывается непосредственно в
ServletResponse PrintWriter .
Размер может специфицироваться только в килобайтах, и суффикс
"kb" является мандатным (обязательным).
Если размер буфера специфицирован, тогда вывод буферизуется с размером
буфера не меньше специфицированного. В зависимости от значения атрибута
"autoFlush", содержимое этого буфера автоматически очищается, или возникает
исключение при появлении переполнения.
По умолчанию буферизуется с размером буфера реализации не менее 8kb. |
autoFlush
|
Специфицирует, должен ли буферизованный вывод очищаться
автоматически (значение "true"), когда буфер заполнен, или должно вызываться
исключение/exception (значение "false"), означающее переполнение буфера. По умолчанию "true". Примечание: не допускается установка autoFlush в
"false", если "buffer=none". |
isThreadSafe
|
Обозначает уровень потока, безопасно выполняемого на странице.
Если "false"
- тогда JSP-контейнер должен выполнять диспетчеризацию множественных внешних
запросов клиентов, по одному за раз в порядке их поступления, реализации страницы для процессинга.
Если "true", тогда JSP-контейнер может избрать одновременное направление странице
множественных внешних запросов клиентов. Авторы страниц, использующие
"true", должны быть уверены, что осуществляется соответствующая синхронизация доступа к странице. По умолчанию "true". Заметьте, что, даже если атрибут isThreadSafe имеет значение "false", автор JSP-страницы должен иметь уверенность, что доступы к любым объектам раздельного использования/shared соответствующим образом синхронизированы. Объекты могут использоваться раздельно в ServletContext или в HttpSession . |
info
|
Определяет произвольную строку, которая внедряется в
транслируемую страницу, которая затем может быть получена из реализации страницы методом
Servlet.getServletInfo() . |
isErrorPage
|
Указывает, предназначена ли текущая JSP-страница служить целевым URL
для другой JSP-страницы как errorPage .
Если "true", тогда неявная переменная языка скриптинга "exception"
определяется и её значением является ссылка на нарушающий Throwable из
исходной JSP-страницы, в случае ошибки.Если "false" - неявная переменная "exception" недоступна, и любая ссылка на неё в теле JSP-страницы является недопустимой и приведёт к фатальной ошибке трансляции. По умолчанию "false". |
errorPage
|
Определяет URL ресурса, которому любой объект(ы)
Throwable языка программирования Java, вызываемый, но не отлавливаемый
реализацией страницы, направляется для обработки ошибки.
Спецификация предоставляемого URL выполняется так, как указано в
Разделе JSP.2.2.1.
Если URL именует другую JSP-страницу, тогда неявная переменная скрипта вызываемого исключения этой
JSP-страницы содержит ссылку на начальный неотловленый Throwable .
URL по умолчанию зависит от реализации. Обратите внимание, что объект Throwable передаётся реализацией страницы, вызывающей исключение/throwing,
реализации страницы ошибки, сохраняя ссылку на объект в обычном объекте ServletRequest путём использования метода
setAttribute() , с именем "javax.servlet.jsp.jspException" .Примечание: если autoFlush=true , то, если содержимое начального
Jsp-Writer было очищено для потока вывода
ServletResponse , любая последующая попытка диспетчеризации неотловленного
исключения из страницы-нарушителя странице errorPage может потерпеть неудачу.
Если страница обработки ошибок указана также в дескрипторе web.xml, то
сначала применяется JSP-страница обработки ошибок, а затем страница web.xml. |
contentType
|
Определяет кодировку символов для JSP-страницы и для JSP-страницы - ответа и тип
MIME для JSP-страницы - ответа.
Значения могут иметь форму
"TYPE" или "TYPE;
charset=CHARSET" с необязательным пробелом после ";". |
pageEncoding
|
Определяет кодировку символов для JSP-страницы.
Значения имеют форму "CHARSET", который обязан быть IANA-значением для кодировки символов.
Значение contentType для CHARSET используется по умолчанию, если
имеется, в противном случае - ISO-8859-1.
См. в Главе 3 детальную информацию о кодировках символов. |
taglib
Набор значащих тэгов, интерпретируемых JSP-контейнером, может быть расширен
"tag library/библиотекой тэгов".
Директива taglib
на JSP-странице объявляет, что данная страница использует библиотеку
тэгов,
уникально идентифицирует библиотеку тэгов, используя URI, и ассоциирует префикс
тэгов, который служит для отличения использования акций в этой библиотеке.
Если реализация JSP-контейнера не может локализовать описание библиотеки тэгов,
должна возникать фатальная ошибка трансляции.
Фатальная ошибка трансляции возникнет также, если директива taglib
появится
после акций, использующих данный префикс.
Библиотека тэгов может включать метод проверки корректности использования JSP-страницей
функциональности библиотеки тэгов.
См. более конкретные детали в Главе JSP.7. Также см. замечания по реализации в
Разделе JSP.7.2.3.
В следующем примере библиотека тэгов вводится и становится доступной данной
странице путём использования префикса super
; никакие
другие библиотеки тэгов не должны вводиться на данной странице, используя этот
префикс. В данном конкретном случае мы принимаем, что библиотека тэгов включает
тип элемента doMagic
, который используется на странице.
<%@ taglib
uri="http://www.mycorp/supertags" prefix="super" />
...
<super:doMagic>
...
</super:doMagic>
<%@ taglib uri="tagLibraryURI"
prefix="tagPrefix" %>
где атрибуты:
uri
|
Спецификация абсолютного или относительного URI, который
уникально идентифицирует дескриптор библиотеки тэгов, ассоциированной с данным префиксом. URI используется для локализации описания библиотеки тэгов, как указано в Главе 7. |
tagPrefix
|
Определяет строку prefix в конструкции
<prefix>:<tagname> , которая используется для отличения специальной
акции, например, <myPrefix:myTag> .Использование префиксов, начинающихся с jsp:, jspx:, java:, javax:, servlet:, sun: и sunw:, зарезервировано. Префикс обязан следовать соглашению об именовании, специфицированному в спецификации пространств имён XML. Пустые префиксы в данной версии спецификации не допускаются. |
Фатальная ошибка трансляции возникнет, если транслятор JSP-страницы обнаруживает
тэг с именем prefix: Name,
использующий префикс, введённый директивой taglib
,
и если Name не распознаётся соответствующей библиотекой тэгов.
include
Директива
include
используется для подстановки текста и/или кода в JSP-страницу на этапе
трансляции.
Директива <%@ include
file="спецификация относительного URL" %>
вставляет текст специфицированного ресурса в
.jsp-файл. Включённый файл является субъектом контроля доступа, доступного JSP-контейнеру.
Атрибут file
рассматривается в Разделе JSP.2.2.1.
JSP-контейнер может включать механизм уведомления в случае изменения включённого
файла, чтобы контейнер мог перекомпилировать эту JSP-страницу, однако
спецификация JSP 1.2 не содержит способа указания JSP-контейнеру, что включённые файлы должны
изменяться.
В следующем примере запрашивается включение на этапе трансляции файла авторских прав/copyright.
Этот файл может содержать элементы, которые также будут обрабатываться:
<%@
include
file="copyright.html" %>
<%@
include
file="спецификация относительного URL" %>
Включение данных является важной частью задач JSP-страницы. Соответственно, спецификация JSP 1.2 имеет два механизма включения для различных задач. Обобщение их семантики дано в Таблице JSP.2-1.
include
в спецификации JSP 1.2Синтаксис | Спецификация | Объект | Описание | |
---|---|---|---|---|
Директива include - Время Трансляции |
||||
<%@ include file=... %> |
относительно файла | статический/static | Содержимое разбирается/parsed JSP-контейнером. | JSP.2.10.3 |
Акция include - Время Запроса |
||||
<jsp:include page= />
|
относительно страницы | статический и динамический | Содержимое не разбирается; оно вставляется в этом месте. | JSP.4.4 |
Колонка Спецификация описывает, какой тип спецификации является верным
для данного элемента. Данная спецификация JSP
требует специфицировать относительный URL. Ссылка разрешается сервером web/приложений,
и выполняется отображение её URL. Директивы include
интерпретируются относительно текущего JSP-файла; акции jsp:include
интерпретируются относительно текущей JSP-страницы.
Директива include
относится к ресурсу вроде JSP-страницы как к статичному/static
объекту; т.е.
байты в JSP-странице включаются. Акция include
относится к ресурсу вроде JSP-страницы
как к динамическому/dynamic объекту; т.е.
запрос направляется этому объекту, и результат процессинга включается .
Элементы скриптинга обычно используются
для манипулирования объектами и для выполнения вычислений, влияющих на генерируемое содержимое.
Есть три класса элементов скриптинга: declarations\объявления, scriptlets\скриптлеты
и expressions\выражения.
Язык скриптинга, используемый на данной странице, задаётся значением директивы
language
(см. Раздел JSP.2.10.1, "Директива page"). В JSP 1.2 единственным
определённым значением является "java".
Объявления используются для объявления конструкций языка скриптинга, которые доступны всем
другим элементам скриптинга.
Скриптлеты используются для описания акций, выполняемых в ответ на
некоторый запрос. Скриптлеты являются фрагментами программы, которые также могут
использоваться для выполнения действий типа итераций и условного выполнения
других элементов на JSP-странице.
Выражения являются сложными выражениями на языке скриптинга, которые
вычисляются на этапе ответа; обычно результат конвертируется в строку и
вставляется в поток вывода.
Все JSP-контейнеры обязаны поддерживать элементы скриптинга, базирующиеся на
языке программирования Java. Кроме того,
JSP-контейнеры обязаны поддерживать другие языки скриптинга.
Все такие языки скриптинга обязаны поддерживать:
Точное определение семантики скриптинга, выполняемого с использованием элементов
на базе языка Java, дано в Главе JSP.6.
Семантика других языков скриптинга не определена точно в данной версии
спецификации, что означает, что переносимость в разных реализациях не
гарантируется. Точные определения могут быть даны для других языков в будущем.
Каждый элемент скриптинга имеет следующий синтаксис на базе "<%":
<%! это объявление %>
<% это скриптлет %>
<%= это выражение %>
Могут иметься необязательные пробелы после "<%!", "<%" и "<%=" и до "%>".
Эквивалентные данным элементам скриптинга элементы XML описаны в
Разделе JSP.5.2.
Объявления используются для объявления переменных и методов на языке скриптинга,
используемого на данной JSP-странице. Объявление должно быть декларативным
оператором или последовательность операторов, соответствующей синтаксису
специфицированного языка скриптинга.
Объявления не производят никакого вывода в текущий поток вывода.
Объявления инициализируются в момент инициализации JSP-страницы и становятся
доступными другим объявлениям, скриптлетам и выражениям.
Например, первое объявление здесь объявляет целое число, глобальное в пределах страницы.
Второе объявление делает то же самое и инициализирует число в нуль. Этот тип
инициализации должен выполняться осторожно при наличии нескольких запросов к
странице.
В третьем случае объявляется метод, глобальный в пределах страницы.
<%! int i; %>
<%! int i = 0;
%>
<%! public String f(int i) { if (i<3) return("..."); ... } %>
<%!
объявление(-я) %>
Скриптлеты могут содержать любые фрагменты кода, которые являются верными для
языка скриптинга, специфицированного директивой
language
. Является ли фрагмент кода действующим, зависит от деталей языка
скриптинга (см. Главу JSP.6).
Скриптлеты выполняются во время обработки запроса. Производят они вывод в поток
вывода или нет, зависит от кода скриптлета.
Скриптлеты могут иметь побочные эффекты,
модифицируя объекты, видимые для них.
Когда все фрагменты скриптлетов в данном трансляционном модуле комбинируются для появления на JSP-странице,
они обязаны давать в результате верный оператор или последовательность
операторов на специфицированном языке скриптинга.
Чтобы использовать последовательность символов
%> как литеральные символы в скриптлете, вместо того , чтобы они оканчивали
скриптлет, вводите их так %\>.
Вот простой пример динамического изменения страницы, в зависимости от времени суток.
<% if
(Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {%>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
Скриптлет может также содержать объявление локальных переменных, например, следующий скриптлет просто объявляет и инициализирует целое число и затем отображает это число и увеличивает его.
<% int i; i= 0;
%>
Привет, значение
i равно <% i++ %>
<% скриптлет %>
Элемент expression
в JSP-странице является выражением языка скриптинга, которое
вычисляется, а результат приводится к String
.
Результат затем посылается в текущий объект вывода JspWriter
.
Если результат выражения не может быть приведён к String
, обязаны выполняться следующие действия:
Если проблема обнаружена на этапе трансляции, должна возникать ошибка времени трансляции.
Если приведение не обнаруживается в процессе трансляции, должно вызываться исключение
ClassCastException
/ОшибкаПриведенияКласса во время запроса.
Язык скриптинга может поддерживать побочные эффекты в выражениях, когда выражение вычисляется.
Выражения вычисляются слева направо на JSP-странице. Если выражения появляется в
более чем одном атрибуте времени выполнения, они должны вычисляться слева
направо в тэге. Выражение может изменять значение объекта out
, хотя это не всегда легко выполнимо.
Выражение обязано быть полным выражением языка скриптинга, на котором оно написано.
Выражения вычисляются во время HTTP-процессинга.
Значение выражения конвертируется к String и вставляется в соответствующую позицию в .jsp-файл.
Вставляется текущая дата:
<%= (new
java.util.Date()).toLocaleString() %>
<%= выражение
%>
Акции могут воздействовать на текущий поток вывода и использовать,
модифицировать и/или создавать объекты.
Акции могут зависеть от деталей конкретного объекта request/запроса, получаемого JSP-страницей.
Данная спецификация JSP содержит некоторые акции, которые являются
стандартными и обязаны реализовываться всеми соответствующими JSP-контейнерами;
эти акции описываются в Главе 4.
Новые акции определяются в соответствии с механизмами, описанными в Главах 7
и 10, и вводятся с использованием директивы taglib
.
Синтаксис элементов акций базируется на XML. Акции могут быть пустыми и непустыми.
Интерпретация всех акций начинается с вычисления значений, данных их атрибутам,
слева направо и присвоения этих значений атрибутам. В этом процессе могут
производиться конверсии; правила конверсии описаны в Разделе JSP.2.13.2.
Многие значения являются фиксированными 'значениями времени трансляции', но JSP 1.2
предоставляет также механизм описания этих значений, когда они вычисляются на
этапе запроса, правила описаны в Разделе JSP.2.13.1.
Значение атрибута в форме
"<%= scriptlet_expr %>"
или '<%= scriptlet_expr %>'
обозначает значение атрибута времени запроса.
Указываемое значение является значением включаемого скриптлета. Значения
атрибутов времени запроса могут использоваться только в акциях и не могут
использоваться в директивах. Если в тэге имеется более одного такого атрибута,
выражения вычисляются слева направо.
Закавычивание выполняется так же, как и в других значениях атрибута (Раздел JSP.2.6).
Таким способом могут обозначаться только значения атрибута (имя атрибута всегда
является явно определённым именем).
Выражение обязано появляться само по себе (множественные выражений и смешивание
выражений и строковых констант не допускаются).
Множественные операции обязаны выполняться внутри выражения.
Конверсия типов описана в Разделе JSP.2.13.2.
По умолчанию все атрибуты имеют семантику времени трансляции страницы. Попытка
специфицировать выражение скриптлета как значение атрибута, который (по
умолчанию или нет) имеет семантику времени трансляции, является недопустимой и
приводит к фатальной ошибке трансляции.
Тип элемента action
указывает, будет ли данный атрибут принимать значения атрибута времени запроса.
Большинство атрибутов стандартных акций из Главы 4 имеют семантику времени
трансляции страницы, но следующие атрибуты принимают выражения атрибутов времени
запроса:
jsp:setProperty
(Раздел JSP.4.2).beanName
в jsp:useBean
(Раздел JSP.4.1).page
в jsp:include
(Раздел JSP.4.4).page
в jsp:forward
(Раздел JSP.4.5).jsp:param
(Раздел JSP.4.6).height
и width
в jsp:plugin
(Раздел JSP.4.7).Мы описываем два случая конверсии типов:
String
Значение строки может использоваться для описания значения типа не-String через
конверсию. Возможна ли конверсия и, если да, какая она, зависит от типа назначения.
Значения String
могут использоваться для присвоения значений типу, который имеет класс
PropertyEditor
, как указано в спецификации JavaBeans. Если это именно тот случай,
используется метод setAs-Text(String)
.
Конверсия терпит неудачу, если метод вызывает исключение
IllegalArgumentException
.
Значения String
могут также использоваться для присвоения типов, как указано в Таблице JSP.2-2.
Применяется так конверсия, которая указана в таблице.
Неудача конверсии ведёт к ошибке времени трансляции или времени запроса.
Тип Назначения | Исходное Строковое Значение |
---|---|
Свойство Bean
|
Использовать setAsText(string-literal)
|
boolean или Boolean
|
Как указано в java.lang.Boolean.valueOf(String)
|
byte или Byte
|
Как указано в java.lang.Byte.valueOf(String)
|
char или Character
|
Как указано в String.charAt(0)
|
double или Double
|
Как указано в java.lang.Double.valueOf(String)
|
int или Integer
|
Как указано в java.lang.Integer.valueOf(String)
|
float или Float
|
Как указано в java.lang.Float.valueOf(String)
|
long или Long
|
Как указано в java.lang.Long.valueOf(String)
|
short или Short
|
Как указано в java.lang.Short.valueOf(String)
|
Object
|
Как если бы new String(string-literal)
|
Эти конверсии являются частью общего механизма, используемого для присвоения
значений атрибутам акций: когда значение атрибута, который не является атрибутом
времени запроса, присваивается данному атрибуту, используется описанная здесь конверсия,
использующая тип атрибута как целевой тип. Тип каждого атрибута стандартных
акций описан в данной спецификации, а типы атрибутов специальных/custom акций
описаны в ассоциированном с ними Дескрипторе Библиотеки Тэгов/Tag Library Descriptor.
Конкретная акция может также определять дополнительные способы использования
конверсии типа/значения.
В Разделе
JSP.4.2 описан механизм, используемый для стандартной акции setProperty
.
Выражения времени запроса могут назначаться свойству любого типа.
Автоматическая конверсия не выполняется.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |