- •Тема 3: jsp (Java Server Pages )
- •Jsp сторінка
- •Директиви
- •Розглянемо деякі з таких директив.
- •Фрагмент програмного коду на jsp сторінці (скрипт)
- •Декларації.
- •Скриплети.
- •Вирази.
- •Jsp сторінки і об'єкти
- •Елементи action
- •Стандартні елементи action
- •Додаткові набори тегів
- •Створення бібліотеки custom тегів Custom теги без обробки вмісту
- •Custom теги з обробкою вмісту
- •Атрибути в custom тегах
Елементи action
Незалежно від того, який тип матиме документ, що генерується у відповідь на запит користувача, в загальному випадку, JSP сторінка містить текст і теги. Очевидно, що останні відповідають типу документа, що генерується: HTML, XML і т.д. Крім того, в тілі JSP сторінки можуть міститися фрагменти програмного коду на мові Java, які повинні увійти до складу сервлета, одержуваного після трансляції: декларації, скриплеты і вирази. Ідея полягає в тому, щоб доповнити набір тегів стандартної розмітки спеціальними тегами - елементами action, за якими розробник програми може приховати частину програмного коду, що відноситься до неї, або деякі додаткові інструкції.
Відмітимо, що з погляду фахівця з верстки документів, елементи action є такими ж тегами, як і всі інші, а тому допустимо їх сумісне використання з іншими елементами:
<jsp:setProperty name="results" property="row" value="<%= i+1 %>" />
Розглянемо деякі з цих елементів.
Стандартні елементи action
Стандартні елементи action виглядають як звичайні теги, назва яких починається з поєднання символів jsp:, наприклад <jsp:include ...>. Згідно термінології XML, це означає, що стандартні елементи action в технології JSP належать простору імен jsp.
jsp:useBean
Елемент jsp:useBean дозволяє використовувати на JSP сторінці об'єкти, відповідні компонентам JavaBean. Елемент <jsp:useBean> містить параметр, який пов'язує з компонентом якийсь унікальний ідентифікатор. Останній потім використовуватиметься при зверненнях до цього об'єкту:
<jsp:useBean id="customer" class="com.myco.Customer" />
У даному прикладі створюється об'єкт класу com.myco. Надалі, щоб звернутися до нього, досить скористатися ідентифікатором "customer". Наприклад:
<%= customer.getName() %>
За змовчанням, об'єкти, пов'язані з елементом JavaBean, мають область видимості page. Розробник JSP сторінки може вказати триваліший час існування об'єкту JavaBean, скориставшись при написанні елементу jsp:useBean елементом scope. Можливі значення цього атрибуту - page, request, session і application обговорювалися раніше.
jsp:setProperty і jsp:getProperty
Будь-який клас повинен давати доступ до деяких з своїх атрибутів і методів. Відмінність елементу JavaBean полягає в тому, що доступ до атрибутів у нього уніфікований і реалізується на JSP сторінці за допомогою елементів jsp:setProperty і jsp:getProperty.
Елемент jsp:getProperty бере екземпляр Bean, витягує значення вказаного атрибуту, перетворить його у разі потреби в рядок і поміщає в потік даних, передаваних клієнту. Наприклад, згідно наступного запису
<jsp:getProperty name="user" property="name" />
у документ, що генерується, поміщається значення властивості name з екземпляра Bean, що має ідентифікатор user.
Елемент jsp:setProperty, на відміну від попереднього, не витягує, а задає нове значення атрибуту. Наприклад:
<jsp:setProperty name="user" property="name" value="Victor" />
Крім явного задання нових значень, елемент jsp:setProperty дозволяє заносити в атрибут об'єкту значення, витягнуте із запиту клієнта. Наприклад:
<jsp:setProperty name="user" property="name" param="login" />
Даний запис означає, що серед даних, одержаних від клієнта, знаходиться параметр login і його значення передається для переміщення в атрибут name об'єкту Bean, що має ідентифікатор "user".
Нарешті, коли назви полів в запиті клієнта співпадають з назвами атрибутів об'єкту Bean, передбачений ще один варіант, коли разом здійснюється перенесення всіх значень. Наприклад:
<jsp:setProperty name="user" property="*" />
jsp:include
Подібно до директиви include, даний елемент дозволяє поміщати в тіло сторінки, що динамічно генерується, статичний і динамічний матеріал із зовнішнього джерела. При цьому, хоча запозичений таким чином матеріал обробляється в тому ж контексті, що і поточна сторінка, йому надається доступ тільки до вихідного потоку сервлета. Наприклад, код, що включається в JSP сторінку, не повинен звертатися до cookies або використовувати власні заголовки, що декларують кодування або тип документа.
Відмінність директиви include від елементу jsp:include полягає в тому, що для неї матеріал, що включається, не може бути динамічним, а пошук і обробка можливих динамічних фрагментів здійснюється не окремо, а після включення, зі всією сторінкою.
Приклад використання елементу jsp:include:
<jsp:include page="/inc/menu.jsp" />
jsp:forward
Даний елемент дозволяє переадресувати подальше формування динамічної сторінки на іншу JSP сторінку, сервлет або використовувати для завершення наперед підготовлений текст. Наприклад:
<jsp:forward page="/inc/copyright.jsp" />
У наступному, складнішому прикладі динамічна сторінка завершується вмістом текстового файлу, назва якого береться із змінної someValue:
<% String whereTo = "/templates/" + someValue; %>
<jsp:forward page='<%= whereTo %>' />
На завершення слід зазначити, що є дві основні схеми обробки запитів клієнта.
У першому випадку, обробка запиту клієнта і формування у відповідь динамічної сторінки проводяться в рамках однієї JSP сторінки або сервлета. Остання, у разі потреби, може звертатися до об'єктів JavaBean або імпортувати матеріал із зовнішніх джерел за допомогою директиви include або елементу jsp:include.
У другому випадку, обробка проводиться в два етапи. Спершу управління подається на сервлет або JPS сторінку, здійснюючу власне обробку запиту. Наприклад, із запиту клієнта витягуються дані і поміщаються в базу даних або атрибути певних об'єктів. Потім управління передається на окрему JSP сторінку або сервлет, відповідальні за генерацію динамічної сторінки для подальшої передачі її клієнту. При цьому між обробкою запиту і генерацією нової сторінки необов'язково повинен існувати який-небудь взаємозв'язок. Наприклад, це може бути всього лише повернення клієнта на головну сторінку після закінчення якої-небудь процедури.
