- •Тема 3: jsp (Java Server Pages )
- •Jsp сторінка
- •Директиви
- •Розглянемо деякі з таких директив.
- •Фрагмент програмного коду на jsp сторінці (скрипт)
- •Декларації.
- •Скриплети.
- •Вирази.
- •Jsp сторінки і об'єкти
- •Елементи action
- •Стандартні елементи action
- •Додаткові набори тегів
- •Створення бібліотеки custom тегів Custom теги без обробки вмісту
- •Custom теги з обробкою вмісту
- •Атрибути в custom тегах
Jsp сторінка
Як правило, JSP сторінка зберігається в окремому файлі з розширенням .jsp. Велика частина вмісту JSP сторінки перетвориться в сервлеті в набір інструкцій out.println(). Приклад JSP сторінки:
<%@ taglib uri="/exttags.tld" prefix="dscat" %>
<%@ page import = "xbcat.util.*" %>
<dscat:pageheader>All Customers</dscat:pageheader>
<jsp:useBean id="pagescroll" class="ru.view.bean.ScrollPage" scope="session">
</jsp:useBean>
<jsp:setProperty name="pagescroll" property="PageSize" param="psize" />
<html><body>
<%
Vector menu=pagescroll.getMenu();
if( pagescroll.page.size() > 0 ){
%>
<table width="100%" border="0">
<tr>
<td>
<%= pagescroll.getTotalPages() %>
</td>
<td align="right">
<% if(!pagescroll.isSinglePage()){
for(int i=0; i<menu.size(); i++){
String href = ((ScrollMenu)menu.elementAt(i)).m_Href;
String name = ((ScrollMenu)menu.elementAt(i)).m_Name;
if( href != null ){ %>
<a href="<%= href %>"><%= name %></a>
<% } else { %>
<%= name %>
<% }
}
} %>
</td>
</tr>
</table></body></html>
Динамічна складова JSP сторінки представлена трьома типами спеціальних елементів: директивами, action і скриптами. Докладніше кожний з них розглядається далі.
Директиви
Оскільки web контейнер, перш ніж використовувати JSP сторінку, транслює її у відповідний сервлет, має сенс надати можливість залишати на JSP сторінці директиви, які управлятимуть процесом трансляції. Директиви мають синтаксис <%@ директива... %>.
Розглянемо деякі з таких директив.
Директива page. Декларує ряд властивостей JSP сторінки. Синтаксис директиви:
<%@ page список_параметрів %>
Опишемо деякі найцікавіші параметри даної директиви:
import - Як вже мовилося, JSP сторінка перед використанням повинна бути перетворена в програмний код - клас відповідного сервлета. У свою чергу, клас сервлета може звертатися до інших класів із стандартних бібліотек Java або класам з інших пакетів. За змовчанням, клас сервлета, що одержується після трансляції JSP сторінки, може мати зв'язок з пакетами java.lang, java.servlet, java.servlet.jsp і java.servlet.http. Якщо для класу сервлета потрібно забезпечити зв'язок з іншими пакетами, наприклад, з xbcat.util як в наведеному вище прикладі JSP сторінки, останню слід доповнити директивою page, що має атрибут import з назвою відповідного пакету.
session - Якщо для зв'язку з клієнтом використовується протокол HTTP, то для кожного сеансу за змовчанням створюється об'єкт session, що дозволяє зберігати інформацію про цього клієнта в інтервалі між його зверненнями до сервера. З іншого боку, якщо атрибут session був вказаний із значенням false, це дозволяє відмовитися від створення об'єкту сесії і використовувати ресурси сервера, що звільнилися, для вирішення інших завдань.
buffer - Вміст сторінки, створеної у відповідь на запит клієнта, сервлет передає в потік виведення out, звідки воно потім передається web-сервером безпосередньо клієнту. Щоб одержати більш оптимальний режим передачі, в цьому потоці передбачений режим буферизації. При цьому об'єм буфера за змовчанням складає 8 кілобайт. Параметр buffer директиви page дозволяє або задати інший об'єм буфера, або взагалі відмовитися від режиму буферизації, передавши атрибуту значення "none".
isThreadSafe - Згідно специфікації сервлетів, web контейнер за змовчанням дозволяє одному і тому ж екземпляру сервлета паралельно обробляти запити відразу від декількох клієнтів. При цьому кожному із запитів виділяється окремий тред (потік). Тим часом, в деяких випадках буває корисно заборонити паралельну обробку запитів. (Відповідний контролер в web контейнері вибудовує запити, що приходять, в чергу і передає їх сервлету на обробку строго поодинці.) Для цього досить використовувати атрибут isThreadSafe, із значенням false.
pageEncoding - Дозволяє розробнику програми декларувати кодування, яке повинне використовуватися в документі, що передається клієнту. За змовчанням вважається, що сторінка має кодування ISO-8859-1.
contentType - У відповідь на запит клієнта, JSP сторінка за змовчанням генерує документ типу HTML. Разом з тим, область застосування технології Java Server Pages набагато ширше, оскільки вона дозволяє генерувати будь-які інші типи текстових документів: XML, WML, VRML і т.д. MIME-тип документа, що генерується, декларується атрибутом contentType. Як вже зрозуміло, за змовчанням цей атрибут має значення "text/html".
Директива taglib. Дозволяє використовувати на JSP сторінках додаткові теги, створені або отримані з інших джерел розробником програми (custom теги). Синтаксис директиви:
<%@ taglib uri="URI бібліотеки тегів" prefix="им’я префікса" %>
де, uri - абсолютна або відносна адреса URI, що унікальним чином ідентифікує дескриптор бібліотеки тегів, пов'язаних з вказаним префіксом. Вказаний префікс використовується для ідентифікації відповідних custom тегів далі в тексті jsp.
<%@ taglib uri="http://www.mycorp/supertags" prefix="super" %>
...
<super:doMagic>...</super:doMagic>
...
Директива include. Використовується для поміщення в JSP сторінку текстів і програмного коду з інших джерел. Підстановка виконується в момент трансляції JSP сторінки у відповідний сервлет. Приклад використання директиви:
<%@ include file="menu.jsp" %>
Відзначимо, що підстановка матеріалів із зовнішнього джерела може виконуватися також за допомогою спеціального тега <jsp:include>, який буде розглянутий пізніше. Відмінність даного тега від описуваної директиви полягає в тому, що підстановка здійснюється безпосередньо в процесі обробки клієнтського запиту, а тому може бути прив'язано до параметрів запиту.
