Директиви JSP
Що таке директиви JSP?
- Директиви JSP — це повідомлення для контейнера JSP. Вони надають глобальну інформацію про всю сторінку JSP.
- Директиви JSP використовуються для надання спеціальних інструкцій контейнеру для перекладу JSP у код сервлету.
- На етапі життєвого циклу JSP JSP потрібно перетворити на сервлет, який є фазою перекладу.
- Вони дають інструкції контейнеру щодо того, як обробляти певні аспекти обробки JSP
- Директиви можуть мати багато атрибутів, розділених комами як пари ключ-значення.
- У JSP директива описана в
<%@ %>
теги.
Синтаксис директиви:
<%@ directive attribute="" %>
Типи директив у JSP
У JSP є три типи директив:
- Директива сторінки
- Включити директиву
- Директива Taglib
Кожен з них детально описаний нижче з прикладами:
1) Директива сторінки JSP
Синтаксис директиви Page:
<%@ page…%>
- Він надає атрибути, які застосовуються до всієї сторінки JSP.
- Він визначає залежні від сторінки атрибути, такі як мова сценаріїв, сторінка помилки та вимоги до буферизації.
- Він використовується для надання інструкцій контейнеру, який відноситься до поточної сторінки JSP.
Нижче наведено список його атрибутів, пов’язаних із директивою сторінки:
- Language
- Подовжує
- Імпортувати
- contentType
- info
- Сесія
- isThreadSafe
- автопромивання
- буфера
- IsErrorPage
- PageEncoding
- errorPage
- isELIgonored
Детальніше про кожен атрибут
1) мова: Це визначає мова програмування (базова мова), що використовується на сторінці.
Синтаксис мови:
<%@ page language="value" %>
Тут значенням є мова програмування (базова мова)
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
Пояснення коду: У наведеному вище прикладі атрибут language значення Java яка є основною мовою в цьому випадку. Отже, код у тегах виразів буде скомпільовано за допомогою компілятора Java.
2) Розширюється: Цей атрибут використовується для розширення (успадкування) класу, як це робить JAVA
Синтаксис extends:
<%@ page extends="value" %>
Тут значення представляє клас, з якого воно має бути успадковане.
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page extends="demotest.DemoClass" %>
Пояснення коду: У наведеному вище коді JSP розширює DemoClass, який знаходиться в пакеті demotest, і він розширить усі функції класу.
3) Імпорт: Цей атрибут найчастіше використовується в атрибутах директив сторінки. Він використовується, щоб сказати контейнеру імпортувати інші класи Java, інтерфейси, переліки тощо під час генерації коду сервлету. Він схожий на оператори імпорту в класах, інтерфейсах Java.
Синтаксис імпорту:
<%@ page import="value" %>
Тут значення вказує на класи, які потрібно імпортувати.
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.Date" pageEncoding="ISO-8859-1"%>
Пояснення коду:
У наведеному вище коді ми імпортуємо клас Date з пакета java.util (усі службові класи), і він може використовувати всі методи наступного класу.
4) contentType:
- Він визначає схему кодування символів, тобто використовується для встановлення типу вмісту та набору символів відповіді
- Типом contentType за замовчуванням є
"text/html; charset=ISO-8859-1"
.
Синтаксис contentType:
<%@ page contentType="value" %>
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
Пояснення коду:
У наведеному вище коді тип вмісту встановлено як text/html, він встановлює кодування символів для JSP і для згенерованої сторінки відповіді.
5) інформація
- Він визначає рядок, до якого можна отримати доступ за допомогою методу getServletInfo().
- Цей атрибут використовується для встановлення опису сервлету.
Синтаксис інформації:
<%@ page info="value" %>
Тут значення представляє інформацію про сервлет.
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" info="Guru Directive JSP" pageEncoding="ISO-8859-1"%>
Пояснення коду:
У наведеному вище коді рядок «Guru Directive JSP» може бути отриманий інтерфейсом сервлета за допомогою getServletInfo()
6) Сесія
- Сторінка JSP створює сеанс за замовчуванням.
- Іноді нам не потрібно, щоб сеанс створювався в JSP, і тому ми можемо встановити для цього атрибута значення false у такому випадку. Значення атрибута сеансу за замовчуванням має значення true, і сеанс створюється. Якщо встановлено значення false, ми можемо вказати компілятору не створювати сеанс за замовчуванням.
Синтаксис сесії:
<%@ page session="true/false"%>
У цьому випадку атрибут сеансу може бути встановлений на true або false
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="false"%>
Пояснення коду:
У наведеному вище прикладі для атрибута сеансу встановлено значення «false», отже, ми вказуємо, що не хочемо створювати жодного сеансу в цьому JSP
7) isThreadSafe:
- Він визначає модель потоків для згенерованого сервлета.
- Він вказує на рівень безпеки потоків, реалізований на сторінці.
- Його значення за замовчуванням є істинним, тому одночасно
- Ми можемо використовувати цей атрибут для реалізації інтерфейсу SingleThreadModel у згенерованому сервлеті.
- Якщо ми встановимо значення false, тоді він реалізує SingleThreadModel і матиме доступ до будь-яких спільних об’єктів і може спричинити неузгодженість.
Синтаксис isThreadSafe:
<% @ page isThreadSafe="true/false" %>
Тут істина чи хибність означає, що якщо синхронізація є, тоді встановіть значення істини та встановіть значення хибно.
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isThreadSafe="true"%>
Пояснення коду:
У наведеному вище коді для параметра isThreadSafe встановлено значення «true», тому синхронізація буде виконана, і можна використовувати кілька потоків.
8) Автопромивання:
Цей атрибут вказує, що буферизований вихід має скидатися автоматично чи ні, а значенням за замовчуванням цього атрибута є true. Якщо значення встановлено на false, буфер не буде скинутий автоматично, а якщо він заповнений, ми отримаємо виняток. Якщо буфер відсутній, false є нелегітимним, і буферизація відсутня, тому його буде скинуто автоматично.
Синтаксис autoFlush:
<% @ page autoFlush="true/false" %>
Тут істина/хибність означає, чи потрібно виконувати буферизацію чи ні
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" autoFlush="false"%>
Пояснення коду:
У наведеному вище коді для автоматичного очищення встановлено значення false, отже, буферизація не буде виконана, і вихідні дані очищаються вручну.
9) Buffer:
- Використовуючи цей атрибут, об’єкт вихідної відповіді можна буферизувати.
- Ми можемо визначити розмір буферизації за допомогою цього атрибута, а розмір за замовчуванням становить 8 КБ.
- Він наказує сервлету записати буфер перед записом в об’єкт відповіді.
Синтаксис буфера:
<%@ page buffer="value" %>
Тут значення представляє розмір буфера, який потрібно визначити. Якщо буфер відсутній, ми можемо писати як none, і якщо ми не згадуємо жодного значення, тоді за замовчуванням буде 8KB
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" buffer="16KB"%>
Пояснення коду:
У наведеному вище коді розмір буфера вказано як 16 КБ, причому буфер мав би такий розмір
10) isErrorPage:
- Це вказує на те, що JSP-сторінка, яка містить errorPage, буде перевірена на іншій JSP-сторінці
- Будь-який файл JSP, оголошений атрибутом «isErrorPage», може отримувати винятки від інших сторінок JSP, які мають сторінки з помилками.
- Винятки доступні лише для цих сторінок.
- Значення за замовчуванням - false.
Синтаксис isErrorPage:
<%@ page isErrorPage="true/false"%>
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isErrorPage="true"%>
Пояснення коду:
У наведеному вище коді isErrorPage встановлено як true. Таким чином, він перевірить, чи всі інші JSP мають атрибут errorPage (описано в наступному атрибуті), і він може обробляти винятки.
11) Кодування сторінки:
Атрибут «pageEncoding» визначає кодування символів для сторінки JSP. За замовчуванням вказано «ISO-8859-1», якщо інше не вказано.
Синтаксис pageEncoding:
<%@ page pageEncoding="vaue" %>
Тут значення визначає значення кодування для JSP
приклад:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isErrorPage="true"%>
Пояснення коду:
У наведеному вище коді «pageEncoding» було встановлено стандартний набір символів ISO-8859-1
12) errorPage:
Цей атрибут використовується для встановлення сторінки помилки для сторінки JSP, якщо JSP створює виняток, а потім перенаправляє на сторінку виключення.
Синтаксис errorPage:
<%@ page errorPage="value" %>
Тут значення представляє помилкове значення сторінки JSP
приклад:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" errorPage="errorHandler.jsp"%>
Пояснення коду:
У наведеному вище коді для обробки винятків ми маємо errroHandler.jsp
13) isELIgnored:
- IsELIgnored — це атрибут прапора, за допомогою якого ми повинні вирішити, ігнорувати теги EL чи ні.
- Його тип даних — java enum, а значення за замовчуванням — false, тому EL увімкнено за замовчуванням.
Синтаксис isELIgnored:
<%@ page isELIgnored="true/false" %>
Тут true/false представляє значення EL незалежно від того, чи слід його ігнорувати чи ні.
приклад:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="true"%>
Пояснення коду:
У наведеному вище коді isELIgnored має значення true, отже Мова виразів (EL) тут ігнорується. У прикладі нижче ми використовуємо чотири атрибути (рядок коду 1-2)
Приклад із чотирма атрибутами
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="false"%> <%@page import="java.util.Date" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Directive Guru JSP1</title> </head> <body> <a>Date is:</a> <%= new java.util.Date() %> </body> </html>
Пояснення коду:
Рядок коду 1-2: Тут ми визначили чотири атрибути, тобто
- Мова: встановлено як Java як мова програмування
- contentType: встановіть як text/html, щоб повідомити компілятору, що html має мати формат
- PageEncoding: у цьому атрибуті встановлено кодування за замовчуванням
- isELIgnored: тег виразу недійсний, отже, він не ігнорується
Рядок коду 3: Тут ми використали атрибут import, і він імпортує «Клас дати», який походить з Java util, і ми намагаємося відобразити поточну дату в коді.
Коли ви виконаєте наведений вище код, ви отримаєте наступний результат
Вихід:
- Дата: поточна дата з використанням методу date класу date
2) Директива JSP Include
- «Директива включення» JSP (кодовий рядок 8) використовується для включення одного файлу в інший
- Цей включений файл може бути HTML, JSP, текстовими файлами тощо.
- Це також корисно для створення шаблонів із переглядами користувачів і розбиття сторінок на колонтитули та бічні панелі.
- Він включає файл на етапі перекладу
Синтаксис директиви include:
<%@ include….%>
приклад:
Directive_jsp2.jsp (головний файл)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ include file="directive_header_jsp3.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Directive JSP2</title> </head> <body> <a>This is the main file</a> </body> </html>
Directive_header_jsp3.jsp (який міститься в основному файлі)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <a>Header file : </a> <%int count =1; count++; out.println(count);%> : </body> </html>
Пояснення коду:
Directive_jsp2.jsp:
Рядок коду 3: У цьому коді ми використовуємо теги включення, де ми включаємо файл directive_header_jsp3.jsp до основного файлу (_jsp2.jsp) і отримуємо вихідні дані як основного файлу, так і включеного файлу.
Directive_header_jsp3.jsp:
Рядок коду 11-12: Ми взяли змінну count, ініціалізовану 1, а потім збільшили її. Це дасть результат у головному файлі, як показано нижче.
Коли ви виконуєте наведений вище код, ви отримуєте такий результат:
вихід:
- Результатом є файл заголовка: 2 : це головний файл
- Вихідні дані виконуються з файлу directive_jsp2.jsp, тоді як включений файл directive_header_jsp3.jsp буде скомпільовано першим.
- Після того, як включений файл буде готовий, головний файл буде виконано, а вихід буде з головного файлу «Це основний файл». Таким чином, ви отримаєте вихідні дані як «Файл заголовка: 2» з _jsp3.jsp і «Це головний файл» з _jsp2.jsp.
3) Директива JSP Taglib
- Директива JSP taglib використовується для визначення бібліотеки тегів із «taglib» як префіксом, який ми можемо використовувати в JSP.
- Докладніше буде розглянуто в розділі JSP Custom Tags
- Директива JSP taglib використовується на сторінках JSP за допомогою стандартних бібліотек тегів JSP
- Він використовує набір користувацьких тегів, визначає розташування бібліотеки та надає засоби ідентифікації користувацьких тегів на сторінці JSP.
Синтаксис директиви taglib:
<%@ taglib uri="uri" prefix="value"%>
Тут атрибут «uri» — це унікальний ідентифікатор у дескрипторі бібліотеки тегів, а атрибут «prefix» — це ім’я тегу.
приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="gurutag" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Directive JSP</title> <gurutag:hello/> </head> <body> </body> </html>
Пояснення коду:
Рядок коду 3: Тут «taglib» визначається за допомогою атрибутів uri та префікса.
Рядок коду 9: «gurutag» — це власний тег, який можна використовувати будь-де