Компонент JavaBean
Компоненты JavaBean – это многократно используемые классы Java, позволяющие разработчикам существенно ускорять процесс разработкии WEB-приложений путем их сборки из программных компонентов. JavaBeans и другие компонентные технологии привели к появлению нового типа программирования – сборки приложений из компонентов, при котором разработчик должен знать только сервисы компонентов; детали реализации компонентов не играют никакой роли.
JavaBean – это одноуровневые объекты, использующиеся для того, чтобы инкапсулировать в одном объекте код, данные или и то и другое. Компонент JavaBean может иметь свойства, методы и события, открытые для удаленного доступа.
Методы getters setters
Компонент JavaBean должен удовлетворять определенным соглашениям о наименовании методов и экспортируемых событий. Одним из важных понятий технологии JavaBeans является внешний интерфейс properties (свойства). Property JavaBean – это методы getters setters, обеспечивающие доступ к информации о внутреннем состоянии компонента JavaBean.
Для обращения к компонентам JavaBeans на странице JSP необходимо использовать следующее описание тега в разделе head :
Идентификатор BeanID определяет имя компонента JavaBean, являющееся уникальным в области видимости, определенной атрибутом scope. По умолчанию принимается область видимости scope=»page», т.е. текущая страница JSP.
Обязательный атрибут класса компонента «class» может быть описан следующим способом:
Свойство JavaBean компонента устанавливается тегом jsp:setProperty. Пример :
Для чтения свойства компонента JavaBean с именем myBean используется тег jsp:getProperty :
В следующем листинге приведен пример компонента JavaBean, содержащего строку mystr, используемую в качестве свойств компонента. В компоненте определены методы getter setter.
Синтаксис описания компонента JavaBean на странице JSP приведен на странице Действия actions JSP
Пример использования JavaBean на странице JSP
Рассмотрим простой пример, в котором на странице JSP будет выведено приветствие из JavaBean компонента. Для разработки будет использована IDE Eclipse. На следующем скриншоте представлена структура проекта JavabeanExample, включающего компонент JavaBeanHello.java, страницу index.jsp и дескриптор приложения.
Листинг JavaBean компонента JavaBeanHello.java
Компонент включает свойстве message и методы get/set.
Листинг дескриптора приложения web.xml
Дескриптор приложения не включает никакой информации о JavaBean компоненте, используемый на страницах WEB-приложения.
Листинг JSP страницы index.jsp
Интерфейс страницы представлен на следующем скриншоте.
Курсивом на страницу выведена строка с текущей датой и временем.
Скачать примеры
Исходные коды проекта JavaBeanExample, рассмотренного в тексте страницы, можно скачать здесь (7 Кб).
Введение в JSP
1. Обзор
JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный код в HTML, используя для этого любую программу для создания Web страниц. Затем вы заключаете динамическую часть кода в специальные таги, большинство которых начинаются с » » и завершаются » %> «. В качестве примера рассмотрим секцию JSP страницы, результатом которой будет что-то вроде «Спасибо за покупку Core Web Programming» по запросу с URL: http://host/OrderConfirmation.jsp?title=Core+Web+Programming :
Обратите внимание что это руководство охватывает JSP версии 1.0. А начиная с версии 0.92 JSP претерпела множество изменений, и несмотря на то что эти изменения были лишь во благо, вы должны помнить что JSP версии 1.0 практически полностью не совместима с более ранними JSP движками. Также следует не забывать о том, что предлагаемое вашему вниманию руководство является частью более полного руководства по сервлетам и JSP доступного по адресу http://www.apl.jhu.edu/
2. Синтаксис
3. Текст шаблона: Статический HTML
Как правило большую часть вашей JSP страницы составляет статический HTML, называемый текстом шаблона. Во всех отношениях (кроме одного) этот HTML выглядит как обычный HTML, использующий те же правила синтаксиса, и он просто «передается» клиенту сервлетом, создаваемым для обработки страницы. При этом не только сам HTML выглядит нормальным, он может создаваться с применением тех инструментов, которые вы ранее использовали при создании Web страниц. Я, например, при создании большинства JSP страниц для этого руководства использовал Allaire’s HomeSite.
Единственным печальным исключением из правила что «текст шаблона передается в неизменном виде» является ситуация, когда в тексте вы хотите отобразить последовательность символов » «, для этого в тексте шаблона надо использовать сочетание символов » «.
4. Элементы скриптов JSP
Элементы скриптов JSP позволяют вам вставлять код на Java в сервлет, создаваемый из текущей JSP страницы. Существуют три формы:
4.1 Выражения JSP
Выражения JSP применяются для того чтобы вставить значения Java непосредственно в вывод. Для этого используется следующая форма:
Выражения Java вычисляются, конвертируются в строку и вставляются в страницу. Эти вычисления происходит во время выполнения (то есть при при запросе страницы), а потому существует полный доступ к информации о самом запросе. Например, следующий код служит для отображения даты и времени запроса данной страницы:
Для того чтобы упростить эти выражения существует несколько заранее определенных переменных, которые вы можете использовать. Более детально они будут рассмотрены ниже, но тем не менее, рассматривая их применение при использовании выражений, приведем несколько наиболее важных:
Пример: И, наконец, авторы, использующие XML, могут применить альтернативный синтаксис для выражений JSP:
Помните, что элементы XML в отличие от HTML чувствительны к регистру. Поэтому убедитесь в том, что используете строчные символы.
4.2 Скриплеты JSP
Если вы хотите сделать что-то большее чем вставка простых выражений, скриплеты JSP дадут вам возможность вставить любой код в метод сервлета, который будет создан при обработке данной страницы. Скриплеты имеют следующий вид:
после преобразования приведет к чему-то вроде:
Если вы хотите использовать последовательность символов » %> » внутри скриплета, вместо нее используйте » %\> «. Эквивалентом для XML является:
4.3 Объявления JSP
Поскольку объявления не осуществляют вывода, обычно они используются совместно с JSP выражениями или скриплетами. В приведенном в качестве примера фрагменте JSP отображается количество запросов к данной странице с момента загрузки сервера (или с момента последнего изменения и перезагрузки сервлета):
Также как и в скриплетах, если вам необходимо использовать последовательность символов » %> «, используйте для этого последовательность » %\> «. XML эквивалентом является
5. Директивы JSP
5.1 Директива JSP page
5.2 Директива JSP include
Эта директива позволяет вам включать файлы в процессе трансляции JSP страницы в сервлет. Использование директивы выглядит следующим образом:
Заданный URL обычно интерпретируется относительно JSP страницы, на которой расположена ссылка, но, как и при использовании любых других относительных URL вы можете задать системе положение интересующего вас ресурса относительно домашнего каталога Web сервера, добавив в начало URL символ «/». Содержимое подключаемого файла обрабатывается как обычный текст JSP и поэтому может включать такие элементы как статический HTML, элементы скриптов, директивы и действия.
Например, многие сайты используют небольшую панель навигации на каждой странице. В связи с проблемами использования фреймов HTML часто эта задача решается размещением небольшой таблицы сверху или в левой половине страницы, HTML код которой многократно повторяется для каждой страницы сайта. Директива include наиболее естественный способ решения этой задачи, избавляющий разработчика от кошмара рутины копирования HTML в каждый отдельный файл. Это происходит следующим образом:
6. Пример использования элементов скриптов и директив
На этом простейшем примере показано использование различных конструкций JSP: выражений, скриплетов, объявлений и директив. Также вы можете скачать исходный файл или вызвать этот скриплет из Интернет.
7. Заранее определенные переменные
7.1 request
7.2 response
7.3 out
7.4 session
7.5 application
7.6 config
7.7 pageContext
В JSP представлен новый класс PageContext для изолированного использования специфических особенностей сервера, таких как более эффективные JspWriter s. Идея заключается в том, что если вы обращаетесь к ним через этот класс а не непосредственно, ваш код может исполняться на «обычных» движках сервлет/JSP.
7.8 page
8. Действия
Действия JSP используют конструкции с синтаксисом XML для управления работой движка сервлета. Вы можете динамически подключать файл, многократно использовать компоненты JavaBeans, направить пользователя на другую страницу или сгенерировать HTML для Java plugin. Допустимо применение следующих действий:
8.1 Действие jsp:include
В отличие от директивы include, которая вставляет файл на этапе трансляции JSP страницы, это действие вставляет файл при запросе страницы. Это приводит к некоторой отере эффективности и исключает возможность наличия во вставляемом файле кода JSP (например, вам не удастся задать заголовки HTTP), но зато дает существенное преимущество в гибкости. Возьмем, к примеру, JSP страницу, которая вставляет четыре различных отрывка в Web страницу с новостями сайта. Каждый раз когда меняются заголовки автору достаточно изменить содержимое четырех файлов, тогда как главная JSP страница остается неизменной.
WhatsNew.jsp
8.2 Действие jsp:useBean
Это действие позволяет вам загружать JavaBean для последующего использования на JSP странице. Это очень важная возможность, поскольку она позволяет вам использовать многократного использования классов Java не отказываясь при этом от преимуществ, предоставляемых сервлетами JSP. Простейший синтаксис для указания используемого bean:
Ниже приведен очень простой пример, загружающий bean и устанавливающий/получающий простой строковый параметр.
BeanTest.jsp
SimpleBean.java
Здесь приведен исходный код для bean, исппользованного на JSP странице BeanTest. Вы можете также скачать исходники файла.
8.3 Еще несколько деталей о использовании jsp:useBean
8.4 Действие jsp:setProperty
При этом jsp:setProperty выполняется лишь в том случае, если был создан новый экземпляр объекта, а не тогда, когда находится уже существующий.
Действие jsp:setProperty допускает применение следующих четырех атрибутов:
JspPrimes.jsp
8.5 Действие jsp:getProperty
Этот элемент определяет значение свойства bean, конвертирует его в строку и направляет в поток вывода. Для выполнения действия требуется задание двух атрибутов: имени bean, которое предварительно задается в действии jsp:useBean, и имя свойства, значение которого должно быть определено. Далее приведен пример использования этого действия. За другими примерами обратитесь к разделам 8.2 и 8.4.
8.6 Действие jsp:forward
8.7 Действие jsp:plugin
Это действие позволяет вам вставить элемент OBJECT или EMBED (в зависимости от типа используемого броузера), необходимый для запуска апплетов, использующих plugin Java.
9. Комментарии и символы цитирования
Ниже приведены несколько конструкций, которые вы можете использовать в тех случаях, когда требуется вставить комментарий или использовать символы, зарезервированные для данного тэга:
| Синтаксис | Назначение |
|---|---|
| Комментарий JSP. Игнорируется транслятором JSP-в-скриплет. Все заключенные в тэг элементы JSP, директивы или действия игнорируются. | |
| Комментарий HTML. Передается в конечный HTML. Все заключенные в тэг элементы JSP, директивы или действия выполняются. | |
| Применяется в тексте шаблона (статическом HTML) для воспроизведения символов » «. | |
| Применяется в элементах скриптов для воспроизведения символов » %> «. | |
| Одиночная кавычка в атрибуте, использующем одиночные кавычки. Однако, помните что вы можете использовать как одиночные, так и двойные кавычки, а также другие символы выделения цитирования, не требующие применения специальных тэгов. | |
| Двойная кавычка в атрибуте, использующем двойные кавычки. Однако, помните что вы можете использовать как одиночные, так и двойные кавычки, а также другие символы выделения цитирования, не требующие применения специальных тэгов. | |
| %> в атрибуте. | |
| в атрибуте. |
Это руководство было ранним наброском материалов, позднее вошедших в книгу Core Servlets and JavaServer Pages (Sun Microsystems Press 2000).
Теги действий JSP – jsp useBean, включить, переслать
Теги действий JSP, стандартные теги действий jsp, пример использования jsp, jsp включают действие, прямое действие jsp, атрибут jsp, пример кода элементов действия jsp.
JSP предоставляет набор стандартных тегов действий, которые мы можем использовать для конкретных задач, таких как работа с объектами java bean, включая другие ресурсы, пересылка запроса на другой ресурс и т.д.
Теги действий JSP
Список стандартных элементов действия JSP приведен ниже.
| jsp:включить | Чтобы включить ресурс во время выполнения, может быть HTML, JSP или любой другой файл |
| jsp:useBean | Чтобы получить объект java bean из заданной области или создать новый объект java bean. |
| jsp:getProperty | Чтобы получить свойство компонента java, используется с действием jsp:useBean. |
| jsp:Набор свойств | Чтобы задать свойство объекта java bean, используется с действием jsp:useBean. |
| jsp:вперед | Чтобы переслать запрос на другой ресурс. |
| jsp:текст | Чтобы написать текст шаблона на странице JSP. |
| jsp:элемент | Для динамического определения XML-элементов. |
| jsp:атрибут | Для определения динамически генерируемых атрибутов XML-элемента |
| jsp:тело | Для определения динамически создаваемого тела XML – элемента |
| jsp:плагин | Для создания кода для конкретного браузера, который создает ОБЪЕКТ или ВСТРАИВАЕТ тег для плагина Java. |
JSP useBean
Мы можем использовать jsp:useBean, как показано ниже на страницах JSP, чтобы получить объект bean.
В приведенном выше примере контейнер JSP сначала попытается найти атрибут myBeanAttribute в области запроса, но если он не существует, он создаст экземпляр MyBean, а затем назначит его переменной myBeanAttribute id в JSP и установит его в качестве атрибута области запроса.
Как только компонент определен в JSP, мы можем получить его свойства с помощью действия jsp:getProperty, как показано ниже.
Мы можем использовать jsp:setProperty для установки значений свойств компонента java, как показано ниже.
Если мы хотим установить свойство только в том случае, если jsp:useBean создает новый экземпляр, то мы можем использовать jsp:setProperty внутри jsp:useBean для достижения этой цели, что-то вроде приведенного ниже фрагмента кода.
В большинстве случаев мы кодируем в терминах интерфейсов, поэтому, если у нас есть интерфейс пользователя и реализация сотрудника, и мы устанавливаем атрибут запроса, как показано ниже.
Затем мы можем использовать атрибут типа с jsp:useBean, чтобы получить объект javabean, как показано ниже.
Если мы не указываем значение атрибута области в jsp:useBean, по умолчанию используется область страницы.
Если мы хотим задать свойства Java-компонента из параметров запроса, мы можем использовать атрибут param, как показано ниже.
Если значения атрибута свойства и параметра совпадают, мы можем пропустить атрибут параметра. Например, если имя параметра запроса также является идентификатором, мы можем просто написать:
Если все имена параметров запроса совпадают со свойствами javabean, мы можем просто задать свойства компонента, как показано ниже.
JSP включает в себя
Синтаксис jsp:включить действие-это:
Разница между директивой JSP include и действием include заключается в том, что в директиве include содержимое другого ресурса добавляется в сгенерированный код сервлета во время трансляции, тогда как при действии include это происходит во время выполнения.
Мы можем передать параметры включенному ресурсу, используя действие jsp:param, как показано ниже.
JSP вперед
Мы можем использовать тег jsp:forward action для пересылки запроса на другой ресурс для его обработки. Его синтаксис выглядит следующим образом.
Это все для быстрого просмотра тегов действий JSP. Мы рассмотрим библиотеку стандартных тегов JSP (JSTL) в будущем посте.
Действия actions
Действия JSP actions могут воздействовать на стандартный поток вывода, использовать, модифицировать и создавать объекты. actions используют конструкции с синтаксисом XML для управления работой движка сервлета и позволяют, таким образом, динамически подключать файл, многократно использовать компоненты JavaBeans, направлять пользователя на другую страницу или генерировать HTML для Java plugin.
Согласно спецификации JSP, синтаксис actions базируется на XML. В таблице представлены соответствия определений JSP и XML.
Существует набор стандартных действий, которые должны быть в обязательном порядке реализованы любым контейнером JSP, удовлетворяющим спецификации. Кроме этого, возможно создание новых действий с помощью директивы библиотеки тегов taglib.
Список стандартных действий представлен в следующей таблице.
| Тип действия | Назначение действия |
|---|---|
| Объявление объекта JavaBean, который будет использоваться на странице JSP | |
| Установление значения свойства объекта JavaBean | |
| Чтение значения свойства объекта JavaBean | |
| Включение в страницу JSP дополнительных статических и динамических ресурсов | |
| Перенаправление обработки на другой статический ресурс, например сервлет | |
| Подключение дополнительных программных модулей (компонент JavaBean или апплет) | |
| Определение значения параметра |
Атрибуты тега действия, action attribute
Для интерпретации действий определяются значения action attribute, слева-направо, причем, при этом могут совершаться преобразования типов, предусмотренные спецификацией JSP.
Значения атрибутов могут быть следующими:
Значения action attribute, вычисляемые в процессе запросов, используются только в действиях, т.е. они, например, не могут использоваться в директивах. Тип элемента действия определяет, зависит ли данный атрибут от запроса или нет.
| Наименование атрибута | Наименование действия | Примечание |
|---|---|---|
| beanName | jsp:useBean | Поиск или создание нового экземпляра JavaBean |
| height | jsp:plugin | Определение высоты объекта, размещаемого на странице JSP |
| width | jsp:plugin | Определение ширины объекта, размещаемого на странице JSP |
| bean | applet | jsp:plugin | Генерирование кода (в зависимости от типа используемого броузера), который создает тэг OBJECT или EMBED для Java plugin |
| page | jsp:include | Подключение файла в момент запроса страницы |
| page | jsp:forward | Перенаправление запроса на другую страницу |
| value | jsp:setProperty | Установка свойств компонента JavaBean |
| value | jsp:getProperty | Чтение свойств компонента JavaBean в выходной поток |
| value | jsp:param | Определение значения параметры для компонента, размещаемого на странице JSP |
Действие jsp:useBean
Тег jsp:useBean позволяет ассоциировать экземпляр Java-класса, определенный в данной области видимости scope, с заданным внутренним идентификатором этого класса id в данной странице JSP. Прежде, чем использовать свойства компонента JavaBean (setProperty getProperty), необходимо объявить тег jsp:useBean. При выполнении тега jsp:useBean сервер приложений обеспечивает поиск (lookup) экземпляра данного Java-класса, пользуясь значениями, определенными в атрибутах:
Если объект с данными атрибутами id, scope не найден, предпринимается попытка создать объект, используя значения, определенные в его атрибутах. Синтаксис действия jsp:useBean может включать тело :
При наличии в объявление тела, оно будет вызвано на выполнение, если компонент JavaBean, к которому обращено действие, уже существует. Содержимое тела действия строго не ограничено, однако, как правило, тело действия содержит скриптлеты или теги jsp:setProperty, модифицирующие свойства созданного объекта.
Действие jsp:useBean очень гибкое. Правила, по которым оно выполняется, зависят от текущих значений его атрибутов. С помощью действия jsp:useBean можно:
Тег jsp:useBean имеет параметры, представленные в таблице.
| Атрибут | Описание атрибута | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | Параметр, идентифицирующий экземпляр объекта в пространстве имен, специфицированном в атрибуте scope. Это имя используется для ссылки на компонент JavaBean из страницы JSP. | ||||||||||||||||
| scope | Атрибут, определяющий область видимости ссылки на экземпляр объекта JavaBean. Допустимыми значениями являются page, request, session, application. Данный атрибут фактически описывает пространство имен и цикл жизни ссылки на объект. По умолчанию значение объекта равно page. page (страница). Объект, определенный с областью видимости page, доступен до тех пор, пока не будет отправлен ответ клиенту или пока запрос к текущей странице JSP не будет перенаправлен куда-нибудь еще. Ссылки на объект возможны только в пределах страницы, в которой этот объект определен. Объекты, объявленные с атрибутом page, сохраняются в объекте pageContext. request (запрос). Объект, имеющий область видимости request, существует и доступен в течение текущего запроса, и остается видимым, даже если запрос перенаправляется другому ресурсу в том же самом цикле выполнения. Объекты, декларированные с атрибутом области видимости request, сохраняются в объекте request. session (сессия). Объект, имеющий область видимости session доступен в течение текущего сеанса, если страница JSP «знает» о сеансе. Если имя класса (class) и имя объекта (beanName) не определены, объект должен быть представлен в заданной области видимости. Значение идентификатора id должно быть уникально в текущем модуле трансляции (JSP-странице), иначе возникает ошибка трансляции. Действие jsp:setPropertyТег jsp:setProperty позволяет присваивать значения свойствам компонента JavaBean, который должен быть предварительно создан действием jsp:useBean и содержать соответствующие свойства. Действие jsp:setProperty имеет следующий синтаксис :
Значения свойств компонента JavaBean устанавливается с учетом соответствия типов значения и свойства. Тег jsp:setProperty позволяет устанавливать значения как простых, так и индексированных ствойств. Свойства компонента JavaBean имеют определенный тип, а также методы setter и getter. При установке параметров обычно проверяются наличия свойств компонента JavaBean, их имена и типы, являются ли свойства простыми или индексированными и т.д. Значения одного или нескольких свойств компонента JavaBean могут быть установлены несколькими способами: Пример использования тега jsp:setProperty представлен в следующем листинге: Действие jsp:getPropertyПосле объявления компонента JavaBean с помощью действия jsp:useBean его незащищенные свойств становятся доступными для действия jsp:getProperty. Тег jsp:getProperty делает свойства компонента JavaBean видимыми. Данный тег включает значение типа String или объект типа, преобразованный к типу String, в выходной поток. Преобразование простых типов в тип String происходит автоматически. Для объектов необходим вызов метода toString(). Действие jsp:getProperty имеет следующий синтаксис: Тег jsp:getProperty имеет ряд атрибутов, которые представлены в таблице. При записи тега допускается использовать не все возможные атрибуты.
Значения атрибутов в тегах jsp:setProperty и jsp:getProperty ссылаются на объект, который получается из объекта pageContext с помощью метода findAttribute(). Пример использования тега jsp:getProperty представлен в следующем листинге: Действие jsp:includeДействие jsp:include позволяет подключать статические и динамические ресурсы в контекст текущей страницы JSP. Так, например, выходной поток сервлета может быть включен в содержимое страницы JSP. Тогда при вызове страницы JSP выходной поток сервлета будет встроен в выходной поток JSP. Ресурс определяется по его относительному URL-адресу, который интерпретируется в контекст Web-сервера. В отличие от директивы include, которая вставляет файл на этапе трансляции страницы JSP, действие jsp:include вставляет файл при запросе страницы. Это приводит к некоторой потере эффективности и исключает возможность наличия во вставляемом файле кода JSP, но дает существенное преимущество в гибкости. Если рассмотреть в качестве примера JSP-страницу, которая вставляет четыре различных отрывка в Web страницу с новостями сайта. Каждый раз когда меняются заголовки автору достаточно изменить содержимое четырех файлов, тогда как главная JSP страница остается неизменной. Действие jsp:include имеет следующий синтаксис: Примером может быть включение страницы-приветствия: Тег jsp:include имеет атрибуты, представленные в таблице. Действие jsp:include может включать элементы jsp:param, которые предоставляют значения для некоторых параметров запроса, используемые для включения. Действие jsp:forwardДействие jsp:forward позволяет во время выполнения страницы JSP перенаправлять текущий запрос на другую страницу JSP, некоторый статический ресурс или класс Java-сервлета, находящийся в том же контексте, что и текущая страница JSP. jsp:forward имеет следующий синтаксис : Смысл атрибутов page и flush тот же, что и в случае тега jsp:include. Действие jsp:forward, как и тега jsp:include, может включать элементы jsp:param, которые предоставляют значения для некоторых параметров запроса, используемые для перенаправления. Действие jsp:pluginДействие jsp:plugin позволяет: Тег jsp:plugin замещается тегом OBJECT или EMBED. Пользователь получает дополнительные модули в составе ответа. Действие jsp:plugin имеет следующий синтасис: Атрибуты действия jsp:plugin, представленные в таблице, обеспечивают конфигурационные данные для предоставления соответствующего элемента. Действие jsp:fallback, как и jsp:params, является «дочерним» действием тега jsp:plugin и вне тега не применяется. Коды загружаемых образцов могут не поставляться вместе с контейнером JSP поставщика. Действие jsp:paramДействие jsp:param позволяет определять значения параметров в следующих конструкциях: Например, при выполнении тега jsp:include или jsp:forward (использование включаемой или перенаправляемой страницы JSP), новые параметры или методы forward передаются в момент выполнения действий с помощью параметров. Действие jsp:param имеет следующий синтасис: Пример использования тега jsp:param для определения значения параметра апплета: |





