JSP директиви
Какво представляват JSP директивите?
- JSP директивите са съобщенията към JSP контейнера. Те предоставят глобална информация за цяла JSP страница.
- JSP директивите се използват за даване на специални инструкции на контейнер за транслиране на JSP към сървлет код.
- Във фазата на жизнения цикъл на JSP, JSP трябва да бъде преобразуван в сървлет, който е фазата на превод.
- Те дават инструкции на контейнера как да се справят с определени аспекти на обработката на JSP
- Директивите могат да имат много атрибути, разделени със запетаи като двойки ключ-стойност.
- В JSP директивата е описана в
<%@ %>
тагове.
Синтаксис на директивата:
<%@ directive attribute="" %>
Видове директиви в JSP
Има три вида директиви в JSP:
- Директива на страницата
- Включете директива
- Taglib директива
Всеки един от тях е описан подробно по-долу с примери:
1) Директива JSP Page
Синтаксис на директивата Page:
<%@ page…%>
- Той предоставя атрибути, които се прилагат към цялата JSP страница.
- Той дефинира зависещи от страницата атрибути, като например скриптов език, страница за грешка и изисквания за буфериране.
- Използва се за предоставяне на инструкции към контейнер, който се отнася до текущата JSP страница.
Следва списъкът с атрибути, свързани с директивата на страницата:
- Език
- Разширява
- внос
- тип съдържание
- инфо
- сесия
- isThreadSafe
- автоматично промиване
- буфер
- IsErrorPage
- pageEncoding
- errorPage
- 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 пакет и се опитваме да покажем текущата дата в кода.
Когато изпълните горния код, ще получите следния изход
Продукция:
- Датата е: текуща дата, използвайки метода на датата на класа дата
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 и след това я увеличихме. Това ще даде изхода в основния файл, както е показано по-долу.
Когато изпълните горния код, получавате следния изход:
Изход:
- Резултатът е Заглавен файл: 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“ е персонализираният етикет, дефиниран и може да се използва навсякъде