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-розробку та статичну типізацію!