JSTL (стандартна бібліотека тегів JSP)
У цьому посібнику з JSTL ми побачимо, як використання різних тегів JSTL спростить кодування JSP.
Що таке JSTL Java?
JSTL стенди для Java стандартна бібліотека тегів серверних сторінок, і це набір спеціальних бібліотек тегів JSP, які забезпечують загальну функціональність веб-розробки. JSTL — це стандартна бібліотека тегів JSP.
Переваги JSTL
Нижче наведено переваги JSTL:
- Стандартний тег: забезпечує багатий рівень портативної функціональності сторінок JSP. Розробнику легко зрозуміти код.
- Code Охайний і чистий: Оскільки скрипти заплутують розробників, використання JSTL робить код акуратним і чистим.
- автоматичний JavaПідтримка beansInterospection: має перевагу JSTL над скриптлетами JSP. Ручки мови виразів JSTL JavaБін код дуже легко. Нам не потрібно скидати об’єкти, які були отримані як атрибути з областю видимості. Використання коду сценаріїв JSP буде складним, і JSTL спростив цю мету.
- Людям легше читати: JSTL базується на XML, який дуже схожий на HTML. Отже, розробникам це легко зрозуміти.
- Легше для розуміння комп’ютерами: Такі інструменти, як 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>
Пояснення коду:
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c». Отже, його можна використовувати як префікс для всіх основних тегів.
Code Лінія 12: Тут ми використовуємо coretag out з префіксом «c», і цей out виведе значення в тегу виразу. Отже, виводом буде назва
Коли ви виконуєте наведений вище код, ви отримуєте такий результат:
вихід:
- Ми отримуємо значення як назву з основного тегу «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>
Пояснення коду:
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів
Code Рядок 11-13: Coretag catch використовується для перехоплення винятку та друку його. Тут виняток виникає, коли 10/0, і цей виняток має назву "guruException".
Code Лінія 14: Ми друкуємо «guruException».
Коли ви виконуєте код, ви отримаєте такий результат:
вихід:
- Ми отримуємо арифметичний виняток як /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
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів
Code Рядок 11-12: Тут ми імпортуємо файл coretag_jsp32.jsp у цей файл за допомогою тегу імпорту
Code Рядок13: Тут ми друкуємо файл coretag_jsp32.jsp, використовуючи тег out.
Коли ви виконуєте наведений вище код, ви отримуєте наступний результат.
вихід:
- 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>
Пояснення коду:
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів
Code Рядок 11-13: Тут ми використовуємо цикл «forEach», де ім’я змінної — «gurucount», яка починає відлік як 5 і закінчує відлік як 10. Ми друкуємо змінну gurucount, яка має числа від 5 до 10.
Коли ви виконуєте код, ви отримуєте наступний результат
вихід:
- Результат, який ми отримуємо, починається від 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>
Пояснення коду:
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів
Code Лінія 11: Тут ми встановлюємо змінну з назвою count на 100
Code Рядок 12-14: Тут ми використовуємо «умову якщо», де ми перевіряємо, чи дорівнює кількість 100. Якщо вона дорівнює 100, тоді ми отримуємо результат як «Кількість дорівнює 100».
Коли ви виконуєте наведений вище код, ви отримуєте наступний результат
вихід:
- Оскільки умова «якщо» є істинною, ми отримуємо результат як «Кількість дорівнює 100».
6. перенаправлення
- Використовується для перенаправлення поточної сторінки на іншу URL надаючи відносну URL цього тегу.
- Він підтримує контекстно-залежні URLs
Синтаксис:
<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>
Пояснення коду:
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а додається префікс «c», тому його можна використовувати як префікс для всіх основних тегів
Code Лінія 11: Тут ми використовуємо «тег перенаправлення», де ми вказуємо url-name, і коли ми натискаємо цю сторінку, вона переспрямовує на сайт, який було надано для перенаправлення.
Коли ви виконуєте наведений вище код, ви отримуєте наступний вихід;
вихід:
- Ми отримуємо вихідну URL-адресу guru99.com, яка перенаправляється coretag_jsp6.jsp
Спеціальні теги JSTL
- Це визначається користувачем JSP мовний елемент.
- Коли JSP перекладається на сервлет, власний тег перетворюється на клас, який виконує дії з об’єктом і викликається обробником тегів.
- Ці дії, коли виконується сервлет, викликаються веб-контейнером.
- Щоб створити визначений користувачем спеціальний тег, нам потрібно створити обробник тегів, який розширюватиме SimpleTagSupport і перевизначати метод doTag().
- Нам потрібно створити TLD, де нам потрібно відобразити файл класу в TLD.
Переваги спеціальних тегів у JSP
Ось переваги спеціальних тегів у JSP:
- портативний: Дія, описана в бібліотеці тегів, має бути придатною для використання в будь-якому контейнері JSP.
- Простий: Недосвідчені користувачі повинні вміти розуміти і використовувати цей механізм. Постачальникам функціональних можливостей JSP необхідно легко зробити їх доступними для користувачів як дії.
- Виразний: Механізм повинен підтримувати широкий спектр дій, включаючи вкладені дії, елементи сценаріїв усередині тіл дій, створення, використання та оновлення змінних сценаріїв.
- Можна використовувати з різних мов сценаріїв: Хоча специфікація JSP наразі визначає лише семантику для сценаріїв у Java мовою програмування, ми хочемо залишити відкритою можливість інших мов сценаріїв.
- Створено на основі існуючих концепцій і механізмів: Ми не хочемо заново винаходити те, що існує деінде. Крім того, ми хочемо уникати майбутніх конфліктів, якщо ми можемо їх передбачити
Синтаксис:
Уявіть, що ми створюємо тестGuru тег, і ми можемо використовувати клас taghandlertestTag, який перевизначить метод doTag().
<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}
Крім того, нам доведеться відобразити цей клас testTag у TLD (Бібліотека тегів Descriptабо) оскільки JSP-контейнер автоматично створить картуping між файлом класу та 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)
Code Лінія 6:клас guruTag розширює клас SimpleTagSupport, який присутній у javax.servlet.JSP jar
Code Лінія 7: Тут ми замінюємо метод doTag(), який створює виключення JspException і IOException.
Code Рядок 9-10: У цьому методі код буде вбудовано в користувацький тег, який буде викликано. Ми беремо об'єкт JspWriter, і це надрукує «Guru Тег.
Custom.tld
Code Лінія 6: Тут назва спеціального тегу «guruTag».
Code Лінія 7:Класом тегів є taghandlerclass, тобто guruTag.java. Він приймає повний шлях до файлу обробника, який включає шлях до каталогу розташування файлу.
Customtag_jsp1.jsp
Code Лінія 3: Цей префікс taglib є обов’язковим для всіх тегів, а доданим префіксом є «ex», тому його можна використовувати як префікс для всіх основних тегів, а uri — custom.tld, який відображає обробник тегів.
Code Лінія 11: Тут ми визначаємо спеціальний тег “guruTag”, який викличе метод doTag() класу обробника, і код у ньому буде виконано.
Коли ви виконуєте наведений вище код, ви отримуєте наступний результат
вихід:
- Ми отримуємо вихідний результат у вигляді «GuruTag” з guruTag.java, тобто TagHandler, який перевизначає метод doTag() та виводить “Guru Тег” як вихідний результат.
Резюме
- У цьому розділі ми дізналися про стандартну бібліотеку тегів JSP, у якій створювали основні та спеціальні теги.
- Основні теги включають теги for, if, redirect, import, catch, які використовувалися для основних цілей у JSP.
- Крім того, ми створили власні теги, у яких ми можемо визначити теги та використовувати їх у JSP







