JSTL (JSP Standard Tag Library)
В този урок за JSTL ще видим как използването на различни JSTL тагове ще направи JSP кодирането по-лесно.
В какво е JSTL Java?
JSTL стойки за Java сървърни страници стандартна библиотека с етикети и е колекция от персонализирани библиотеки с JSP етикети, които предоставят обща функционалност за уеб разработка. JSTL е стандартна библиотека с етикети на JSP.
Предимства на JSTL
По-долу са предимствата на JSTL:
- Стандартен етикет: Предоставя богат слой от преносима функционалност на JSP страници. Лесно е за разработчика да разбере кода.
- Код спретнат и чист: Тъй като скриптовете объркват програмиста, използването на JSTL прави кода чист и чист.
- автоматичен JavaПоддръжка на beansInterospection: Има предимство на JSTL пред JSP скриптлети. Дръжки на езика на JSTL Expression JavaBean код много лесно. Не е необходимо да намаляваме обектите, които са били извлечени като атрибути с обхват. Използването на код на JSP скриптове ще бъде сложно и JSTL опрости тази цел.
- По-лесно за четене от хората: JSTL е базиран на XML, който е много подобен на HTML. Следователно е лесно за разбиране от разработчиците.
- По-лесно за разбиране от компютри: Инструменти като 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 ще отпечата стойността в изразния таг. Следователно изходът ще бъде име
Когато изпълните горния код, получавате следния изход:
Изход:
- Получаваме стойността като име от основния таг „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“.
Когато изпълните кода, ще получите следния изход:
Изход:
- Получаваме аритметично изключение като /по нула и то се отпечатва в изхода с помощта на променлива „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.
Когато изпълните горния код, получавате следния изход.
Изход:
- 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.
Когато изпълните кода, получавате следния изход
Изход:
- Резултатът, който получаваме, започва от 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“.
Когато изпълните горния код, получавате следния изход
Изход:
- Тъй като условието „ако“ е вярно, получаваме изхода като „Броят е 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 името и когато щракнем върху тази страница, тя пренасочва към сайт, който е даден за пренасочване.
Когато изпълните горния код, получавате следния изход;
Изход:
- Получаваме изходния 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() на класа на манипулатора и кодът в него ще бъде изпълнен.
Когато изпълните горния код, получавате следния изход
Изход:
- Получаваме изхода като „GuruTag“ от guruTag.java, т.е. TagHandler, който замества метода doTag() и който отпечатва „Guru Tag“ като изход.
Oбобщение
- В този раздел научихме за JSP стандартната библиотека с тагове, в която направихме основни тагове и персонализирани тагове.
- Основните тагове включват тагове for, if, redirect, import, catch, които са били тагове, използвани за основни цели в JSP.
- Освен това направихме персонализирани тагове, в които можем да дефинираме таговете и да ги използваме в JSP