JSTL (JSP Standard Tag Library) zelfstudie: kern- en aangepaste tags

In deze JSTL-tutorial zullen we zien hoe het gebruik van verschillende JSTL-tags JSP-codering eenvoudiger maakt.

Wat is JSTL?

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:

  1. 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.
  2. Code netjes en schoon: Omdat scriplets de ontwikkelaar in verwarring brengen, maakt het gebruik van JSTL de code netjes en schoon.
  3. Automatische JavabeansInterospectie-ondersteuning: Het heeft het voordeel van JSTL ten opzichte van JSP-scriptlets. JSTL Expression-taal verwerkt JavaBean-code heel gemakkelijk. 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.
  4. 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.
  5. 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-kerntags

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 – Het 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 het volgendewing output:

JSTL-kerntags - uit

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 het volgendewing output:

JSTL-kerntags - Catch

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 opnemen en de inhoud wordt op die pagina weergegeven.

Syntax:

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

Hier is var een variabelenaam die een identificatie is en die de bestandsnaam/uri bevat.

uri is een relatieve bestandsnaam of urinaam.

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 het volgendewing uitgang.

JSTL-kerntags - importeren

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 naam van de variabele “gurucount” is, die begint met tellen als 5 en eindigt met tellen als 10. We drukken de variabele gurucount af met getallen die beginnen van 5 tot 10.

Wanneer u de code uitvoert, krijgt u het volgendewing uitgang

JSTL-kerntags - voor elk

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-voorwaarde” waarbij we controleren of het aantal gelijk is aan 100. Is het gelijk aan 100, dan krijgen we de uitvoer als “Het aantal is 100.”

Wanneer u de bovenstaande code uitvoert, krijgt u het volgendewing uitgang

JSTL-kerntags - If

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 het volgendewing uitgang;

JSTL-kerntags - omleiding

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 gedefinieerd 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 wordt beschreven in een tagbibliotheek moet bruikbaar zijn in elke JSP-container.
  • Eenvoudig – Onervaren gebruikers moeten dit mechanisme kunnen begrijpen en gebruiken. Verkopers van JSP-functionaliteit moeten het gemakkelijk vinden om deze als acties beschikbaar te maken voor gebruikers.
  • expressief – Het mechanisme moet een breed scala aan acties ondersteunen, waaronder geneste acties, scriptingelementen in actielichamen, het maken, gebruiken en bijwerken van scriptvariabelen.
  • Bruikbaar vanuit verschillende scripttalen – Hoewel de JSP-specificatie momenteel alleen de semantiek voor scripts in de programmeertaal Java definieert, willen we de mogelijkheid van andere scripttalen openlaten.
  • Gebouwd 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 Descriptor) moeten toewijzen, omdat de JSP-container automatisch een toewijzing zal creëren 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:De guruTag-klasse breidt de SimpleTagSupport-klasse uit 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 het volgendewing uitgang

JSP-taginterface

Output:

  • We krijgen de uitvoer als “GuruTag” van guruTag.java, dwz TagHandler, die de doTag()-methode overschrijft en die “Guru Tag” als uitvoer afdrukt.

Samengevat

  • In deze sectie leerden we over de standaard JSP-tagbibliotheek waarin we kerntags en aangepaste tags gebruikten.
  • Kerntags omvatten tags voor, als, omleiden, importeren en vangen. Dit zijn tags die voor basisdoeleinden worden gebruikt JSP.
  • We hebben ook aangepaste tags gemaakt waarin we de tags kunnen definiëren en deze in JSP kunnen gebruiken