---
title: JSTL (JSP Standard Tag Library)
seo:
  title: JSTL (JSP Standard Tag Library) — Java Developer
  description: Тема «JSTL (JSP Standard Tag Library)» для собеседования Java Developer. Что такое JSTL (JSP Standard tag library)? Из каких групп тегов состоит библиотека JSTL?
---

[Все темы Java Developer](/java-developer)

## <strong>Что такое</strong> <code>JSTL</code> <strong>(JSP Standard tag library)?</strong> [#q-14bee738d69b81c2b3f7c3d56a875d5e]

<code>JSTL</code> <strong>(JSP Standard Tag Library)</strong> — это библиотека
стандартных тегов для <code>JSP</code>, которая предоставляет набор общих
функций для разработки веб-приложений. <code>JSTL</code> упрощает написание
<code>JSP</code>-страниц, сокращая количество скриплетов и улучшая читаемость и
поддержку кода.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::

---

## <strong>Из каких групп тегов состоит библиотека</strong> <code>JSTL</code><strong>?</strong> [#q-14bee738d69b81d7812fe1adf2d90129]

Библиотека <code>JSTL</code> (JSP Standard Tag Library) состоит из следующих групп тегов&#58;

{/* prettier-ignore */}
1. <strong>Core Tags (Основные теги)</strong>&#58; Управление потоком, циклы, условные операторы, управление переменными.

    - Примеры&#58; <code>&#60;c&#58;if&#62;</code>, <code>&#60;c&#58;forEach&#62;</code>, <code>&#60;c&#58;set&#62;</code>, <code>&#60;c&#58;choose&#62;</code>, <code>&#60;c&#58;when&#62;</code>, <code>&#60;c&#58;otherwise&#62;</code>

1. <strong>Formatting Tags (Теги форматирования)</strong>&#58; Форматирование чисел, дат, интернационализация.

    - Примеры&#58; <code>&#60;fmt&#58;formatNumber&#62;</code>, <code>&#60;fmt&#58;formatDate&#62;</code>, <code>&#60;fmt&#58;message&#62;</code>, <code>&#60;fmt&#58;setLocale&#62;</code>, <code>&#60;fmt&#58;bundle&#62;</code>

1. <strong>SQL Tags (SQL теги)</strong>&#58; Выполнение SQL-запросов и управление результатами.

    - Примеры&#58; <code>&#60;sql&#58;query&#62;</code>, <code>&#60;sql&#58;update&#62;</code>, <code>&#60;sql&#58;transaction&#62;</code>, <code>&#60;sql&#58;param&#62;</code>, <code>&#60;sql&#58;dateParam&#62;</code>

1. <strong>XML Tags (XML теги)</strong>&#58; Обработка и трансформация XML-документов.

    - Примеры&#58; <code>&#60;x&#58;parse&#62;</code>, <code>&#60;x&#58;out&#62;</code>, <code>&#60;x&#58;set&#62;</code>, <code>&#60;x&#58;if&#62;</code>, <code>&#60;x&#58;forEach&#62;</code>

1. <strong>Function Tags (Функциональные теги)</strong>&#58; Вспомогательные функции для работы со строками и коллекциями.

    - Примеры&#58; <code>&#36;&#123;fn&#58;contains&#40;&#41;&#125;</code>, <code>&#36;&#123;fn&#58;startsWith&#40;&#41;&#125;</code>, <code>&#36;&#123;fn&#58;endsWith&#40;&#41;&#125;</code>, <code>&#36;&#123;fn&#58;length&#40;&#41;&#125;</code>, <code>&#36;&#123;fn&#58;toUpperCase&#40;&#41;&#125;</code>

Эти группы тегов предоставляют мощные инструменты для обработки данных, логики отображения и форматирования на JSP-страницах, значительно упрощая разработку веб-приложений.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::

---

## <strong>Какая разница между</strong> <code>&#60;c&#58;set&#62;</code> <strong>и</strong> <code>jsp&#58;useBean</code><strong>?</strong> [#q-14bee738d69b819b90f9cf35cc6194bf]

Вот основные различия между <code>&#60;c&#58;set&#62;</code> и <code>&#60;jsp&#58;useBean&#62;</code>&#58;

{/* prettier-ignore */}
1. <strong>Назначение</strong>&#58;

    - <code>&#60;c&#58;set&#62;</code>&#58; Используется для задания значений переменных в области видимости (scope) <code>JSP</code> (например, page, request, session, application).

    - <code>&#60;jsp&#58;useBean&#62;</code>&#58; Используется для создания или поиска существующего JavaBean объекта и его инициализации.

1. <strong>Синтаксис и использование</strong>&#58;

    - <code>&#60;c&#58;set&#62;</code>&#58;

        ```xml
        <c:set var="variableName" value="value" scope="scope" />
        ```

        Пример&#58;

        ```xml
        <c:set var="username" value="JohnDoe" scope="session" />
        ```

    - <code>&#60;jsp&#58;useBean&#62;</code>&#58;

        ```xml
        <jsp:useBean id="beanId" class="com.example.BeanClass" scope="scope" />
        ```

        Пример&#58;

        ```xml
        <jsp:useBean id="user" class="com.example.User" scope="session" />
        <jsp:setProperty name="user" property="name" value="JohnDoe" />
        ```

1. <strong>Функциональность</strong>&#58;

    - <code>&#60;c&#58;set&#62;</code>&#58; Можно использовать для задания значений не только JavaBeans, но и обычных переменных, выражений EL (Expression Language) и т.д.

    - <code>&#60;jsp&#58;useBean&#62;</code>&#58; Специально предназначен для работы с JavaBeans, автоматически создает экземпляр объекта, если он не существует в указанной области видимости, или использует существующий.

1. <strong>Совместимость</strong>&#58;

    - <code>&#60;c&#58;set&#62;</code>&#58; Является частью <code>JSTL</code> и поддерживает работу с EL.

    - <code>&#60;jsp&#58;useBean&#62;</code>&#58; Является частью стандартных <code>JSP</code> тегов и не поддерживает прямую работу с EL.

В общем, <code>&#60;c&#58;set&#62;</code> более универсален и гибок для работы с переменными и выражениями EL, тогда как <code>&#60;jsp&#58;useBean&#62;</code> специально предназначен для работы с JavaBeans и обеспечивает автоматическое создание и инициализацию объектов.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::

---

## <strong>Что вы знаете о написании пользовательских</strong> <code>JSP</code> <strong>тегов?</strong> [#q-14bee738d69b8195a4aad71838b86414]

Пользовательские <code>JSP</code> теги позволяют расширить функциональность <code>JSP</code>, создавая повторно используемые компоненты. Основные шаги для создания пользовательских <code>JSP</code> тегов&#58;

{/* prettier-ignore */}
1. <strong>Создание класса тега</strong>&#58;

    - Реализуйте интерфейс <code>SimpleTag</code> или расширьте класс <code>SimpleTagSupport</code>.

    - Переопределите метод <code>doTag&#40;&#41;</code> для реализации логики тега.

    ```java
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    import java.io.IOException;

    public class HelloTag extends SimpleTagSupport {
        @Override
        public void doTag() throws IOException {
            getJspContext().getOut().write("Hello, custom tag!");
        }
    }
    ```

1. <strong>Создание TLD файла (Tag Library Descriptor)</strong>&#58;

    - Опишите пользовательский тег в файле с расширением <code>&#46;tld</code>.

    ```xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
            version="2.1">
        <tlib-version>1.0</tlib-version>
        <short-name>mytags</short-name>
        <uri>http://example.com/mytags</uri>

        <tag>
            <name>hello</name>
            <tag-class>com.example.HelloTag</tag-class>
            <body-content>empty</body-content>
        </tag>
    </taglib>
    ```

1. <strong>Использование пользовательского тега в JSP</strong>&#58;

    - Подключите TLD файл и используйте пользовательский тег.

    ```xml
    <%@ taglib uri="http://example.com/mytags" prefix="my" %>
    <html>
    <body>
        <my:hello />
    </body>
    </html>
    ```

Пользовательские <code>JSP</code> теги позволяют инкапсулировать логику и повторно использовать её в различных <code>JSP</code> страницах, улучшая читаемость и поддержку кода.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::

---

## <strong>Можно ли использовать</strong> <code>Javascript</code> <strong>на</strong> <code>JSP</code> <strong>странице?</strong> [#q-14bee738d69b81e7811ee2b10ba5436c]

Да, можно использовать <code>JavaScript</code> на <code>JSP</code> странице. <code>JSP</code> генерирует HTML, который отправляется клиенту, и в этом HTML можно включать <code>JavaScript</code> для выполнения на стороне клиента.

Пример использования <code>JavaScript</code> на <code>JSP</code> странице&#58;

```xml
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP with JavaScript</title>
    <script type="text/javascript">
        function showMessage() {
            alert("Hello, this is a JavaScript alert!");
        }
    </script>
</head>
<body>
    <h1>Welcome to my JSP page</h1>
    <button onclick="showMessage()">Click me</button>
</body>
</html>
```

В этом примере HTML и <code>JavaScript</code> объединены на <code>JSP</code> странице. Когда страница загружается в браузере клиента, <code>JavaScript</code> выполняется на стороне клиента. <code>JSP</code> используется для генерации динамического контента на сервере, который затем может быть обработан <code>JavaScriptом</code> на клиенте.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::

---

## <strong>Опишите общие практические принципы работы с</strong> <code>JSP</code> [#q-14bee738d69b81c2be61d3c95ec13bfa]

Общие практические принципы работы с <code>JSP</code>&#58;

1. <strong>Разделение логики и представления</strong>&#58; Логику приложения
   следует держать в сервлетах или бэкенд-коде, а <code>JSP</code> использовать
   только для представления данных.

1. <strong>Использование JSTL и EL</strong>&#58; Вместо Java-кода на
   <code>JSP</code> используйте <code>JSTL</code> (JSP Standard Tag Library) и
   <code>Expression Language</code> (EL) для повышения читаемости и поддержки
   кода.

1. <strong>Минимизация скриплетов</strong>&#58; Избегайте использования
   Java-кода (скриплетов) непосредственно в <code>JSP</code>, чтобы улучшить
   структуру и читаемость страницы.

1. <strong>Инкапсуляция повторяющегося кода</strong>&#58; Используйте
   пользовательские теги и теговые файлы для инкапсуляции и повторного
   использования кода.

1. <strong>Обработка ошибок</strong>&#58; Настройте страницы обработки ошибок
   через дескриптор развертывания (<code>web&#46;xml</code>) для улучшения
   пользовательского опыта и отладки.

1. <strong>Кэширование и оптимизация</strong>&#58; Используйте подходящие
   механизмы кэширования для часто запрашиваемых данных и оптимизируйте
   производительность страницы.

1. <strong>Безопасность</strong>&#58; Валидация входных данных и защита от атак,
   таких как <code>XSS</code> и <code>CSRF</code>.

1. <strong>Чистота и комментарии</strong>&#58; Держите код чистым и добавляйте
   комментарии для улучшения поддержки и понимания кода.

1. <strong>Управление сессиями</strong>&#58; Используйте механизмы управления
   сессиями для отслеживания состояния пользователя между запросами.

:::note[Ссылки для изучения]

1. [JSTL в Java](https://metanit.com/java/javaee/3.11.php)
   :::
