Учебники

11) Библиотека тегов JSP

JSTL — это стандартная библиотека тегов JSP. Здесь мы увидим, как использование различных тегов JSTL облегчит кодирование JSP.

В этом уроке вы узнаете

Что такое JSTL?

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

Преимущества JSTL

  1. Стандартный тег : он обеспечивает богатый уровень переносимых функций страниц JSP. Разработчику легко понять код.
  2. Чистый и чистый код : поскольку скрипты сбивают с толку разработчика, использование JSTL делает код чистым и чистым.
  3. Автоматическая поддержка JavabeansInterospection : JSTL имеет преимущество перед JSP-скриптлетами. Язык выражений JSTL очень легко обрабатывает код JavaBean. Нам не нужно понижать объекты, которые были получены как атрибуты области видимости. Использование кода сценариев JSP будет сложным, и JSTL упростил эту задачу.
  4. Людям легче читать : JSTL основан на XML, который очень похож на HTML. Следовательно, разработчикам легко понять.
  5. Компьютерам легче понять : такие инструменты, как Dreamweaver и первая страница, генерируют все больше и больше HTML-кода. Инструменты HTML отлично справляются с форматированием кода HTML. HTML-код смешивается с кодом скрипта. Поскольку JSTL выражается в виде XML-совместимых тегов, для генерации HTML легко выполнить анализ кода JSTL в документе.

JSTL Core

Основные теги — это наиболее часто используемые теги в JSP. Они обеспечивают поддержку

  • итерация
  • Условная логика
  • Поймать исключение
  • URL вперед
  • Перенаправление и т. Д.

Чтобы использовать основные теги, сначала нужно определить библиотеку тегов, а ниже приведен синтаксис для включения библиотеки тегов.

Синтаксис:

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

Вот,

  • Префикс может быть использован для определения всех основных тегов и
  • uri — это библиотека taglib, из которой она импортируется

Давайте рассмотрим некоторые основные теги подробно,

1. Out:

  • Результат выражения отображается в теге out
  • Он может напрямую экранировать теги XML. Следовательно, они не оцениваются как фактические теги

Синтаксис:

<c:out value="" default="" escapeXML="">
  • Здесь значение представляет информацию для вывода, и это обязательно
  • По умолчанию происходит сбой вывода информации, и это не обязательно
  • escapeXML — это правда, если он экранирует символы XML.

Пример:

Coretag_jsp1.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Core Tag JSP1</title>
  8. </head>
  9. <body>
  10.  
  11. </body>
  12. </html>

Пояснение к коду:

Строка кода 3: этот префикс taglib требуется для всех тегов, а префикс добавлен как ‘c’. Следовательно, он может использоваться в качестве префикса для всех тегов ядра.

Строка кода 12: Здесь мы используем coretag out с префиксом «c», и это распечатает значение в теге expression. Следовательно, вывод будет именем

Когда вы выполните приведенный выше код, вы получите следующий вывод:

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Вывод:

  • Мы получаем значение как имя из основного тега «out», который будет печататься в выходном потоке.

2. Поймать

  • Он перехватывает любое исключение, которое может быть сгенерировано в теле, и показывается как вывод.
  • Он используется для обработки ошибок и их обнаружения.

Синтаксис:

<c:catchvar="">

Здесь var представляет имя переменной, которая будет содержать исключение с возможностью выброса.

Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Core Tag JSP2</title>
  9. </head>
  10. <body>
  11. <c:catch var="guruException">
  12. <% int num = 10/0; %>
  13. </c:catch>
  14. The Exception is : ${guruException}
  15. </body>
  16. </html>

Пояснение к коду:

Строка кода 3: Этот префикс taglib требуется для всех тегов, а добавленный префикс — «c», поэтому его можно использовать в качестве префикса для всех тегов ядра

Строка кода 11-13: перехват Coretag используется для перехвата исключения и его вывода. Здесь исключение возникает, когда 10/0, и это исключение имеет имя «guruException».

Строка кода 14: мы печатаем «guruException».

Когда вы выполните код, вы получите следующий вывод:

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Вывод:

  • Мы получаем арифметическое исключение как / ноль, и оно выводится в выводе с использованием переменной «guruException»

3. Импорт

  • Мы можем импортировать другое содержимое файла на страницу JSP, как мы это делали в JSP include action.
  • Здесь мы также можем включить URL и содержимое будет отображаться на этой странице.

Синтаксис:

<c:importvar="" uri="">

Здесь var — это имя переменной, которая является идентификатором, который будет содержать имя файла / uri.

URI — это относительное имя файла или имя.

coretag_jsp31.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Core Tag JSP 31</title>
  9. </head>
  10. <body>
  11. <c:import var="displayfile" url="coretag_jsp32.jsp">
  12. </c:import>
  13. <c:out value="${displayfile}"/>
  14. </body>
  15. </html>

Coretag_jsp32.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <a>The file is diplayed after importing</a>
  11. </body>
  12. </html>

Пояснение к коду:

Coretag_jsp31.jsp

Строка кода 3: Этот префикс taglib требуется для всех тегов, а добавленный префикс — «c», поэтому его можно использовать в качестве префикса для всех тегов ядра

Code Line 11-12: Here we are importing coretag_jsp32.jsp file into this file using import tag

Code Line13: Here we are printing the file coretag_jsp32.jsp using out tag.

When you execute the above code, you get the following output.

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Output:

  • Coretag_jsp32 is printed in the output as this file was imported in coretag_jsp31.jsp.

4. forEach

  • It is used to iterate the number of elements in series of statements.
  • It is same as a Java forloop.

Syntax:

<c:forEach var="" begin=""  end="">
  • Here var represents variable name which will hold counter name
  • Begin represents counter begin value
  • End will represent its end value

Example:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Core Tag JSP4</title>
  9. </head>
  10. <body>
  11. <c:forEach var="gurucount" begin="5" end="10">
  12. <c:out value="${gurucount}"/>
  13. </c:forEach>
  14. </body>
  15. </html>

Explanation of the code:

Code Line 3: This taglib prefix is required for all tags and prefix added is ‘c’ hence it can be used as a prefix for all coretags

Code Line 11-13: Here we use «forEach» loop where the variable name is «gurucount», which has begun count as 5 and end count as 10.We are printing the variable gurucount which has numbers starting from 5 to 10.

When you execute the code, you get the following output

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Output:

  • The output we are getting is starting from 5 to 10.

5. If

  • It is used for Testing conditions.
  • If the tag is used to test a condition whether it is true or not based on this, the block of code would be executed.

Syntax:

<c:if test="${condition}></c:if>

Here if the condition is true then series of statements are executed.

Example:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Core Tag JSP5</title>
  9. </head>
  10. <body>
  11. <c:set var="count" value="100"/>
  12. <c:if test="${count == 100}">
  13. <c:out value="The count is 100"/>
  14. </c:if>
  15. </body>
  16. </html>

Explanation of the code:

Строка кода 3: Этот префикс taglib требуется для всех тегов, а добавленный префикс — «c», поэтому его можно использовать в качестве префикса для всех тегов ядра

Строка кода 11: Здесь мы устанавливаем переменную с именем count в 100

Строка кода 12-14: здесь мы используем «условие условия», где мы проверяем, равно ли число 100. Это равно 100, тогда мы получаем вывод как «Количество равно 100».

Когда вы выполните приведенный выше код, вы получите следующий вывод

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Вывод:

  • Поскольку условие «если» истинно, мы получаем вывод как «Количество равно 100».

6. перенаправить:

  • Он используется для перенаправления текущей страницы на другой URL-адрес, предоставляя относительный URL-адрес этого тега.
  • Поддерживает контекстно-относительные URL

Синтаксис:

<c:redirect url="" context=""/>

Здесь url — это относительный URL, на который он должен быть перенаправлен, и контекстное имя локального веб-приложения.

Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Core Tag JSP6</title>
  9. </head>
  10. <body>
  11. <c:redirect url="/"/>
  12. </body>
  13. </html>

Пояснение к коду:

Строка кода 3: Этот префикс taglib требуется для всех тегов, а добавленный префикс — «c», поэтому его можно использовать в качестве префикса для всех тегов ядра

Строка кода 11: здесь мы используем «тег перенаправления», где мы указываем имя URL, и когда мы нажимаем на эту страницу, он перенаправляет на сайт, который был предоставлен для перенаправления.

Когда вы выполните приведенный выше код, вы получите следующий вывод;

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Вывод:

  • Мы получаем выходной URL-адрес guru99.com, который перенаправляется coretag_jsp6.jsp

Пользовательские теги JSP

  • Это пользовательский элемент языка JSP.
  • Когда JSP преобразуется в сервлет, пользовательский тег преобразуется в класс, который выполняет действие с объектом и называется обработчиком тега.
  • Те действия, когда сервлет выполняется, вызываются веб-контейнером.
  • Чтобы создать пользовательский пользовательский тег, нам нужно создать обработчик тега, который будет расширять SimpleTagSupport и переопределять метод doTag ().
  • Нам нужно создать TLD, где нам нужно отобразить файл класса в TLD.

Преимущества пользовательских тегов в JSP:

  • Portable — действие, описанное в библиотеке тегов, должно использоваться в любом контейнере JSP.
  • Простота — неискушенные пользователи должны быть в состоянии понять и использовать этот механизм. Вендоры функциональности JSP должны легко сделать его доступным пользователям в качестве действий.
  • Выразительный — Механизм должен поддерживать широкий спектр действий, включая заданные действия, элементы сценариев внутри тел действий, создание, использование и обновление переменных сценариев.
  • Используется из разных языков сценариев. Хотя спецификация JSP в настоящее время определяет только семантику сценариев на языке программирования Java, мы хотим оставить открытой возможность использования других языков сценариев.
  • Основанный на существующих концепциях и механизмах — мы не хотим изобретать whatexists в другом месте. Кроме того, мы хотим избежать будущих конфликтов всякий раз, когда можем их предсказать

Синтаксис:

Предположим, мы создаем тег testGuru и можем использовать классtaghandlertestTag, который переопределит метод doTag ().

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

Кроме того, нам потребуется отобразить этот класс testTag в TLD (дескриптор библиотеки тегов), поскольку контейнер JSP автоматически создаст отображение между файлом класса и uri, которое было упомянуто в файле TLD.

Интерфейс JSP Tag

  • Этот класс должен будет расширить класс SimpleTagSupport.
  • Этот класс должен будет переопределить метод doTag (), который является частью класса SimpleTagSupport (переопределение — это метод, который наследуется от родительского класса).
  • Этот интерфейс является подчиненным интерфейсом интерфейса JSPTag.
  • Он предоставляет методы для выполнения в начале и конце тега.
  • Кроме того, нам нужно отобразить этот класс в TLD, т.е. дескриптор библиотеки тегов.

Мы рассматриваем в примере ниже

Метод интерфейса тегов

  • doTag () — это метод, который нам нужно переопределить, который будет иметь содержимое для тега.
  • Он принимает текущий JSP-контекст, используя getJSPContext ()

Пример:

Customtag_jsp1.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>Custom Tag</title>
  9. </head>
  10. <body>
  11. <ex:guruTag/>
  12. </body>
  13. </html>

Custom.tld

  1. <taglib>
  2. <tlib-version>1.0</tlib-version>
  3. <jsp-version>2.0</jsp-version>
  4. <short-name>Test TLD</short-name>
  5. <tag>
  6. <name>guruTag</name>
  7. <tag-class>demotest.guruTag</tag-class>
  8. <body-content>empty</body-content>
  9. </tag>
  10. </taglib>

guruTag.java (TagHandler)

  1. package demotest;
  2. import javax.servlet.jsp.tagext.*;
  3. import javax.servlet.jsp.*;
  4. import java.io.*;
  5.  
  6. public class guruTag extends SimpleTagSupport{
  7. public void doTag() throws JspException,IOException
  8. {
  9. JspWriter out = getJspContext().getOut();
  10. out.println("Guru Tag");
  11. }
  12.  
  13. }

Пояснение к коду:

guruTag.java (TagHandler)

Строка кода 6: класс guruTag расширяет класс SimpleTagSupport, который присутствует в javax.servlet.JSP jar

Строка кода 7: здесь мы переопределяем метод doTag (), который выбрасывает JspException и IOException.

Строка кода 9-10: в этом методе код будет встроен в пользовательский тег, который будет вызываться. Мы берем объект JspWriter, и на нем будет напечатано «Guru Tag».

Custom.tld

Строка кода 6: здесь имя пользовательского тега — «guruTag».

Строка кода 7: класс тегов является тэг-обработчиком класса, то есть guruTag.java. Он принимает полный путь к файлу обработчика, который включает в себя путь к каталогу местоположения файла.

Customtag_jsp1.jsp

Строка кода 3 : Этот префикс taglib требуется для всех тегов, а добавленный префикс — «ex», поэтому его можно использовать в качестве префикса для всех тегов ядра, а uri — custom.tld, который отображает обработчик тега.

Строка кода 11: Здесь мы определяем пользовательский тег «guruTag», который будет вызывать метод класса обработчика doTag (), и код внутри него будет выполняться.

Когда вы выполните приведенный выше код, вы получите следующий вывод

Библиотека тегов JSP - JSTL Core и пользовательские теги JSP

Вывод:

  • Мы получаем вывод как «GuruTag» из guruTag.java, т.е. TagHandler, который переопределяет метод doTag () и который выводит «Guru Tag» в качестве вывода.

Резюме:

  • В этом разделе мы узнали о стандартной библиотеке тегов JSP, в которой мы делали основные теги и пользовательские теги.
  • Основные теги включают теги if, redirect, import, catch, которые были тегами, использованными для основных целей в JSP.
  • Кроме того, мы сделали пользовательские теги, в которых мы можем определить теги и использовать их в JSP