
- •Тема 3: jsp (Java Server Pages )
- •Jsp сторінка
- •Директиви
- •Розглянемо деякі з таких директив.
- •Фрагмент програмного коду на jsp сторінці (скрипт)
- •Декларації.
- •Скриплети.
- •Вирази.
- •Jsp сторінки і об'єкти
- •Елементи action
- •Стандартні елементи action
- •Додаткові набори тегів
- •Створення бібліотеки custom тегів Custom теги без обробки вмісту
- •Custom теги з обробкою вмісту
- •Атрибути в custom тегах
Фрагмент програмного коду на jsp сторінці (скрипт)
Скрипт, як і решта елементів, привносить в кінцевий документ динамічну складову. Проте, на відміну від них, скрипт - програмний код, поміщений безпосередньо в текст JSP сторінки. Скрипт може проводити обчислення або маніпулювати об'єктами, що дозволяє наочно пов'язувати характеристики сторінки, що генерується, з параметрами запиту клієнта і бізнес-правилами програми. Елементи скриптів бувають трьох типів: декларації, скриплети і вирази.
Декларації.
Після перетворення JSP сторінки в сервлет велика частина її вмісту потрапляє в метод _jspService(), який викликається всякий раз, коли з'являється необхідність обробити запит клієнта. Декларація на JSP сторінці найчастіше використовується для того, щоб оголосити додаткові атрибути і методи в класі сервлета, які будуть доступні при обробці будь-якого запиту клієнта. Декларації мають синтаксис <%! ... %>
Приклади декларацій на JSP сторінці:
<%! int i; %>
<%! int i = 0; %>
<%! public String f(int i) { ... } %>
Скриплети.
Скриплет може містити програмний код і декларації локальних змінних, які будуть використані для обробки запитів клієнтів. Фактично, скриплет - це фрагмент програмного коду з майбутнього сервлета, який свого часу буде поміщений в метод _jspService(). Будучи частиною сервлета, скриплет дістає доступ до об'єкту response і, відповідно, може самостійно формувати певну частину кінцевої динамічної сторінки. Проте частіше за все скриплеты використовуються не для цього, а для того, щоб управляти об'єктами бізнес-логіки і логікою програми.
Скриплет має синтаксис <% ... %> . Приклад використання скриплетів у вмісті JSP сторінки:
<% if (i == 0) { %>
Good morning
<% } else { %>
Good afternoon
<% } %>
Щоб оцінити наочність і простоту цієї конструкції, порівняйте її з еквівалентним фрагментом програмного коду в сервлеті:
if (i == 0) {
out.println("Good morning");
} else {
out.println("Good afternoon");
}
Вирази.
Часто сторінка, що передається клієнту, містить результати обчислень або звернень до тих або інших методів і атрибутів певних класів. Будь-який з таких динамічних елементів можна перетворити в рядок і представити на JSP сторінці за допомогою виклику out.println у відповідному скриплеті:
<% UserProfile user = (UserProfile) session.getValue("Profile"); %>
<% out.println(user.getFaxNumber()); %>
Другий рядок в приведеному прикладі зручніше і наочніше представити в коротшому вигляді, використовуючи синтаксис виразу <%= ... %>:
<%= user.getFaxNumber() %>
Інший приклад використання виразу в тілі JSP сторінки:
<%! int i = 0; %>
Hi, now the servlet processing <%= ++i %>th request.
Jsp сторінки і об'єкти
В ході обробки запитів, JSP сторінка може діставати доступ до об'єктів, розташованих на сервері, створювати їх і модифікувати. Доступ до об'єктів здійснюється через елементи скриптів і action. Кожен створюваний в програмі об'єкт має певний час існування, яке декларується у відповідному атрибуті. Специфікацією передбачається чотири інтервали:
page - Об'єкт, чий час існування визначається як page, доступний в межах тільки тієї JSP сторінки, де він був створений. Всі посилання на цей об'єкт повинні бути звільнені відразу ж після того, як запит клієнта був оброблений.
request - Об'єкт, чий час існування визначається як request, доступний для всіх сторінок, пов'язаних з обробкою даного запиту. Зокрема, якщо має місце переадресація обробки на нову JSP сторінку, даний об'єкт буде доступний і на колишній, і на новій сторінці. Як і у попередньому випадку, посилання на об'єкт після обробки запиту повинні бути звільнені.
session - Об'єкт з областю видимості session доступний для всіх сторінок, оброблювальних запити, пов'язані з певною сесією (сеансом зв'язку з конкретним клієнтом). Посилання на об'єкти, пов'язані з сесією, поміщаються в об'єкт session. Після закінчення сеансу зв'язку посилання повинні бути звільнені.
application - Найбільш загальна область видимості. Об'єкти, що мають область існування application, не прив'язані до якої-небудь окремої сторінки або сеансу зв'язку і доступні зі всіх JSP сторінок даного додатку.
JSP сторінка завжди має доступ до певного набору об'єктів, що створюються web контейнером за змовчанням:
request - Об'єкт, що містить запит клієнта. Відноситься до класу javax.servlet.ServletRequest або іншому класу, що успадковує його. Наприклад, для протоколу HTTP це буде об'єкт класу javax.servlet.http.HttpServletRequest. Область видимості об'єкту - request.
response - Об'єкт, в якому сервлет поміщатиме відповідь на запит користувача. Відноситься до класу javax.servlet.ServletResponse або іншому класу, що успадковує його. Наприклад, для протоколу HTTP це буде об'єкт класу javax.servlet.http.HttpServletResponse. Область видимості об'єкту - request.
pageContext - Об'єкт, що визначає контекст JSP сторінки. Область видимості об'єкту - page
session - Об'єкт, що створюється контейнером для ідентифікації клієнта, а також зберігання персональних об'єктів. Створюється контейнером для протоколу HTTP і є екземпляром класу javax.servlet.http.HttpSession.
application - Об'єкт, пов'язаний з конфігурацією сервлета, що відповідає даній JSP сторінці. Область видимості об'єкту - application.
out - Об'єкт, що містить вихідний потік сервлета. Інформація, що посилається в цей потік, буде передана клієнту. Об'єкт є екземпляром класу javax.servlet.jsp.JspWriter. Наприклад, велика частина статичного шаблону на JSP сторінці, в ідеалі, повинна бути записана у вигляді відповідного набору команд out.println(). Область видимості об'єкту - page.
config - Об'єкт, пов'язаний з конфігурацією сервлета. Є екземпляром класу javax.servlet.ServletConfig. Для JSP сторінки область видимості об'єкту config - page.
page - Об'єкт, пов'язаний з обробкою даної сторінки. Область видимості - page