Директиви JSP

Що таке директиви JSP?

  • Директиви JSP — це повідомлення для контейнера JSP. Вони надають глобальну інформацію про всю сторінку JSP.
  • Директиви JSP використовуються для надання спеціальних інструкцій контейнеру для перекладу JSP у код сервлету.
  • На етапі життєвого циклу JSP JSP потрібно перетворити на сервлет, який є фазою перекладу.
  • Вони дають інструкції контейнеру щодо того, як обробляти певні аспекти обробки JSP
  • Директиви можуть мати багато атрибутів, розділених комами як пари ключ-значення.
  • У JSP директива описана в <%@ %> теги.

Синтаксис директиви:

<%@ directive attribute="" %>

Типи директив у JSP

У JSP є три типи директив:

  1. Директива сторінки
  2. Включити директиву
  3. Директива Taglib

Кожен з них детально описаний нижче з прикладами:

1) Директива сторінки JSP

Синтаксис директиви Page:

<%@ page…%>
  • Він надає атрибути, які застосовуються до всієї сторінки JSP.
  • Він визначає залежні від сторінки атрибути, такі як мова сценаріїв, сторінка помилки та вимоги до буферизації.
  • Він використовується для надання інструкцій контейнеру, який відноситься до поточної сторінки JSP.

Нижче наведено список його атрибутів, пов’язаних із директивою сторінки:

  1. Language
  2. Подовжує
  3. Імпортувати
  4. contentType
  5. info
  6. Сесія
  7. isThreadSafe
  8. автопромивання
  9. буфера
  10. IsErrorPage
  11. PageEncoding
  12. errorPage
  13. 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, і ми намагаємося відобразити поточну дату в коді.

Коли ви виконаєте наведений вище код, ви отримаєте наступний результат

Директива сторінки JSP

Вихід:

  • Дата: поточна дата з використанням методу 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, а потім збільшили її. Це дасть результат у головному файлі, як показано нижче.

Коли ви виконуєте наведений вище код, ви отримуєте такий результат:

Директива JSP Include

вихід:

  • Результатом є файл заголовка: 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» — це власний тег, який можна використовувати будь-де