JSTL (JSP Standard Tag Library)

В този урок за JSTL ще видим как използването на различни JSTL тагове ще направи JSP кодирането по-лесно.

В какво е JSTL Java?

JSTL стойки за Java сървърни страници стандартна библиотека с етикети и е колекция от персонализирани библиотеки с JSP етикети, които предоставят обща функционалност за уеб разработка. JSTL е стандартна библиотека с етикети на JSP.

Предимства на JSTL

По-долу са предимствата на JSTL:

  1. Стандартен етикет: Предоставя богат слой от преносима функционалност на JSP страници. Лесно е за разработчика да разбере кода.
  2. Код спретнат и чист: Тъй като скриптовете объркват програмиста, използването на JSTL прави кода чист и чист.
  3. автоматичен JavaПоддръжка на beansInterospection: Има предимство на JSTL пред JSP скриптлети. Дръжки на езика на JSTL Expression JavaBean код много лесно. Не е необходимо да намаляваме обектите, които са били извлечени като атрибути с обхват. Използването на код на JSP скриптове ще бъде сложно и JSTL опрости тази цел.
  4. По-лесно за четене от хората: JSTL е базиран на XML, който е много подобен на HTML. Следователно е лесно за разбиране от разработчиците.
  5. По-лесно за разбиране от компютри: Инструменти като Dreamweaver и заглавната страница генерират все повече и повече HTML код. HTML инструментите вършат чудесна работа при форматиране на HTML код. HTML кодът се смесва с кода на скрипта. Тъй като JSTL се изразява като тагове, съвместими с XML, е лесно за генериране на HTML да анализира JSTL кода в документа.

JSTL етикети

Основните тагове са най-често използваните тагове в JSP. Те осигуряват подкрепа за

  • Повторение
  • Условна логика
  • Хвани изключение
  • url напред
  • Пренасочване и т.н.

За да използваме основни тагове, първо трябва да дефинираме библиотека с тагове, а по-долу е синтаксисът за включване на библиотека с тагове.

Синтаксис :

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

Тук

  • prefix може да се използва за дефиниране на всички основни тагове и
  • uri е библиотеката на taglib, от която се импортира

Нека видим някои от основните тагове в детайли,

1. Навън

  • Резултатът от израза се показва в изходния таг
  • Той може директно да избягва XML таговете. Следователно те не се оценяват като действителни тагове

Синтаксис:

<c:out value="" default="" escapeXML="">
  • Тук стойността представлява информация към изхода и е задължителна
  • По подразбиране е невъзможност за извеждане на информация и не е задължително
  • escapeXML – Вярно е, ако екранира XML символи.

Пример:

Coretag_jsp1.jsp

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

</body>
</html>

Обяснение на кода:

Кодов ред 3: Този префикс на taglib е задължителен за всички тагове и добавеният префикс е 'c'. Следователно, той може да се използва като префикс за всички основни тагове.

Кодов ред 12: Тук използваме coretag out с префикса „c“ и този out ще отпечата стойността в изразния таг. Следователно изходът ще бъде име

Когато изпълните горния код, получавате следния изход:

Основни тагове на JSTL – Излезли

Изход:

  • Получаваме стойността като име от основния таг „out“, който ще се отпечата в изходния поток.

2. Хващайте се

  • Той улавя всяко хвърляно изключение, което се случва в тялото и се показва като изход.
  • Използва се за обработка на грешки и за тяхното улавяне.

Синтаксис:

<c:catchvar="">

Тук var представлява името на променливата, която ще съдържа хвърлящо се изключение.

Пример:

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

Обяснение на кода:

Кодов ред 3: Този префикс на taglib е необходим за всички тагове и добавеният префикс е „c“, следователно може да се използва като префикс за всички основни тагове

Кодов ред 11-13: Coretag catch се използва за улавяне на изключението и отпечатване на изключението. Тук изключението се повдига, когато 10/0 и това изключение има име „guruException“.

Кодов ред 14: Отпечатваме „guruException“.

Когато изпълните кода, ще получите следния изход:

Основни тагове на JSTL – уловка

Изход:

  • Получаваме аритметично изключение като /по нула и то се отпечатва в изхода с помощта на променлива „guruException“

3. Внос

  • Можем да импортираме друго съдържание на файл в JSP страница, както направихме в JSP включва действие.
  • Тук можем също да включим URL адрес и съдържанието ще се покаже на тази страница.

Синтаксис:

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

Тук var е име на променлива, което е идентификатор, който ще съдържа името на файла/uri. uri е относително име на файл или uriname.

coretag_jsp31.jsp

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

Coretag_jsp32.jsp

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

Обяснение на кода:

Coretag_jsp31.jsp

Кодов ред 3: Този префикс на taglib е необходим за всички тагове и добавеният префикс е „c“, следователно може да се използва като префикс за всички основни тагове

Кодов ред 11-12: Тук импортираме файла coretag_jsp32.jsp в този файл с помощта на етикет за импортиране

Кодов ред 13: Тук отпечатваме файла coretag_jsp32.jsp, използвайки out tag.

Когато изпълните горния код, получавате следния изход.

JSTL основни тагове – импортиране

Изход:

  • Coretag_jsp32 се отпечатва в изхода, тъй като този файл е импортиран в coretag_jsp31.jsp.

4. forEach

  • Използва се за повторение на броя елементи в поредица от изрази.
  • Същото е като a Java форлуп.

Синтаксис:

<c:forEach var="" begin=""  end="">
  • Тук var представлява име на променлива, което ще съдържа име на брояч
  • Begin представлява началната стойност на брояча
  • End ще представлява неговата крайна стойност

Пример:

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

Обяснение на кода:

Кодов ред 3: Този префикс на taglib е необходим за всички тагове и добавеният префикс е „c“, следователно може да се използва като префикс за всички основни тагове

Кодов ред 11-13: Тук използваме цикъл „forEach“, където името на променливата е „gurucount“, което е започнало да брои като 5 и завършва като 10. Отпечатваме променливата gurucount, която има числа, започващи от 5 до 10.

Когато изпълните кода, получавате следния изход

JSTL основни тагове - forEach

Изход:

  • Резултатът, който получаваме, започва от 5 до 10.

5. ако

  • Използва се за Тестване условия.
  • Ако маркерът се използва за тестване на условие дали е вярно или не въз основа на това, блокът от код ще бъде изпълнен.

Синтаксис:

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

Тук, ако условието е вярно, тогава се изпълняват серии от оператори.

Пример:

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

Обяснение на кода:

Кодов ред 3: Този префикс на taglib е необходим за всички тагове и добавеният префикс е „c“, следователно може да се използва като префикс за всички основни тагове

Кодов ред 11: Тук задаваме променливата, наречена count, на 100

Кодов ред 12-14: Тук използваме „условие ако“, където проверяваме дали броят е равен на 100. Той е равен на 100, тогава получаваме изхода като „Броят е 100“.

Когато изпълните горния код, получавате следния изход

JSTL основни тагове - Ако

Изход:

  • Тъй като условието „ако“ е вярно, получаваме изхода като „Броят е 100“.

6. пренасочвам

  • Използва се за пренасочване на текущата страница към друг URL адрес чрез предоставяне на относителния URL адрес на този маркер.
  • Той поддържа контекстни относителни URL адреси

Синтаксис:

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

Тук url ​​е относителен URL адрес, към който трябва да бъде пренасочен и контекстно име на локалното уеб приложение.

Пример:

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

Обяснение на кода:

Кодов ред 3: Този префикс на taglib е необходим за всички тагове и добавеният префикс е „c“, следователно може да се използва като префикс за всички основни тагове

Кодов ред 11: Тук използваме „таг за пренасочване“, където посочваме url името и когато щракнем върху тази страница, тя пренасочва към сайт, който е даден за пренасочване.

Когато изпълните горния код, получавате следния изход;

JSTL основни тагове – пренасочване

Изход:

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

Персонализирани етикети на JSTL

  • Това е дефинирано от потребителя JSP езиков елемент.
  • Когато JSP се транслира в сървлет, персонализираният етикет се преобразува в клас, който предприема действие върху обект и се извиква като манипулатор на тагове.
  • Тези действия, когато сървлетът се изпълнява, се извикват от уеб контейнера.
  • За да създадем персонализиран етикет, дефиниран от потребителя, трябва да създадем манипулатор на тагове, който ще разширява SimpleTagSupport и трябва да замени метода doTag().
  • Трябва да създадем TLD, където трябва да картографираме файла на класа в TLD.

Предимства на персонализирани тагове в JSP

Ето предимствата на персонализираните тагове в JSP:

  • Portable: Действие, описано в библиотека с етикети, трябва да може да се използва във всеки JSP контейнер.
  • Simple: Неопитните потребители трябва да могат да разберат и използват този механизъм. Доставчиците на JSP функционалност трябва да намерят лесно да я направят достъпна за потребителите като действия.
  • Експресивен: Механизмът трябва да поддържа широк набор от действия, включително вложени действия, скриптови елементи в телата на действие, създаване, използване и актуализиране на скриптови променливи.
  • Използва се от различни скриптови езици: Въпреки че JSP спецификацията в момента дефинира само семантиката за скриптове в Java език за програмиране, искаме да оставим отворена възможността за други скриптови езици.
  • Изграден върху съществуващи концепции и машини: Не искаме да преоткриваме това, което съществува другаде. Освен това искаме да избегнем бъдещи конфликти, когато можем да ги предвидим

Синтаксис:

Помислете, че създаваме таг testGuru и можем да използваме клас taghandlertestTag, който ще замени метода doTag().

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

Освен това ще трябва да картографираме този клас testTag в TLD (Библиотека с етикети Descriptили) като JSP контейнер автоматично ще създаде съпоставяне между класовия файл и uri, който е споменат в TLD файла.

JSP интерфейс за етикети

  • Този клас ще трябва да разшири класа SimpleTagSupport.
  • Този клас ще трябва да замени метода doTag(), който е част от класа SimpleTagSupport (замяната е метод, който е наследен от родителския клас).
  • Този интерфейс е под интерфейс на JSPTag интерфейс.
  • Той предоставя методи за изпълнение в началото и края на етикета.
  • Освен това трябва да картографираме този клас в TLD, т.е. дескриптор на библиотека с етикети

Разглеждаме в примера по-долу

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

  • doTag() е метод, който трябва да заменим и който ще има съдържанието на етикета.
  • Взема текущия JSP контекст с помощта на getJSPContext()

Пример:

Customtag_jsp1.jsp

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

Custom.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(TagHandler)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

Обяснение на кода:

guruTag.java(TagHandler)

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

Кодов ред 7: Тук заместваме метода doTag(), който хвърля JspException и IOException.

Кодов ред 9-10: При този метод кодът ще бъде вграден в потребителски етикет, който ще бъде извикан. Взимаме обект на JspWriter и това ще отпечата „Guru Tag“.

Custom.tld

Кодов ред 6: Тук името на персонализирания етикет е „guruTag“.

Кодов ред 7:Класът на етикета е taghandlerclass, т.е. guruTag.java. Заема пълния път на манипулиращия файл, който включва пътя на директорията на местоположението на файла.

Customtag_jsp1.jsp

Кодов ред 3: Този префикс на taglib е задължителен за всички тагове и добавеният префикс е „ex“, следователно може да се използва като префикс за всички основни тагове и uri е custom.tld, който картографира манипулатора на тагове.

Кодов ред 11: Тук дефинираме персонализирания етикет „guruTag“, който ще извика метода doTag() на класа на манипулатора и кодът в него ще бъде изпълнен.

Когато изпълните горния код, получавате следния изход

JSP интерфейс за етикети

Изход:

  • Получаваме изхода като „GuruTag“ от guruTag.java, т.е. TagHandler, който замества метода doTag() и който отпечатва „Guru Tag“ като изход.

Oбобщение

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