Работа с JSP Standard Tag Library (JSTL)
Last updated: 10 мая 2025 г.JSTL
— это теговая альтернатива стандартному Java-коду на JSP. То есть все стандартные конструкции типа создания переменных, циклов, условий, исключений,… можно делать тегами.
Нужен за тем же, зачем используются usebean, EL – чтобы легче страницу было разрабатывать дизайнеру.
Подключение JSTL
Для начала нужно подключить JSTL библиотеку. Для этого нужно скачать файл jstl-1.2.jar
. Его довольно легко найти в интернете.
И после этого нужно поместить его в папку lib в папке WEB-INF.

Теперь нужно подключить библиотеку в самом jsp файлике с помощью <%@%>
тега.
1<!--так подключаем библиотеку jstl Core-->
2<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3<html>
4<head>
5 <title>EL JSP</title>
6</head>
7<body>
8</body>
9</html>
Простейшие теги JSTL
Для примера приведем тег цикла c:forEach
. Аналог Java циклов for, while. foreach.
Пример программы:
1<!--так подключаем библиотеку jstl Core-->
2<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3<html>
4<head>
5 <title>JSTL JSP</title>
6</head>
7<body>
8<!-- Ниже аналог for-each в Java.
9По очереди элементы из списка в атрибуте arrlist помещаются в listelement -->
10<c:forEach items="${arrlist}" var = "listelement">
11<!-- И таким образом каждый
12элемент списка выводиться. -->
13 ${listelement}
14</c:forEach>
15<!-- Можно вывести числа от 1 до 5 с помощью begin и end. -->
16<c:forEach var = "i" begin = "1" end = "5">
17 ${i}
18</c:forEach>
19</body>
20</html>
Как видим, JSTL теги используются в паре с EL выражениями.
Вывод:

Как видим, первый цикл вывел все элементы списка в аттрибуте, а второй цикл вывел числа от 1 до 5.
Другие простейшие теги типа c:if(условие), c:choose, c:when, c:otherwise (аналог if else или switch), c:catch (перехват ошибок) рассматривать не будем они очень просты и легко гугляться.
Далее рассмотрим лишь самые интересные.
Тег c:out
Тег c:out
используется для вывода информации на страницу.
Он выполняет ту же функцию, что и ранее изученные способы:
- <%=”<h2>Hello!!</h2>”%>,
- resp.getWriter().write(“<h2>Hello!!</h2>”)
- или \${<h2>Hello!!</h2>}.
Но в случае c c:out тег h2 не воспримется (выведет на странице <h2>Hello!!</h2>
). c:out более безопасен и перед выводом на страницу интерпретирует html теги в специальные символы. Поэтому можно без страха через него выводить данные введенные пользователем, не боясь, что он ввел какой-то html код, что может сломать страницу.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2<html>
3<head>
4 <title>EL JSP</title>
5</head>
6<body>
7<%="<h2>Hello!!</h2>"%>
8<% response.getWriter().write("<h2>Hello!!</h2>"); %>
9${‘<h2>Hello!!</h2>‘}
10<c:out value="${'<h2>Hello!!</h2>‘}"/>
11</body>
12</html>
Откроем эту jsp страницу.

Видим, что при выводе с помощью c:out
теги h2 воспринялись как часть строки. То есть html, при выводе с помощью c:out, не работает.
Тег c:import
Подобен include в сервлетах, но он также может добавлять на страницу не только данные на нашем сервере, а и вставить в нашу jsp сторонний url.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2<html>
3<head>
4 <title>JSTL JSP</title>
5</head>
6<body>
7 before import
8 <c:import url="https://www.twitch.tv/"/>
9 after import
10</body>
То есть сначала выведется всё, что было выше строки с import потом главная страница twitch, потом код после этой строки.

Видим, что сначала вывелось before import, потом страница twitch, потом after import.
Создание, удаление переменных.
С помощью JSTL можно создавать, удалять переменные.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
2prefix="c" %>
3<html>
4<head>
5 <title>JSTL JSP</title>
6</head>
7<body>
8<!--создать переменную SomeVar
9в application scope. в нее записываем
10результат выражения в value-->
11<c:set var="SomeVar" scope="application" value="${5*7/3}"/>
12<c:out value="${SomeVar}"/>
13<!--можно удалить переменную.
14для очистки памяти например.-->
15<c:remove var="SomeVar"/>
16<c:out value="${SomeVar}"/>
17</body>
18</html>
Откроем страницу.

Видим, что результат выражения, который сохранился в переменную правильный.
После удаления же переменной, как видим, ничего не вывелось вторым c:out
.
Аналог resp.encodeURL.
c:url
– аналог resp.encodeURL, то есть преобразование адреса с добавлением JSESSIONID
.
Также здесь можно увидеть добавление параметров с помощью c:param
.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2<html>
3<head>
4 <title>JSTL JSP</title>
5</head>
6<body>
7<!--c:url – аналог resp.encodeURL то есть преобразование адреса с добавлением JSESSIONID.
8в var записывается преобразованный адрес-->
9<c:url var="fullURL" value="/myservlet">
10 <!--добавляем параметры
11 к преобразовываемому адресу.-->
12 <c:param name="name" value="Carl"/>
13</c:url>
14<!--выводим полный URL-->
15${fullURL}
16</body>
17</html>
Откроем страницу.

Видим, что при выключенных куках JSESSIONID
успешно добавился и параметр со значением Carl тоже успешно добавился.
Тег c:forTokens.
С помощью c:forTokens
можно разбить строку по какому-то символу и над каждым элементом разбитой строки выполнить какие-то действия. То есть очевидно, что это такой вид цикла.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2<html>
3<head>
4 <title>JSTL JSP</title>
5</head>
6<body>
7<!--делит строку items по разделителю delims
8и выполняет какие-то действия над каждым
9из элементов разделенной строки-->
10<c:forTokens items="John_Jonny_Carl" delims="_" var="name">
11 <c:out value="${name}"/><br>
12</c:forTokens>
13</body>
14</html>
Откроем страницу.

Тег c:redirect.
С помощью c:redirect
можем перейти на сторонний ресурс, но при это можем еще вставить параметры в адресную строку.
Пример программы:
1<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2<html>
3<head>
4 <title>JSTL JSP</title>
5</head>
6<body>
7 <!--можем совершить redirect на сторонний адрес-->
8 <c:redirect url="https://twitch.tv/">
9 <!--особенность что можем добавить
10 параметры к этому адресу -->
11 <c:param name="name" value="Carl"/>
12 </c:redirect>
13</body>
14</html>
Откроем страницу.

Видим в адресной строке вставленный в адрес параметр.
Дополнительные материалы
Следующие уроки
Что такое шаблоны проектирования? Шаблон Factory
16
мин.
Шаблон Singleton: обеспечение единственного экземпляра
14
мин.
Шаблон DAO: работа с БД через объект
13
мин.