JavaRush/Курсы/JSP & Servlets/Знакомство с TagLib

Знакомство с TagLib

Открыта

7.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>

Вполне возможно ты встретишь такой код в своих будущих проектах, так что дам некоторые пояснения.

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

Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maria
Уровень 41
28 сентября 2023, 18:10
а можно ссылки на доп литературу на русском языке?
Надежда
Уровень 104
Expert
6 июля 2023, 12:37
В строке My salary is: исправьте закрывающий тег <p> на </p> В строке Item не хватает открывающего тега <p> и исправьте закрывающий тег на </p>
AlexGarag
Уровень 29
7 октября 2024, 08:11
Читаю в 24 году - ничего не поменяли по замечанию )))
Денис
Уровень 68
17 июня 2025, 14:24
В 2025 аналогично
Андрей
Уровень 108
Expert
26 октября 2022, 14:32
Было бы неплохо, если бы статьи маркировались как "к ознакомлению" или "обязательно к изучению". Времени не так много и некоторая информация в будущей работе или собеседовании может быть не нужна от слова совсем, а ты погружаешься в эти дебри и теряешь возможность более глубоко изучить действительно важные вещи.
Igor
Уровень 108
Expert
13 сентября 2022, 16:09
Чувствуется вся боль автора статьи, прошедшего через этот экспериенс :)