«1. Обзор
Библиотека тегов страниц JavaServer (JSTL) представляет собой набор тегов, которые можно использовать для реализации некоторых общих операций, таких как циклы, условное форматирование и другие.
В этом уроке мы обсудим, как настроить JSTL и как использовать его многочисленные теги.
2. Настройка
Чтобы включить функции JSTL, нам нужно добавить библиотеку в наш проект. Для проекта Maven мы добавляем зависимость в файл pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
После добавления библиотеки в наш проект окончательной настройкой будет добавление основного тега JSTL и файла пространства имен любых других тегов в наш JSP. используя директиву taglib следующим образом:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Далее мы рассмотрим эти теги, которые в общих чертах сгруппированы в пять категорий.
3. Основные теги
Библиотека основных тегов JSTL содержит теги для выполнения основных операций, таких как печать значений, объявление переменных, обработка исключений, выполнение итераций и объявление условных операторов среди прочего.
Давайте посмотрим на основные теги.
3.1. Тег \u003cc:out\u003e
\u003cc:out\u003e используется для отображения значений, содержащихся в переменных, или результата неявного выражения.
Он имеет три атрибута: значение, значение по умолчанию и escapeXML. Атрибут escapeXML выводит необработанные XML-теги, содержащиеся в атрибуте value или его вложении.
Пример тега \u003cc:out\u003e:
<c:out value="${pageTitle}"/>
3.2. Тег \u003cc:set\u003e
Тег \u003cc:set\u003e используется для объявления переменных области действия в JSP. Мы также можем объявить имя переменной и ее значение в атрибутах var и value соответственно.
Пример будет иметь вид:
<c:set value="JSTL Core Tags Example" var="pageTitle"/>
3.3. Тег \u003cc:remove\u003e
Тег \u003cc:remove\u003e удаляет переменные области действия, что эквивалентно присвоению переменной null. Он принимает атрибуты var и scope со значением по умолчанию для всех областей действия.
Ниже мы покажем пример использования тега \u003cc:remove\u003e:
<c:remove var="pageTitle"/>
3.4. Тег \u003cc:catch\u003e
Тег \u003cc:catch\u003e перехватывает любое исключение, возникающее внутри его оболочки. Если возникает исключение, его значение сохраняется в атрибуте var этого тега.
Типичное использование может выглядеть так:
<c:catch var ="exceptionThrown">
<% int x = Integer.valueOf("a");%>
</c:catch>
И чтобы проверить, выброшено ли исключение, мы используем тег \u003cc:if\u003e, как показано ниже:
<c:if test = "${exceptionThrown != null}">
<p>The exception is : ${exceptionThrown} <br />
There is an exception: ${exceptionThrown.message}
</p>
</c:if>
3.5. Тег \u003cc:if\u003e
\u003cc:if\u003e — это условный тег, который отображает или выполняет заключенные в него скриптлеты только тогда, когда его тестовый атрибут имеет значение true. Результат оценки может быть сохранен в его атрибуте var.
3.6. Теги \u003cc:choose\u003e, \u003cc:when\u003e и \u003cc:otherwise\u003e
\u003cc:choose\u003e — это родительский тег, который используется при выполнении выражений типа switch или if-else. Он имеет два подтега; \u003cc:when\u003e и \u003cc:inotherwise\u003e, которые представляют if/else-if и else соответственно.
\u003cc:when\u003e принимает тестовый атрибут, который содержит вычисляемое выражение. Ниже мы покажем пример использования этих тегов:
<c:set value="<%= Calendar.getInstance().get(Calendar.SECOND)%>" var="seconds"/>
<c:choose>
<c:when test="${seconds le 30 }">
<c:out value="${seconds} is less than 30"/>
</c:when>
<c:when test="${seconds eq 30 }">
<c:out value="${seconds} is equal to 30"/>
</c:when>
<c:otherwise>
<c:out value="${seconds} is greater than 30"/>
</c:otherwise>
</c:choose>
3.7. Тег \u003cc:import\u003e
Тег \u003cc:import\u003e обрабатывает выборку и отображение содержимого с абсолютных или относительных URL-адресов.
Мы можем использовать атрибуты url и var для хранения URL-адреса и содержимого, полученного из URL-адреса соответственно. Например, мы можем импортировать содержимое с URL-адреса:
<c:import var = "data" url = "http://www.example.com"/>
3.8. Тег \u003cc:forEach\u003e
Тег \u003cc:forEach\u003e похож на синтаксис for, while или do-while в Java. Атрибут items содержит список элементов для повторения, а атрибуты begin и end содержат соответственно начальный и конечный индексы (нулевая индексация).
Тег \u003cc:forEach\u003e также имеет атрибут step, который управляет размером приращения индекса после каждой итерации. Ниже мы покажем пример использования:
<c:forEach var = "i" items="1,4,5,6,7,8,9">
Item <c:out value = "No. ${i}"/><p>
</c:forEach>
3.9. Тег \u003cc:forTokens\u003e
Тег \u003cc:forTokens\u003e используется для разделения строки на токены и их повторения.
Подобно тегу \u003cc:forEach\u003e, он имеет атрибут items и дополнительный атрибут delim, который является разделителем для строки, например:
<c:forTokens
items = "Patrick:Wilson:Ibrahima:Chris"
delims = ":" var = "name">
<c:out value = "Name: ${name}"/><p>
</c:forTokens>
3.10. Теги \u003cc:url\u003e и \u003cc:param\u003e
Тег \u003cc:url\u003e полезен для форматирования URL с правильной кодировкой запроса. отформатированный URL-адрес хранится в атрибуте var.
Тег \u003cc:url\u003e также имеет вложенный тег \u003cc:param\u003e, который используется для указания параметров URL. Мы показываем пример ниже:
<c:url value = "/core_tags" var = "myURL">
<c:param name = "parameter_1" value = "1234"/>
<c:param name = "parameter_2" value = "abcd"/>
</c:url>
«
«3.11. Тег \u003cc:redirect\u003e
<c:redirect url="/core_tags"/>
Тег \u003cc:redirect\u003e выполняет перезапись URL-адреса и перенаправляет пользователя на страницу, указанную в его атрибуте url. Типичный вариант использования будет выглядеть следующим образом:
4. Форматирование тегов
Библиотека тегов форматирования JSTL предоставляет удобный способ форматирования текста, чисел, дат, времени и других переменных для лучшего отображения.
Теги форматирования JSTL также можно использовать для улучшения интернационализации веб-сайта.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Прежде чем использовать эти теги форматирования, мы должны добавить библиотеку тегов в наш JSP:
Давайте определим различные теги форматирования и то, как их можно использовать.
4.1. Тег \u003cfmt:formatDate\u003e
Тег \u003cfmt:formatDate\u003e полезен для форматирования даты или времени. Атрибут value содержит форматируемую дату, а атрибут type принимает одно из трех значений; дата, время или и то, и другое.
<c:set var="now" value="<%= new java.util.Date()%>"/>
<fmt:formatDate type="time" value="${now}"/>
\u003cfmt:formatDate\u003e также имеет атрибут шаблона, в котором мы можем указать желаемый шаблон форматирования. Ниже приведен пример одного из шаблонов:
4.2. Тег \u003cfmt:parseDate\u003e
Тег \u003cfmt:parseDate\u003e подобен тегу \u003cfmt:formatDate\u003e.
Разница в том, что с помощью тега \u003cfmt:parseDate\u003e мы можем указать шаблон форматирования, в котором базовый анализатор даты должен ожидать значение даты.
<c:set var="today" value="28-03-2018"/>
<fmt:parseDate value="${today}" var="parsedDate" pattern="dd-MM-yyyy"/>
Мы можем анализировать даты:
4.3. Тег \u003cfmt:formatNumber\u003e
<c:set var="fee" value="35050.1067"/>
<fmt:formatNumber value="${fee}" type="currency"/>
Тег \u003cfmt:formatNumber\u003e обрабатывает рендеринг чисел по определенному шаблону или точности, которая может быть числом, валютой или процентом, как указано в его атрибуте type. Пример использования \u003cfmt:formatNumber\u003e:
4.4. Тег \u003cfmt:parseNumber\u003e
Тег \u003cfmt:parseNumber\u003e подобен тегу \u003cfmt:formatNumber\u003e. Разница в том, что с помощью тега \u003cfmt:parseNumber\u003e мы можем указать шаблон форматирования, в котором базовый синтаксический анализатор чисел должен ожидать, что число будет в нем.
<fmt:parseNumber var="i" type="number" value="${fee}"/>
Мы могли бы использовать это так:
4.5. Тег \u003cfmt:bundle\u003e
Тег \u003cfmt:bundle\u003e является родительским тегом для тега \u003cfmt:message\u003e. \u003cfmt:bundle\u003e превращает пакет, указанный в его атрибуте basename, во вложенные теги \u003cfmt:message\u003e.
<fmt:bundle basename="com.baeldung.jstl.bundles.CustomMessage" prefix="verb.">
<fmt:message key="go"/><br/>
<fmt:message key="come"/><br/>
<fmt:message key="sit"/><br/>
<fmt:message key="stand"/><br/>
</fmt:bundle>
Тег \u003cfmt:bundle\u003e полезен для включения интернационализации, поскольку мы можем указывать объекты, зависящие от локали. Типичное использование будет иметь вид:
4.6. Тег \u003cfmt:setBundle\u003e
<fmt:setBundle basename="com.baeldung.jstl.bundles.CustomMessage" var="lang"/>
Тег \u003cfmt:setBundle\u003e используется для загрузки пакета ресурсов в JSP и обеспечения его доступности на всей странице. Загруженный пакет ресурсов хранится в атрибуте var тега \u003cfmt:setBundle\u003e. Мы можем установить пакет:
4.7. Тег \u003cfmt:setLocale\u003e
<fmt:setLocale value="fr_FR"/>
Тег \u003cfmt:setLocale\u003e используется для установки локали для разделов в JSP, размещенных после его объявления. Обычно мы устанавливаем это следующим образом:
fr_FR представляет локаль, в данном случае французскую.
4.8. Тег \u003cfmt:timeZone\u003e
Тег \u003cfmt:timeZone\u003e является родительским тегом, указывающим часовой пояс, который будет использоваться любыми действиями по форматированию или синтаксическому анализу времени с помощью тегов в его приложении.
<fmt:timeZone value="${zone}">
<fmt:formatDate value="${now}" timeZone="${zn}"
type="both"/>
</fmt:timeZone>
Этот параметр часового пояса предоставляется его атрибутом value. Пример использования показан ниже:
4.9. Тег \u003cfmt:setTimeZone\u003e
<fmt:setTimeZone value="GMT+9"/>
Тег \u003cfmt:setTimeZone\u003e можно использовать для копирования часового пояса, указанного в его атрибуте value, в переменную области действия, указанную в его атрибуте var. Мы определяем это следующим образом:
4.10. Тег \u003cfmt:message\u003e
Тег \u003cfmt:message\u003e используется для отображения сообщения интернационализации. Уникальный идентификатор извлекаемого сообщения должен быть передан в его ключевой атрибут.
Определенный пакет для поиска сообщения, который также можно указать с помощью атрибута пакета.
<fmt:setBundle basename = "com.baeldung.jstl.bundles.CustomMessage" var = "lang"/>
<fmt:message key="verb.go" bundle="${lang}"/>
Это может выглядеть так:
4.11. Тег \u003cfmt:requestEncoding\u003e
Тег \u003cfmt:requestEncoding\u003e полезен при указании типа кодировки для форм с типом действия публикации.
Имя используемой кодировки символов указывается в ключевом атрибуте тега \u003cfmt:requestEncoding\u003e.
<fmt:requestEncoding value = "UTF-8" />
Давайте рассмотрим пример ниже:
5. Теги XML
Библиотека тегов XML JSTL предоставляет удобные способы взаимодействия с данными XML в JSP.
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
«Чтобы получить доступ к этим тегам XML, мы должны добавить библиотеку тегов в нашу JSP следующим образом:
Давайте посмотрим на различные теги в библиотеке тегов JSTL XML.
5.1. Тег \u003cx:out\u003e
Тег \u003cx:out\u003e подобен тегу скриптлета \u003c%= %\u003e в JSP, но \u003cx:out\u003e специально используется для выражений XPath.
Тег \u003cx:out\u003e имеет атрибуты select и escapeXML, используемые для указания выражения XPath для оценки строки и включения экранирования специальных символов XML соответственно.
<x:out select="$output/items/item[1]/name"/>
Простой пример:
$output в приведенном выше примере относится к предварительно загруженному файлу XSL.
5.2. Тег \u003cx:parse\u003e
<x:parse xml="${xmltext}" var="output"/>
Тег \u003cx:parse\u003e используется для синтаксического анализа данных XML, указанных в атрибуте или вложении xml или doc. Типичный пример:
5.3. Тег \u003cx:set\u003e
<x:set var="fragment" select="$output//item"/>
Тег \u003cx:set\u003e присваивает переменной, указанной в его атрибуте var, вычисленное выражение XPath, переданное в его атрибут select. Типичный пример:
5.4. Тег \u003cx:if\u003e
Тег \u003cx:if\u003e обрабатывает свое тело, если выражение XPath, предоставленное его атрибуту select, оценивается как истинное.
Результат оценки может быть сохранен в его атрибуте var.
<x:if select="$output//item">
Document has at least one <item> element.
</x:if>
Простой вариант использования будет выглядеть так:
5.5. Тег \u003cx:forEach\u003e
Тег \u003cx:forEach\u003e используется для циклического обхода узлов в XML-документе. XML-документ предоставляется через атрибут select тега \u003cx:forEach\u003e.
Как и основной тег \u003cc:forEach\u003e, тег \u003cx:forEach\u003e имеет атрибуты начала, конца и шага.
<ul class="items">
<x:forEach select="$output/items/item/name" var="item">
<li>Item Name: <x:out select="$item"/></li>
</x:forEach>
</ul>
Таким образом, у нас будет:
5.6. Теги \u003cx:choose\u003e, \u003cx:when\u003e и \u003cx:otherwise\u003e
Тег \u003cx:choose\u003e является родительским тегом, который используется при выполнении выражений типа switch или if/else-if/else и не имеет атрибутов, но содержит теги \u003cx:when\u003e и \u003cx:inotherwise\u003e.
Тег \u003cx:when\u003e подобен if/else-if и принимает атрибут select, который содержит вычисляемое выражение.
Тег \u003cx:otherwise\u003e аналогичен предложению else/default и не имеет атрибута.
<x:choose>
<x:when select="$output//item/category = 'Sneakers'">
Item category is Sneakers
</x:when>
<x:when select="$output//item/category = 'Heels'">
Item category is Heels
</x:when>
<x:otherwise>
Unknown category.
</x:otherwise>
</x:choose>
Ниже мы показываем пример использования:
5.7. Теги \u003cx:transform\u003e и \u003cx:param\u003e
Тег \u003cx:transform\u003e преобразует XML-документ в JSP, применяя к нему расширяемый язык таблиц стилей (XSL).
Преобразуемый XML-документ или строка передается в атрибут doc, а применяемый XSL передается в атрибут xslt тега \u003cx:transform\u003e.
Тег \u003cx:param\u003e является вложенным тегом тега \u003cx:transform\u003e и используется для установки параметра в таблице стилей преобразования.
<c:import url="/items_xml" var="xslt"/>
<x:transform xml="${xmltext}" xslt="${xslt}">
<x:param name="bgColor" value="blue"/>
</x:transform>
Простой пример использования будет иметь вид:
6. Теги SQL
Библиотека тегов JSTL SQL предоставляет теги для выполнения операций с реляционной базой данных.
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
Чтобы включить теги JSTL SQL, мы добавляем taglib в наш JSP:
Теги JSTL SQL поддерживают различные базы данных, включая MySQL, Oracle и Microsoft SQL Server.
Далее мы рассмотрим различные доступные теги SQL.
6.1. Тег \u003csql:setDataSource\u003e
Тег \u003csql:setDataSource\u003e используется для определения переменных конфигурации JDBC.
<sql:setDataSource var="dataSource" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test" user="root" password=""/>
Эти переменные конфигурации хранятся в атрибутах driver, url, user, password и dataSource тега \u003csql:setDataSource\u003e, как показано ниже:
В приведенном выше примере атрибут var содержит значение, которое идентифицирует ассоциированную базу данных.
6.2. Тег \u003csql:query\u003e
<sql:query dataSource="${dataSource}" var="result">
SELECT * from USERS;
</sql:query>
Тег \u003csql:query\u003e используется для выполнения инструкции SQL SELECT с результатом, сохраненным в переменной области действия, определенной в ее атрибуте var. Обычно мы определяем это как:
Атрибут sql тега \u003csql:query\u003e содержит команду SQL, которую необходимо выполнить. Другие атрибуты включают maxRows, startRow и dataSource.
6.3. Тег \u003csql:update\u003e
Тег \u003csql:update\u003e похож на тег \u003csql:query\u003e, но выполняет только операции SQL INSERT, UPDATE или DELETE, которые не требуют возвращаемого значения.
<sql:update dataSource="${dataSource}" var="count">
INSERT INTO USERS(first_name, last_name, email) VALUES
('Grace', 'Adams', '[email protected]');
</sql:update>
Пример использования:
Атрибут var тега \u003csql:update\u003e содержит количество строк, затронутых оператором SQL, указанным в его атрибуте sql.
6.4. Тег \u003csql:param\u003e
<sql:update dataSource = "${dataSource}" var = "count">
DELETE FROM USERS WHERE email = ?
<sql:param value = "[email protected]" />
</sql:update>
«Тег \u003csql:param\u003e — это вложенный тег, который можно использовать в тегах \u003csql:query\u003e или \u003csql:update\u003e для предоставления значения для заполнителя значения в операторе sql следующим образом:
\u003c Тег sql:param\u003e имеет один атрибут; значение, которое содержит значение, которое будет предоставлено.
6.5. Тег \u003csql:dateParam\u003e
Тег \u003csql:dateParam\u003e используется в тегах \u003csql:query\u003e или \u003csql:update\u003e для предоставления значения даты и времени для заполнителя значения в операторе sql.
<sql:update dataSource = "${dataSource}" var = "count">
UPDATE Users SET registered = ? WHERE email = ?
<sql:dateParam value = "<%=registered%>" type = "DATE" />
<sql:param value = "<%=email%>" />
</sql:update>
Мы можем определить это в нашем JSP следующим образом:
Как и тег \u003csql:param\u003e, тег \u003csql:dateParam\u003e имеет атрибут значения с дополнительным атрибутом типа, значением которого может быть дата , время или отметка времени (дата и время).
6.6. Тег \u003csql:transaction\u003e
<sql:transaction dataSource = "${dataSource}">
<sql:update var = "count">
UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
email='[email protected]'
</sql:update>
<sql:update var = "count">
UPDATE Users SET last_name = 'Nelson' WHERE
email ='[email protected]'
</sql:update>
<sql:update var = "count">
INSERT INTO Users(first_name, last_name, email)
VALUES ('Grace', 'Adams', '[email protected]');
</sql:update>
</sql:transaction>
Тег \u003csql:transaction\u003e используется для создания операции JDBC, подобной транзакции, путем группировки тегов \u003csql:query\u003e и \u003csql:update\u003e вместе следующим образом:
Тег \u003csql:transaction\u003e гарантирует, что все операции с базой данных обрабатываются успешно (фиксируются) или корректно завершаются сбоем (откатываются), если в какой-либо из операций возникает ошибка.
7. Функции JSTL
Методы JSTL — это утилиты для обработки данных в JSP. Хотя некоторые функции принимают разные типы данных, большинство из них предназначены для работы со строками.
<%@ taglib prefix = "fn"
uri = "http://java.sun.com/jsp/jstl/functions" %>
Чтобы включить методы JSTL в JSP, мы добавим taglib на нашу страницу:
Давайте посмотрим на эти функции и на то, как их использовать.
7.1. fn:contains() и fn:containsIgnoreCase()
<c:set var = "string1" value = "This is first string"/>
<c:if test = "${fn:contains(string1, 'first')}">
<p>Found 'first' in string<p>
</c:if>
Метод fn:contains() оценивает строку, чтобы проверить, содержит ли она заданную подстроку, например:
Функция fn:contains() принимает два Строковые аргументы; первый аргумент — исходная строка, а второй аргумент — подстрока. Он возвращает логическое значение в зависимости от результата оценки.
<c:if test = "${fn:containsIgnoreCase(string1, 'first')}">
<p>Found 'first' string<p>
</c:if>
<c:if test = "${fn:containsIgnoreCase(string1, 'FIRST')}">
<p>Found 'FIRST' string<p>
</c:if>
Функция fn:containsIgnoreCase() является нечувствительным к регистру вариантом метода fn:contains() и может использоваться следующим образом:
7.3. Функция fn:endsWith()
Функция fn:endsWith() оценивает строку, чтобы проверить, соответствует ли ее суффикс другой подстроке. Он принимает два аргумента; первый аргумент — это строка, суффикс которой должен быть проверен, а второй аргумент — это проверенный суффикс.
<c:if test = "${fn:endsWith(string1, 'string')}">
<p>String ends with 'string'<p>
</c:if>
Мы можем определить это так:
7.4. Функция fn:escapeXml()
<p>${fn:escapeXml(string1)}</p>
Функция fn:escapeXML() используется для экранирования XML-разметки во входной строке следующим образом:
7.5. Функция fn:indexOf()
Функция fn:indexOf() просматривает строку и возвращает индекс первого вхождения заданной подстроки.
Требуется два аргумента; первый — это исходная строка, а второй аргумент — это подстрока, которая соответствует и возвращает первое вхождение.
<p>Index: ${fn:indexOf(string1, "first")}</p>
Функция fn:indexOf() возвращает целое число и может использоваться следующим образом:
7.6. Функция fn:join()
<c:set var = "string3" value = "${fn:split(string1, ' ')}" />
<c:set var = "string4" value = "${fn:join(string3, '-')}" />
Функция fn:join() объединяет все элементы массива в одну строку и может использоваться следующим образом:
7.7. Функция fn:length()
Функция fn:length() возвращает количество элементов в данной коллекции или количество символов в заданной строке.
<p>Length: ${fn:length(string1)}</p>
Функция fn:length() принимает один объект, который может быть либо коллекцией, либо строкой, и возвращает целое число, подобное этому:
7.8. Функция fn:replace()
Функция fn:replace() заменяет все вхождения подстроки в строке другой строкой.
<c:set var = "string3" value = "${fn:replace(string1, 'first', 'third')}" />
Требуется три аргумента; исходная строка, подстрока для поиска в источнике и строка для замены всех вхождений подстроки, как здесь:
7.9. Функция fn:split()
<c:set var = "string3" value = "${fn:split(string1, ' ')}" />
Функция fn:split() выполняет операцию разделения строки с использованием указанного разделителя. Вот пример использования:
7.10. Функция fn:startsWith()
<c:if test = "${fn:startsWith(string1, 'This')}">
<p>String starts with 'This'</p>
</c:if>
Функция fn:startsWith() проверяет префикс строки и возвращает true, если он соответствует заданной подстроке, например:
7.11. Функция fn:substring()
<c:set var = "string3" value = "${fn:substring(string1, 5, 15)}" />
Функция fn:substring() создает подстроку из исходной строки с указанными начальным и конечным индексами. Мы бы использовали его так:
7.12. Функция fn:substringAfter()
«Функция fn:substringAfter() проверяет исходную строку на наличие заданной подстроки и возвращает строку сразу после первого вхождения указанной подстроки.
<c:set var = "string3" value = "${fn:substringAfter(string1, 'is')}" />
Мы бы использовали это так:
7.13. Функция fn:substringBefore()
Функция fn:substringBefore() проверяет исходную строку на наличие заданной подстроки и возвращает строку непосредственно перед первым вхождением указанной подстроки.
<c:set var = "string3" value = "${fn:substringBefore(string1, 'is')}" />
На нашей странице JSP это будет выглядеть так:
7.14. Функция fn:toLowerCase()
<c:set var = "string3" value = "${fn:toLowerCase(string1)}" />
Функция fn:to LowerCase() преобразует все символы строки в нижний регистр и может использоваться следующим образом:
7.15. Функция fn:toUpperCase()
<c:set var = "string3" value = "${fn:toUpperCase(string1)}" />
Функция fn:toUpperCase() преобразует все символы строки в верхний регистр:
7.16. Функция fn:trim()
<c:set var = "string1" value = "This is first String "/>
Функция fn:trim() удаляет предшествующие и конечные пробелы в строке:
9. Заключение
В этой обширной статье мы рассмотрели различные Теги JSTL и как их использовать.