JSP директиви

Какво представляват JSP директивите?

  • JSP директивите са съобщенията към JSP контейнера. Те предоставят глобална информация за цяла JSP страница.
  • JSP директивите се използват за даване на специални инструкции на контейнер за транслиране на JSP към сървлет код.
  • Във фазата на жизнения цикъл на JSP, JSP трябва да бъде преобразуван в сървлет, който е фазата на превод.
  • Те дават инструкции на контейнера как да се справят с определени аспекти на обработката на JSP
  • Директивите могат да имат много атрибути, разделени със запетаи като двойки ключ-стойност.
  • В JSP директивата е описана в <%@ %> тагове.

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

<%@ directive attribute="" %>

Видове директиви в JSP

Има три вида директиви в JSP:

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

Всеки един от тях е описан подробно по-долу с примери:

1) Директива JSP Page

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

<%@ page…%>
  • Той предоставя атрибути, които се прилагат към цялата JSP страница.
  • Той дефинира зависещи от страницата атрибути, като например скриптов език, страница за грешка и изисквания за буфериране.
  • Използва се за предоставяне на инструкции към контейнер, който се отнася до текущата JSP страница.

Следва списъкът с атрибути, свързани с директивата на страницата:

  1. Език
  2. Разширява
  3. внос
  4. тип съдържание
  5. инфо
  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"%>

Обяснение на кода: В горния пример езиковата стойност на атрибута е 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 класове, интерфейси, enum и т.н., докато генерира код на сървлет. Той е подобен на операторите за импортиране в 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 в този случай. Стойността по подразбиране на атрибута на сесията е истина и сесията е създадена. Когато е зададено на 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" %>

Тук true или false представлява, ако има синхронизация, след това задайте като true и я задайте като false.

Пример:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    isThreadSafe="true"%>

Обяснение на кода:

В горния код isThreadSafe е настроен на „true“, следователно ще се извърши синхронизиране и могат да се използват множество нишки.

8) Автоматично промиване:

Този атрибут указва, че буферираният изход трябва да се изчисти автоматично или не и стойността по подразбиране на този атрибут е истина. Ако стойността е зададена на false, буферът няма да се изчисти автоматично и ако е пълен, ще получим изключение. Когато буферът е none, тогава false е нелегитимен и няма буфериране, така че ще се изчисти автоматично.

Синтаксис на autoFlush:

<% @ page autoFlush="true/false" %>

Тук true/false представлява дали трябва да се направи буфериране или не

Пример:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    autoFlush="false"%>

Обяснение на кода:

В горния код автоматичното промиване е настроено на false и следователно буферирането няма да бъде извършено и изходът е изчистен ръчно.

9) Buffer:

  • С помощта на този атрибут обектът на изходен отговор може да бъде буфериран.
  • Можем да определим размера на буферирането, което да се извърши с помощта на този атрибут и размерът по подразбиране е 8KB.
  • Той насочва сървлета да запише буфера, преди да запише в обекта за отговор.

Синтаксис на буфера:

<%@ page buffer="value" %>

Тук стойността представлява размера на буфера, който трябва да бъде дефиниран. Ако няма буфер, тогава можем да пишем като none и ако не споменем никаква стойност, тогава по подразбиране е 8KB

Пример:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    buffer="16KB"%>

Обяснение на кода:

В горния код размерът на буфера се споменава като 16KB, където буферът ще бъде с този размер

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) Страница за грешка:

Този атрибут се използва за задаване на страницата за грешка за 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: Expression Tag е фалшив, следователно не се игнорира

Кодов ред 3: Тук използвахме атрибут за импортиране и той импортира „Клас на дата“, който е от Java util пакет и се опитваме да покажем текущата дата в кода.

Когато изпълните горния код, ще получите следния изход

Директива за JSP страница

Продукция:

  • Датата е: текуща дата, използвайки метода на датата на класа дата

2) JSP директива за включване

  • JSP „директива за включване“ (кодова линия 8) се използва за включване на един файл към друг файл
  • Този включен файл може да бъде HTML, JSP, текстови файлове и др.
  • Също така е полезно при създаване на шаблони с потребителски изгледи и разделяне на страниците на горен и долен колонтитул и действия в страничната лента.
  • Той включва файл по време на фазата на превод

Синтаксис на директивата за включване:

<%@ 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>

Обяснение на кода:

Директива_jsp2.jsp:

Кодов ред 3: В този код използваме етикети за включване, където включваме файла directive_header_jsp3.jsp в основния файл (_jsp2.jsp) и получаваме изхода както от основния файл, така и от включения файл.

Directive_header_jsp3.jsp:

Кодов ред 11-12: Взехме променлива count, инициализирана на 1 и след това я увеличихме. Това ще даде изхода в основния файл, както е показано по-долу.

Когато изпълните горния код, получавате следния изход:

JSP директива за включване

Изход:

  • Резултатът е Заглавен файл: 2 : Това е основният файл
  • Изходът се изпълнява от файла directive_jsp2.jsp, докато включеният файл directive_header_jsp3.jsp ще бъде компилиран първо.
  • След като включеният файл е готов, основният файл се изпълнява и изходът ще бъде от главния файл „Това е основният файл“. Така че ще получите изхода като „Header file: 2“ от _jsp3.jsp и „This is main file“ от _jsp2.jsp.

3) Директива JSP Taglib

  • JSP директивата taglib се използва за дефиниране на библиотеката с етикети с „taglib“ като префикс, който можем да използваме в JSP.
  • Повече подробности ще бъдат разгледани в раздела за потребителски етикети на JSP
  • Директивата JSP taglib се използва в JSP страниците, използвайки JSP стандартните библиотеки за тагове
  • Той използва набор от персонализирани тагове, идентифицира местоположението на библиотеката и предоставя средства за идентифициране на персонализирани тагове в JSP страница.

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

<%@ taglib uri="uri" prefix="value"%>

Тук атрибутът „uri“ е уникален идентификатор в дескриптора на библиотеката с етикети, а атрибутът „префикс“ е име на етикет.

Пример:

<%@ 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“ е персонализираният етикет, дефиниран и може да се използва навсякъде