JSTL (стандартна бібліотека тегів JSP)

У цьому посібнику з JSTL ми побачимо, як використання різних тегів JSTL спростить кодування JSP.

Що таке JSTL Java?

JSTL стенди для Java стандартна бібліотека тегів серверних сторінок, і це набір спеціальних бібліотек тегів JSP, які забезпечують загальну функціональність веб-розробки. JSTL — це стандартна бібліотека тегів JSP.

Переваги JSTL

Нижче наведено переваги JSTL:

  1. Стандартний тег: забезпечує багатий рівень портативної функціональності сторінок JSP. Розробнику легко зрозуміти код.
  2. Код акуратний і чистий: Оскільки скрипти заплутують розробників, використання JSTL робить код акуратним і чистим.
  3. автоматичний JavaПідтримка beansInterospection: має перевагу JSTL над скриптлетами JSP. Ручки мови виразів JSTL JavaБін код дуже легко. Нам не потрібно скидати об’єкти, які були отримані як атрибути з областю видимості. Використання коду сценаріїв JSP буде складним, і JSTL спростив цю мету.
  4. Людям легше читати: JSTL базується на XML, який дуже схожий на HTML. Отже, розробникам це легко зрозуміти.
  5. Легше для розуміння комп’ютерами: Такі інструменти, як Dreamweaver і головна сторінка генерують все більше HTML-коду. Інструменти HTML чудово справляються з форматуванням HTML-коду. Код HTML змішується з кодом сценарію. Оскільки JSTL виражається як теги, сумісні з XML, для створення HTML легко проаналізувати код JSTL у документі.

Теги JSTL

Основні теги – це теги, які найчастіше використовуються в JSP. Вони забезпечують підтримку

  • Ітерація
  • Умовна логіка
  • Перехопити виняток
  • url вперед
  • Переадресація тощо

Щоб використовувати основні теги, нам потрібно спочатку визначити бібліотеку тегів, а нижче наведено синтаксис для включення бібліотеки тегів.

Синтаксис:

<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>

Тут,

  • префікс можна використовувати для визначення всіх основних тегів і
  • uri — це бібліотека теглів, з якої його імпортовано

Розгляньмо деякі основні теги в деталях,

1. Вийти

  • Результат виразу відображається в тезі out
  • Він може безпосередньо екранувати теги XML. Отже, вони не оцінюються як справжні теги

Синтаксис:

<c:out value="" default="" escapeXML="">
  • Тут значення представляє інформацію на виході, і воно є обов’язковим
  • За замовчуванням це невивід інформації, і це не обов'язково
  • escapeXML – це істина, якщо він екранує символи XML.

приклад:

Coretag_jsp1.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">
<title>Core Tag JSP1</title>
</head>
<body>

</body>
</html>

Пояснення коду:

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c». Отже, його можна використовувати як префікс для всіх основних тегів.

Рядок коду 12: Тут ми використовуємо coretag out з префіксом «c», і цей out виведе значення в тегу виразу. Отже, виводом буде назва

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

Основні теги JSTL – видано

вихід:

  • Ми отримуємо значення як назву з основного тегу «out», який друкуватиметься у вихідному потоці.

2. Спіймати

  • Він ловить будь-які викидні винятки, які виникають у тілі, і відображається як вихід.
  • Він використовується для обробки помилок і їх виявлення.

Синтаксис:

<c:catchvar="">

Тут var представляє ім'я змінної, яка буде містити виняткову ситуацію.

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" 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>Core Tag JSP2</title>
</head>
<body>
<c:catch var="guruException">
   <% int num = 10/0; %>
</c:catch>
The Exception is : ${guruException} 
</body>
</html>

Пояснення коду:

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів

Рядок коду 11-13: Coretag catch використовується для перехоплення винятку та друку його. Тут виняток виникає, коли 10/0, і цей виняток має назву "guruException".

Рядок коду 14: Ми друкуємо «guruException».

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

Основні теги JSTL - Catch

вихід:

  • Ми отримуємо арифметичний виняток як /by zero, і він друкується у вихідних даних за допомогою змінної “guruException”

3. Імпорт

  • Ми можемо імпортувати вміст іншого файлу на JSP-сторінку, як це було зроблено в JSP включає дії.
  • Тут ми також можемо включити URL-адресу, і вміст буде відображено на цій сторінці.

Синтаксис:

<c:importvar="" uri="">

Тут var — це ім’я змінної, яка є ідентифікатором, який містить ім’я/uri файлу. uri — це відносне ім’я файлу або urinaname.

coretag_jsp31.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" 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>Core Tag JSP 31</title>
</head>
<body>
<c:import var="displayfile" url="coretag_jsp32.jsp">
</c:import>
<c:out value="${displayfile}"/>
</body>
</html>

Coretag_jsp32.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">
<title>Insert title here</title>
</head>
<body>
<a>The file is diplayed after importing</a>
</body>
</html>

Пояснення коду:

Coretag_jsp31.jsp

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів

Рядок коду 11-12: Тут ми імпортуємо файл coretag_jsp32.jsp у цей файл за допомогою тегу імпорту

Рядок коду 13: Тут ми друкуємо файл coretag_jsp32.jsp, використовуючи тег out.

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

Основні теги JSTL – імпорт

вихід:

  • Coretag_jsp32 друкується у вихідних даних, оскільки цей файл було імпортовано в coretag_jsp31.jsp.

4. forEach

  • Він використовується для повторення кількості елементів у ряді операторів.
  • Це те саме, що a Java форлуп.

Синтаксис:

<c:forEach var="" begin=""  end="">
  • Тут var представляє назву змінної, яка буде містити назву лічильника
  • Begin представляє початкове значення лічильника
  • End представлятиме його кінцеве значення

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" 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>Core Tag JSP4</title>
</head>
<body>
<c:forEach var="gurucount" begin="5" end="10">
 <c:out value="${gurucount}"/>
</c:forEach>
</body>
</html>

Пояснення коду:

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів

Рядок коду 11-13: Тут ми використовуємо цикл «forEach», де ім’я змінної — «gurucount», яка починає відлік як 5 і закінчує відлік як 10. Ми друкуємо змінну gurucount, яка має числа від 5 до 10.

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

Основні теги JSTL - forEach

вихід:

  • Результат, який ми отримуємо, починається від 5 до 10.

5 Якщо

  • Він використовується для Тестування умовах.
  • Якщо тег використовується для перевірки умови на її істинність чи ні, блок коду буде виконано.

Синтаксис:

<c:if test="${condition}></c:if>

Тут, якщо умова виконується, виконується ряд операторів.

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" 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>Core Tag JSP5</title>
</head>
<body>
<c:set var="count" value="100"/>
<c:if test="${count == 100}">
   <c:out value="The count is 100"/>
</c:if>
</body>
</html>

Пояснення коду:

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів

Рядок коду 11: Тут ми встановлюємо змінну з назвою count на 100

Рядок коду 12-14: Тут ми використовуємо «умову якщо», де ми перевіряємо, чи дорівнює кількість 100. Якщо вона дорівнює 100, тоді ми отримуємо результат як «Кількість дорівнює 100».

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

Основні теги JSTL - If

вихід:

  • Оскільки умова «якщо» є істинною, ми отримуємо результат як «Кількість дорівнює 100».

6. перенаправлення

  • Він використовується для переспрямування поточної сторінки на іншу URL-адресу шляхом надання відносної URL-адреси цього тегу.
  • Він підтримує контекстно-відносні URL-адреси

Синтаксис:

<c:redirect url="" context=""/>

Тут URL-адреса – це відносна URL-адреса, на яку потрібно переспрямувати, і контекстна назва локальної веб-програми.

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" 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>Core Tag JSP6</title>
</head>
<body>
<c:redirect url="/"/>
</body>
</html>

Пояснення коду:

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів

Рядок коду 11: Тут ми використовуємо «тег перенаправлення», де ми вказуємо url-name, і коли ми натискаємо цю сторінку, вона переспрямовує на сайт, який було надано для перенаправлення.

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

Основні теги JSTL – перенаправлення

вихід:

  • Ми отримуємо вихідну URL-адресу guru99.com, яка перенаправляється coretag_jsp6.jsp

Спеціальні теги JSTL

  • Це визначається користувачем JSP мовний елемент.
  • Коли JSP перекладається на сервлет, власний тег перетворюється на клас, який виконує дії з об’єктом і викликається обробником тегів.
  • Ці дії, коли виконується сервлет, викликаються веб-контейнером.
  • Щоб створити визначений користувачем спеціальний тег, нам потрібно створити обробник тегів, який розширюватиме SimpleTagSupport і перевизначати метод doTag().
  • Нам потрібно створити TLD, де нам потрібно відобразити файл класу в TLD.

Переваги спеціальних тегів у JSP

Ось переваги спеціальних тегів у JSP:

  • портативний: Дія, описана в бібліотеці тегів, має бути придатною для використання в будь-якому контейнері JSP.
  • Простий: Недосвідчені користувачі повинні вміти розуміти і використовувати цей механізм. Постачальникам функціональних можливостей JSP необхідно легко зробити їх доступними для користувачів як дії.
  • Виразний: Механізм повинен підтримувати широкий спектр дій, включаючи вкладені дії, елементи сценаріїв усередині тіл дій, створення, використання та оновлення змінних сценаріїв.
  • Можна використовувати з різних мов сценаріїв: Хоча специфікація JSP наразі визначає лише семантику для сценаріїв у Java мовою програмування, ми хочемо залишити відкритою можливість інших мов сценаріїв.
  • Створено на основі існуючих концепцій і механізмів: Ми не хочемо заново винаходити те, що існує деінде. Крім того, ми хочемо уникати майбутніх конфліктів, якщо ми можемо їх передбачити

Синтаксис:

Уявіть, що ми створюємо тег testGuru і можемо використати клас taghandlertestTag, який замінить метод doTag().

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

Крім того, нам доведеться відобразити цей клас testTag у TLD (Бібліотека тегів Descriptабо) оскільки JSP-контейнер автоматично створить зіставлення між файлом класу та uri, згаданим у файлі TLD.

Інтерфейс тегів JSP

  • Цей клас має розширювати клас SimpleTagSupport.
  • Цей клас має перевизначати метод doTag(), який є частиною класу SimpleTagSupport (перевизначення — це метод, успадкований від батьківського класу).
  • Цей інтерфейс є підінтерфейсом інтерфейсу JSPTag.
  • Він надає методи для виконання на початку та в кінці тегу.
  • Крім того, нам потрібно зіставити цей клас у TLD, тобто дескриптор бібліотеки тегів

Ми розглядаємо на прикладі нижче

Метод інтерфейсу тегів

  • doTag() — це метод, який нам потрібно змінити, який матиме вміст для тегу.
  • Він бере поточний контекст JSP за допомогою getJSPContext()

приклад:

Customtag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<!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>Custom Tag</title>
</head>
<body>
<ex:guruTag/>
</body>
</html>

Custom.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(TagHandler)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

Пояснення коду:

guruTag.java(TagHandler)

Рядок коду 6:клас guruTag розширює клас SimpleTagSupport, який присутній у javax.servlet.JSP jar

Рядок коду 7: Тут ми замінюємо метод doTag(), який створює виключення JspException і IOException.

Рядок коду 9-10: У цьому методі код буде вбудовано в спеціальний тег, який буде викликано. Ми беремо об’єкт JspWriter, і він надрукує «Guru Tag».

Custom.tld

Рядок коду 6: Тут назва спеціального тегу «guruTag».

Рядок коду 7:Класом тегів є taghandlerclass, тобто guruTag.java. Він приймає повний шлях до файлу обробника, який включає шлях до каталогу розташування файлу.

Customtag_jsp1.jsp

Рядок коду 3: Цей префікс taglib є обов’язковим для всіх тегів, а доданим префіксом є «ex», тому його можна використовувати як префікс для всіх основних тегів, а uri — custom.tld, який відображає обробник тегів.

Рядок коду 11: Тут ми визначаємо спеціальний тег “guruTag”, який викличе метод doTag() класу обробника, і код у ньому буде виконано.

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

Інтерфейс тегів JSP

вихід:

  • Ми отримуємо результат як “GuruTag” з guruTag.java, тобто TagHandler, який перевизначає метод doTag() і друкує “Guru Tag” як результат.

Підсумки

  • У цьому розділі ми дізналися про стандартну бібліотеку тегів JSP, у якій створювали основні та спеціальні теги.
  • Основні теги включають теги for, if, redirect, import, catch, які використовувалися для основних цілей у JSP.
  • Крім того, ми створили власні теги, у яких ми можемо визначити теги та використовувати їх у JSP