JSTL (стандартная библиотека тегов JSP) - это стандартная библиотека тегов на основе JSP, которая предлагает теги для управления потоком на странице JSP, средства форматирования даты / числа и интернационализации, а также несколько служебных функций EL.

JSTL (стандартная библиотека тегов JSP) - это стандартная библиотека тегов на основе JSP, которая предлагает<c:xxx>теги для управления потоком на странице JSP,<fmt:xxx>теги для форматирования даты / чисел и средств интернационализации, а также несколько${fn:xxx()} служебные функции EL.

Обратите внимание, что JSTL также предлагает библиотеки тегов SQL и XML, которые позволяют декларативно выполнять запросы SQL и анализировать XML внутри страницы JSP. Однако это не рекомендуется для других целей, кроме быстрого прототипирования. В реальном мире обе задачи должны выполняться реальными классами Java, которые (не) напрямую контролируются / делегируются сервлетом.

JSTL является частью Java EE API и включен в серверы приложений Java EE, такие как WildFly, TomEE, GlassFish, но не в базовые контейнеры сервлетов, такие как Tomcat и Jetty. JSTL - это библиотеки тегов, которые вы импортируете изhttp://java.sun.com/jsp/jstl/*пространство имен. JSTL не следует путать с " пользовательской библиотекой тегов JSP " (в которой вы определяете.tldподайте сами). JSTL также не следует путать с библиотеками тегов сторонних фреймворков, таких как JSF, Spring MVC, Struts, Displaytag и т. Д. JSTL также не следует путать с языком выражений (EL) (это те${} вещи).

Установка JSTL

На самом деле это довольно просто:

  1. Только если ваш servletcontainer не поставляется со встроенным JSTL (например, Tomcat и Jetty), просто поместите jstl-1.2.jar прямо в webapp./WEB-INF/libпапка (которая находится в пути к классам веб-приложения по умолчанию, поэтому в немного умной IDE вам не нужно ничего делать). Для начала, не возитесь с настройкой пути сборки проекта IDE. Это не верно.

    Если вы используете Maven, это координата:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    

    Наблюдение: это, кстати, JSTL API, связанный с реализацией JSTL Apache в едином JAR-формате. Это не требуетstandard.jar(только для JSTL 1.1). Обратите внимание, что есть также jstl:jstl зависимости, но это точно такой же файл, только с неправильным идентификатором группы. Кроме того, есть также javax.servlet.jsp.jstl:jstl зависимость, но она пуста.

  2. Объявите taglib в файле JSP с правильным URI TLD. Вы можете найти здесь документацию TLD, которая относится как к JSTL 1.1 и JSTL 1.2. Щелкните интересующий тег, чтобы получить примеры объявлений. Например, основная библиотека тегов JSTL

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    Если вы используете Facelets или JSPX вместо JSP, его следует объявить как пространство имен XML.

    <anyxmlelement xmlns:c="http://java.sun.com/jsp/jstl/core">
    

Вам нужно только убедиться, что у вас нет дубликатов старых версий JSTL в пути к классам (включая JDK/JRE /lib и сервера /lib), чтобы избежать столкновений. Если у вас есть полный контроль над сервером на уровне администратора, вы также можете поместить файл JAR в серверную/lib вместо веб-приложения /WEB-INF/libчтобы они применялись ко всем развернутым веб-приложениям. По крайней мере, НЕ извлекайте файлы JAR и не загромождайте путь к классам их содержимым (свободными файлами TLD) и / или не объявляйте библиотеки тегов в своем веб-приложении.web.xml как предлагают некоторые плохие онлайн-руководства.

История версий JSTL и URI taglib

JSTL был доступен в разных версиях:

  • 1.0: Изобретено Apache/Jakarta. Состоит из двух файлов JARjstl.jar (API) и standard.jar(имп). Taglib URI не имеет/jsp в пути как http://java.sun.com/jstl/core а версия прототипа имеет имя библиотеки с суффиксом _rt нравиться http://java.sun.com/jstl/core_rt. Пришел вместе с сервлетом 2.3 / JSP 1.2 и требует как минимум.

  • 1.1: Интегрирован как часть J2EE 1.4. EL был перемещен с JSTL на JSP. Taglib URI включает/jsp на пути как http://java.sun.com/jsp/jstl/core. Пришел вместе и требует как минимум Servlet 2.4 / JSP 2.0.

  • 1.2.x: интегрирован как часть Java EE 5 и новее. Taglib URI не изменился и по-прежнему похож наhttp://java.sun.com/jsp/jstl/core. Пришел вместе с Servlet 2.5 / JSP 2.1, но работает и с Servlet 2.4 / JSP 2.0.

  • Facelets: Facelets, преемник JSP, имеет среди предоставленных библиотек тегов выбранное подмножество ядра JSTL 1.2 и полный набор встроенных функций JSTL 1.2. Для этого требуется как минимум JSTL 1.2. Для Facelets 1.x URI пространства имен XML:http://java.sun.com/jstl/core а для Facelets 2.x URI пространства имен XML - http://java.sun.com/jsp/jstl/core с (сбивает с толку!) /jspчасть и начиная с Facelets 2.2 и далее URI пространства именhttp://xmlns.jcp.org/jsp/jstl/core.

Помогите! Язык выражения (EL, те${} вещи) не работает в моих тегах JSTL!

Заявленная версия сервлета в web.xmlочень важно, чтобы JSTL и EL работали правильно. Вам необходимо убедиться, что вы используете контейнер сервлетов, который поддерживает минимально необходимую версию сервлета для версии JSTL. Например, Apache Tomcat 6.0 представляет собой контейнер Servlet 2.5. Затем вы должны объявить свойweb.xml соответствуют спецификации Servlet 2.5, это работает как для JSTL 1.1, так и для 1.2:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    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-app_2_5.xsd"
    version="2.5">

    <!-- Config here. -->

</web-app>

Однако если вы используете контейнер Servlet 2.4, например, Apache Tomcat 5.5, тогда web.xml должен быть объявлен соответствующим спецификации Servlet 2.4.

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- Config here. -->

</web-app>

И если вы используете контейнер Servlet 2.3 (например, Apache Tomcat 4.1), тогда web.xml должен быть заявлен как соответствующий спецификации Servlet 2.3.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

<web-app>

    <!-- Config here. -->

</web-app>

Объяснение предыстории: EL изначально был частью JSTL 1.0, но в JSTL 1.1 / JSP 2.0 он был перемещен с JSTL на JSP. Так что, если вы запустите JSTL 1.1 на JSP 1.2 / Servlet 2.3, он вообще не сработает. Обратите внимание, что при развертывании веб-приложения с совместимым с сервлетом 2.3web.xmlв контейнер, совместимый с Servlet 2.4/2.5/3.0, то он все равно будет работать в режиме "отката", соответствующий версии, указанной вweb.xml!

Интернет-ресурсы

Часто задаваемые вопросы

Информационные страницы связанных тегов