1. c:if, c:forEach
Код із використанням тегів замість Java-коду всім сподобався, тому сферу застосування вирішили розширити. Але створенням об'єктів і читанням їх властивостей програмування не обмежується. Необхідно викликати методи об'єктів, працювати з базою даних та іншими сервісами. Що робити?
Просто потрібно кожний оператор Java подати у вигляді тега. Був if
– стане <if>
, був for
– стане <for>
тощо. Гаразд, жартую, не було такого. Ну не може бути так, щоб люди реально вирішили так робити. А ні, може!
Програмісти дозволили додавати до коду будь-які теги. Тут загалом нема нічого страшного – JSP стандарт розширюється. Але вони пішли далі та випустили JSP Standard Tag Library – JSTL. Сторінка з його використанням виглядає так:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<title> JSTL Example</title>
</head>
<body>
<c:set var = "salary" scope = "session" value = "${2000*5}"/>
<c:if test = "${ salary > 2000}">
<p>My salary is: <c:out value = "${salary}"/><p>
</c:if>
</body>
</html>
Цілком можливо, ти зустрінеш такий код у своїх майбутніх проєктах, отже варто надати деякі пояснення.
2. Функції JSTL
Функції JSTL поділяються на 5 категорій:
- Основні теги;
- Теги форматування;
- SQL-теги;
- XML-теги;
- Виклик функцій.
Все наводити я не буду, але найпопулярніші вкажу. Почнемо з основних тегів:
1 | <c:out> |
Виводить вказаний вираз – аналог <%= %> |
2 | <c:set> |
Записує результат виразу до змінної |
3 | <c:remove> |
Видаляє змінну |
4 | <c:catch> |
Захоплює винятки |
5 | <c:if> |
Аналог if |
6 | <c:choose> |
Аналог switch |
7 | <c:when> |
Використовується разом із choose |
8 | <c:otherwise> |
Використовується разом із choose |
9 | <c:import> |
Дозволяє додати до коду контент (еквівалентний директиві import) |
10 | <c:forEach> |
Цикл for each |
11 | <c:param> |
Дозволяє встановити параметри для import |
12 | <c:redirect> |
Редирект |
13 | <c:url> |
Створює URL із параметрами |
Наведу лише один приклад і закінчимо з цим. В принципі, читати такий код після певного тренування цілком можна. А писати все ж таки не раджу:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<title> Each Tag Example&</title>
</head>
<body>
<c:forEach var = "i" begin = "1" end = "5">
Item <c:out value = "${i}"/><p>
</c:forEach>
</body>
</html>
Вдумайтеся: ми записуємо Java-код у вигляді тегів, щоб потім JSP-парсер перетворив ці теги на Java-код. Щось у цьому світі пішло не так.
До речі, можна писати власні бібліотеки тегів. Я навіть колись працював у проєкті, де вони були. Шикарний досвід. Як тільки до бібліотеки вносяться якісь зміни, одразу ламається весь jsp.
А що ви хотіли? Компілятор не відстежує такі зміни. Їх можна знайти лише візуально під час перегляду згенерованих HTML-сторінок. А якщо це якісь рідкісні сценарії, які виникають у нетривіальних ситуаціях… Господи, благослови backend-розробку та статичну типізацію!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ