JSTL (JSP Standaard Tag Bibliotheek)
In deze JSTL-tutorial zullen we zien hoe het gebruik van verschillende JSTL-tags JSP-codering eenvoudiger maakt.
Wat is JSTL in Java?
JSTL staat voor Java standaard tagbibliotheek op serverpagina's, en het is een verzameling aangepaste JSP-tagbibliotheken die algemene webontwikkelingsfunctionaliteit bieden. JSTL is een standaard tagbibliotheek van de JSP.
Voordelen van JSTL
Hieronder staan de voordelen van JSTL:
- Standaard label: Het biedt een rijke laag van de draagbare functionaliteit van JSP-pagina's. Het is voor een ontwikkelaar gemakkelijk om de code te begrijpen.
- Code netjes en schoon: Omdat scriplets de ontwikkelaar in verwarring brengen, maakt het gebruik van JSTL de code netjes en schoon.
- Automatisch JavabonenInterospectie Ondersteuning: Het heeft het voordeel van JSTL ten opzichte van JSP-scriptlets. JSTL-expressietaalhandvatten JavaBean-code heel eenvoudig. We hoeven de objecten, die zijn opgehaald als scoped-attributen, niet te downcasten. Het gebruik van JSP-scriptletscode zal ingewikkeld zijn, en JSTL heeft dat doel vereenvoudigd.
- Gemakkelijker voor mensen om te lezen:JSTL is gebaseerd op XML, wat erg lijkt op HTML. Daarom is het voor de ontwikkelaars gemakkelijk te begrijpen.
- Gemakkelijker te begrijpen voor computers: Gereedschappen zoals Dreamweaver en de voorpagina genereren steeds meer HTML-code. HTML-tools kunnen uitstekend HTML-code opmaken. De HTML-code wordt gemengd met de scripletcode. Omdat JSTL wordt uitgedrukt als XML-compatibele tags, is het voor HTML-generatie eenvoudig om de JSTL-code in het document te parseren.
JSTL-tags
De kerntags zijn de meest gebruikte tags in JSP. Zij bieden ondersteuning voor
- herhaling
- Voorwaardelijke logica
- Vang uitzondering
- url naar voren
- Omleiden, enz.
Om kerntags te gebruiken moeten we eerst de tagbibliotheek definiëren en hieronder vindt u de syntaxis om een tagbibliotheek op te nemen.
Syntaxis :
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Hier
- prefix kan worden gebruikt om alle kerntags te definiëren en
- uri is de bibliotheek van taglib waaruit het wordt geïmporteerd
Laten we enkele van de kerntags in detail bekijken,
1. Uit
- Het resultaat van de expressie wordt weergegeven in de out-tag
- Het kan direct aan de XML-tags ontsnappen. Daarom worden ze niet geëvalueerd als daadwerkelijke tags
Syntax:
<c:out value="" default="" escapeXML="">
- Hier vertegenwoordigt waarde informatie voor de uitvoer, en dit is verplicht
- Standaard is het niet uitvoeren van informatie, en dit is niet verplicht
- escapeXML – Dit is waar als het XML-tekens ontsnapt.
Voorbeeld:
Kerntag_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>
Uitleg van de code:
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags.
Coderegel 12: Hier gebruiken we coretag out met het voorvoegsel “c” en deze out zal de waarde in de expressietag afdrukken. De uitvoer zal dus naam zijn
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer:
Output:
- We krijgen de waarde als naam van de kerntag 'out' die in de uitvoerstroom wordt afgedrukt.
2. Vang
- Het vangt elke werpbare uitzondering op die in het lichaam voorkomt en wordt als uitvoer weergegeven.
- Het wordt gebruikt voor het afhandelen van de fouten en het opvangen ervan.
Syntax:
<c:catchvar="">
Hier vertegenwoordigt var de naam van de variabele, die een werpbare uitzondering bevat.
Voorbeeld:
<%@ 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>
Uitleg van de code:
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags
Coderegel 11-13: Coretag catch wordt gebruikt om de uitzondering op te vangen en af te drukken. Hier wordt de uitzondering gegenereerd wanneer 10/0 en die uitzondering de naam “guruException” heeft.
Coderegel 14: We drukken de “guruException” af.
Wanneer u de code uitvoert, krijgt u de volgende uitvoer:
Output:
- We krijgen een rekenkundige uitzondering als /by zero, en deze wordt in de uitvoer afgedrukt met de variabele "guruException"
3. Importeren
- We kunnen de inhoud van een ander bestand importeren in een JSP-pagina zoals we deden in JSP omvat actie.
- Hier kunnen we ook de URL invoeren en de inhoud wordt dan op die pagina weergegeven.
Syntax:
<c:importvar="" uri="">
Hier is var een variabelenaam die een identificatie is, die de bestandsnaam/uri bevat. uri is de relatieve bestandsnaam of uriname.
kerntag_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>
Kerntag_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>
Uitleg van de code:
Kerntag_jsp31.jsp
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags
Coderegel 11-12: Hier importeren we het coretag_jsp32.jsp-bestand in dit bestand met behulp van de importtag
Coderegel 13: Hier drukken we het bestand coretag_jsp32.jsp af met behulp van onze tag.
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer.
Output:
- Coretag_jsp32 wordt afgedrukt in de uitvoer omdat dit bestand werd geïmporteerd in coretag_jsp31.jsp.
4. voorElk
- Het wordt gebruikt om het aantal elementen in reeksen uitspraken te herhalen.
- Het is hetzelfde als een Java forloop.
Syntax:
<c:forEach var="" begin="" end="">
- Hier vertegenwoordigt var de variabelenaam die de tellernaam bevat
- Begin vertegenwoordigt de tellerbeginwaarde
- End vertegenwoordigt de eindwaarde
Voorbeeld:
<%@ 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>
Uitleg van de code:
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags
Coderegel 11-13: Hier gebruiken we de "forEach"-lus waarbij de variabelenaam "gurucount" is, die begon met tellen als 5 en eindigde met tellen als 10. We printen de variabele gurucount die getallen heeft die beginnen van 5 tot 10.
Wanneer u de code uitvoert, krijgt u de volgende uitvoer
Output:
- De uitvoer die we krijgen begint van 5 tot 10.
5. Als
- Je gebruikt het voor Testen voorwaarden.
- Als de tag wordt gebruikt om op basis hiervan te testen of een voorwaarde waar is of niet, wordt het codeblok uitgevoerd.
Syntax:
<c:if test="${condition}></c:if>
Als de voorwaarde waar is, worden hier reeksen instructies uitgevoerd.
Voorbeeld:
<%@ 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>
Uitleg van de code:
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags
Coderegel 11: Hier stellen we de variabele met de naam count in op 100
Coderegel 12-14: Hier gebruiken we de "if condition" waarbij we controleren of de telling gelijk is aan 100. Is deze gelijk aan 100, dan krijgen we de uitvoer als "De telling is 100."
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer
Output:
- Omdat de “if”-voorwaarde waar is, krijgen we de uitvoer als “The count is 100”.
6. omleiding
- Het wordt gebruikt om de huidige pagina om te leiden naar een andere URL door de relatieve URL van deze tag op te geven.
- Het ondersteunt context-relatieve URL's
Syntax:
<c:redirect url="" context=""/>
Hier is de URL de relatieve URL waarnaar deze moet worden doorverwezen en de contextnaam van de lokale webapplicatie.
Voorbeeld:
<%@ 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>
Uitleg van de code:
Coderegel 3: Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'c'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags
Coderegel 11: Hier gebruiken we de “redirect tag”, waarbij we de URL-naam specificeren, en wanneer we op die pagina klikken, wordt deze omgeleid naar de site die is opgegeven voor omleiding.
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer:
Output:
- We krijgen de uitvoer-URL van guru99.com die wordt omgeleid door coretag_jsp6.jsp
Aangepaste JSTL-tags
- Het is een door de gebruiker gedefinieerde JSP taalelement.
- Wanneer JSP wordt vertaald naar een servlet, wordt de aangepaste tag omgezet in een klasse die actie onderneemt op een object en wordt aangeroepen als taghandler.
- Deze acties wanneer de servlet wordt uitgevoerd, worden aangeroepen door de webcontainer.
- Om de door de gebruiker gedefinieerde aangepaste tag te maken, moeten we de taghandler maken die de SimpleTagSupport uitbreidt en de doTag() -methode moet overschrijven.
- We moeten TLD maken waarbij we het klassenbestand in TLD moeten toewijzen.
Voordelen van aangepaste tags in JSP
Dit zijn de voordelen van aangepaste tags in JSP:
- draagbaar: Een actie die in een tagbibliotheek wordt beschreven, moet in elke JSP-container kunnen worden gebruikt.
- Eenvoudig: Onervaren gebruikers moeten dit mechanisme kunnen begrijpen en gebruiken. Leveranciers van JSP-functionaliteit moeten het makkelijk vinden om het beschikbaar te maken voor gebruikers als acties.
- Expressief: Het mechanisme moet een breed scala aan acties ondersteunen, waaronder geneste acties, scriptelementen binnen actielichamen, het aanmaken, gebruiken en bijwerken van scriptvariabelen.
- Bruikbaar vanuit verschillende scripttalen: Hoewel de JSP-specificatie momenteel alleen de semantiek voor scripts in de Java programmeertaal willen we de mogelijkheid van andere scripttalen openlaten.
- Gebaseerd op bestaande concepten en machines: We willen niet opnieuw uitvinden wat elders bestaat. Ook willen we toekomstige conflicten vermijden wanneer we ze kunnen voorspellen.
Syntax:
Bedenk dat we een testGuru-tag maken en dat we de klasse taghandlertestTag kunnen gebruiken, die de doTag()-methode overschrijft.
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
We zullen deze testTag-klasse ook in TLD (Tag Library Descriptof) omdat de JSP-container automatisch een mapping maakt tussen het klassenbestand en de uri die in het TLD-bestand is vermeld.
JSP-taginterface
- Deze klasse zal de SimpleTagSupport-klasse moeten uitbreiden.
- Deze klasse zal de doTag()-methode moeten overschrijven die deel uitmaakt van de SimpleTagSupport-klasse (overschrijven is een methode die wordt overgenomen van de bovenliggende klasse).
- Deze interface is een subinterface van de JSPTAg-interface.
- Het biedt methoden voor uitvoering aan het begin en einde van de tag.
- We moeten deze klasse ook in kaart brengen in TLD, dat wil zeggen de Tag Library-descriptor
We overwegen in het onderstaande voorbeeld
Methode van tag-interface
- doTag() is een methode die we moeten overschrijven en die de inhoud van de tag zal bevatten.
- Er is de huidige JSP-context nodig met behulp van getJSPContext()
Voorbeeld:
Aangepaste tag_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>
Aangepast.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"); } }
Uitleg van de code:
guruTag.java (TagHandler)
Coderegel 6:guruTag-klasse is een uitbreiding van de SimpleTagSupport-klasse die aanwezig is in javax.servlet.JSP jar
Coderegel 7: Hier overschrijven we de doTag()-methode die JspException en IOException genereert.
Coderegel 9-10: Bij deze methode wordt de code ingebed in een aangepaste tag die wordt aangeroepen. We nemen een object van JspWriter en dat zal "Guru Tag" afdrukken.
Aangepast.tld
Coderegel 6: De naam van de aangepaste tag is hier 'guruTag'.
Coderegel 7:Tagklasse is taghandlerclass, dat wil zeggen guruTag.java. Het heeft het volledige pad van het handlerbestand nodig, inclusief het directorypad van de locatie van het bestand.
Aangepaste tag_jsp1.jsp
Coderegel 3:Dit taglib-voorvoegsel is vereist voor alle tags en het toegevoegde voorvoegsel is 'ex'. Daarom kan het worden gebruikt als voorvoegsel voor alle coretags en uri is custom.tld die de tag-handler toewijst.
Coderegel 11: Hier definiëren we de aangepaste tag “guruTag”, die de methode doTag() van de handlerklasse zal aanroepen en de code daarin zal worden uitgevoerd.
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer
Output:
- We krijgen de uitvoer als “GuruTag” van guruTag.java, dwz TagHandler, die de doTag()-methode overschrijft en die “Guru Tag” als uitvoer afdrukt.
Samenvatting
- In deze sectie leerden we over de standaard JSP-tagbibliotheek waarin we kerntags en aangepaste tags gebruikten.
- Kerntags zijn onder andere for, if, redirect, import en catch tags. Dit zijn tags die voor basisdoeleinden in JSP worden gebruikt.
- We hebben ook aangepaste tags gemaakt waarin we de tags kunnen definiëren en deze in JSP kunnen gebruiken