JSTL (JSP Standard Tag Library)

I denne JSTL-opplæringen vil vi se hvordan bruk av forskjellige JSTL-tagger vil gjøre JSP-koding enklere.

Hva er JSTL i Java?

JSTL står for Java serversider standard tag-bibliotek, og det er en samling tilpassede JSP-tag-biblioteker som gir felles webutviklingsfunksjonalitet. JSTL er et standard tag-bibliotek for JSP.

Fordeler med JSTL

Nedenfor er fordelene med JSTL:

  1. Standard Tag: Det gir et rikt lag av den bærbare funksjonaliteten til JSP-sider. Det er enkelt for en utvikler å forstå koden.
  2. Kode ryddig og rent: Ettersom skriftletter forvirrer utvikleren, gjør bruken av JSTL koden ryddig og ren.
  3. Automatisk JavabeansInterospection Support: Den har en fordel med JSTL fremfor JSP-skript. JSTL Expression språkhåndtak JavaBean-kode veldig enkelt. Vi trenger ikke å nedkaste objektene, som har blitt hentet som scoped-attributter. Å bruke JSP scriptlets kode vil være komplisert, og JSTL har forenklet det formålet.
  4. Lettere for mennesker å lese: JSTL er basert på XML, som er veldig lik HTML. Derfor er det lett for utviklerne å forstå.
  5. Lettere for datamaskiner å forstå: Verktøy som f.eks Dreamweaver og forsiden genererer mer og mer HTML-kode. HTML-verktøy gjør en god jobb med å formatere HTML-kode. HTML-koden er blandet med scriplet-koden. Siden JSTL uttrykkes som XML-kompatible tagger, er det enkelt for HTML-generering å analysere JSTL-koden i dokumentet.

JSTL-tagger

Kjernetaggene er oftest brukte tagger i JSP. De gir støtte til

  • køyring
  • Betinget logikk
  • Fange unntak
  • url videre
  • Omdirigere, etc.

For å bruke kjernekoder må vi først definere tag-biblioteket og nedenfor er syntaksen for å inkludere et tag-bibliotek.

Syntaks:

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

Her

  • prefiks kan brukes til å definere alle kjernekodene og
  • uri er biblioteket til taglib som det importeres fra

La oss se noen av kjernekodene i detalj,

1. Ut

  • Resultatet av uttrykket vises i ut-taggen
  • Den kan unnslippe XML-taggene direkte. Derfor blir de ikke vurdert som faktiske tagger

Syntaks:

<c:out value="" default="" escapeXML="">
  • Her representerer verdi informasjon til utdata, og det er obligatorisk
  • Standard er manglende utdatainformasjon, og det er ikke obligatorisk
  • escapeXML – Det er sant hvis det unnslipper XML-tegn.

Eksempel:

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>

Forklaring av koden:

Kodelinje 3: Dette taglib-prefikset er nødvendig for alle tagger og prefikset som legges til er 'c'. Derfor kan den brukes som et prefiks for alle coretags.

Kodelinje 12: Her bruker vi coretag out med prefikset "c", og denne ut vil skrive ut verdien i uttrykkskoden. Derfor vil utgangen være navn

Når du kjører koden ovenfor, får du følgende utgang:

JSTL Core Tags - Ut

Utgang:

  • Vi får verdien som et navn fra kjernekoden "out" som vil skrives ut i utdatastrømmen.

2. Fangst

  • Den fanger opp ethvert kastbart unntak som forekommer i kroppen og vises som utdata.
  • Den brukes til å håndtere feilene og fange dem opp.

Syntaks:

<c:catchvar="">

Her representerer var navnet på variabelen, som vil inneholde et kastbart unntak.

Eksempel:

<%@ 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>

Forklaring av koden:

Kodelinje 3: Dette taglib-prefikset er påkrevd for alle tagger, og prefikset som legges til er 'c', så det kan brukes som et prefiks for alle coretags

Kodelinje 11-13: Coretag catch brukes til å fange opp unntaket og skrive ut unntaket. Her er unntaket hevet når 10/0 og det unntaket har navnet "guruException".

Kodelinje 14: Vi trykker "guruException".

Når du kjører koden, får du følgende utdata:

JSTL Core Tags - Catch

Utgang:

  • Vi får aritmetisk unntak som / med null, og det skrives ut i utdataene ved å bruke variabelen "guruException"

3. Importer

  • Vi kan importere et annet filinnhold til en JSP-side som vi gjorde på JSP inkluderer handling.
  • Her kan vi også inkludere URL og innholdet vil vises på den siden.

Syntaks:

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

Her er var et variabelnavn som er en identifikator, som vil inneholde filnavnet/uri. uri er relativt filnavn eller urinnavn.

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>

Forklaring av koden:

Coretag_jsp31.jsp

Kodelinje 3: Dette taglib-prefikset er påkrevd for alle tagger, og prefikset som legges til er 'c', så det kan brukes som et prefiks for alle coretags

Kodelinje 11-12: Her importerer vi coretag_jsp32.jsp-fil til denne filen ved hjelp av import-tag

Kodelinje 13: Her skriver vi ut filen coretag_jsp32.jsp med out tag.

Når du utfører koden ovenfor, får du følgende utgang.

JSTL Core Tags - Import

Utgang:

  • Coretag_jsp32 skrives ut i utdataene ettersom denne filen ble importert i coretag_jsp31.jsp.

4. for hver

  • Det brukes til å iterere antall elementer i serier av utsagn.
  • Det er det samme som en Java forloop.

Syntaks:

<c:forEach var="" begin=""  end="">
  • Her representerer var variabelnavn som vil inneholde tellernavn
  • Start representerer tellerens begynnelsesverdi
  • End vil representere sluttverdien

Eksempel:

<%@ 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>

Forklaring av koden:

Kodelinje 3: Dette taglib-prefikset er påkrevd for alle tagger, og prefikset som legges til er 'c', så det kan brukes som et prefiks for alle coretags

Kodelinje 11-13: Her bruker vi "forEach"-løkke hvor variabelnavnet er "gurucount", som har begynt å telle som 5 og slutttelling som 10. Vi skriver ut variabelen gurucount som har tall som starter fra 5 til 10.

Når du kjører koden, får du følgende utgang

JSTL Core Tags - for hver

Utgang:

  • Utgangen vi får starter fra 5 til 10.

5. Hvis

  • Den brukes til Testing forhold.
  • Hvis taggen brukes til å teste en betingelse om den er sann eller ikke basert på dette, vil kodeblokken bli utført.

Syntaks:

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

Her, hvis betingelsen er sann, blir serier av utsagn utført.

Eksempel:

<%@ 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>

Forklaring av koden:

Kodelinje 3: Dette taglib-prefikset er påkrevd for alle tagger, og prefikset som legges til er 'c', så det kan brukes som et prefiks for alle coretags

Kodelinje 11: Her setter vi variabelen navngitt som teller til 100

Kodelinje 12-14: Her bruker vi "hvis betingelse" der vi sjekker om antallet er lik 100. Det er lik 100, så får vi utdata som "Antallet er 100."

Når du utfører koden ovenfor, får du følgende utgang

JSTL Core Tags - If

Utgang:

  • Siden "hvis"-betingelsen er sann, får vi utgangen som "Antallet er 100".

6. omdirigere

  • Den brukes til å omdirigere gjeldende side til en annen URL ved å oppgi den relative URLen til denne taggen.
  • Den støtter kontekstrelative URL-er

Syntaks:

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

Her er url relativ url som den må omdirigeres til og kontekstnavnet til den lokale webapplikasjonen.

Eksempel:

<%@ 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>

Forklaring av koden:

Kodelinje 3: Dette taglib-prefikset er påkrevd for alle tagger, og prefikset som legges til er 'c', så det kan brukes som et prefiks for alle coretags

Kodelinje 11: Her bruker vi "redirect tag", der vi spesifiserer urlnavnet, og når vi klikker på den siden omdirigerer den til nettstedet som har blitt gitt for omdirigering.

Når du kjører koden ovenfor, får du følgende utgang;

JSTL Core Tags - Redirect

Utgang:

  • Vi får utdata guru99.com url som er omdirigert av coretag_jsp6.jsp

JSTL egendefinerte tagger

  • Det er en brukerdefinert JSP språkelement.
  • Når JSP oversettes til en servlet, konverteres tilpasset tag til en klasse som tar handling på et objekt og kalles som en tag-behandler.
  • Disse handlingene når servleten kjøres påkalles av nettbeholderen.
  • For å lage den brukerdefinerte egendefinerte taggen, må vi lage tagbehandleren som skal utvide SimpleTagSupport og må overstyre doTag()-metoden.
  • Vi må lage TLD der vi må kartlegge klassefilen i TLD.

Fordeler med tilpassede tagger i JSP

Her er fordelene med tilpassede tagger i JSP:

  • Bærbar: En handling beskrevet i et tag-bibliotek må være brukbar i enhver JSP-beholder.
  • Enkel: Usofistikerte brukere må kunne forstå og bruke denne mekanismen. Leverandører av JSP-funksjonalitet må finne det enkelt å gjøre det tilgjengelig for brukere som handlinger.
  • Uttrykksfull: Mekanismen må støtte et bredt spekter av handlinger, inkludert nestede handlinger, skriptelementer i handlingslegemer, opprettelse, bruk og oppdatering av skriptvariabler.
  • Kan brukes fra forskjellige skriptspråk: Selv om JSP-spesifikasjonen for øyeblikket bare definerer semantikken for skript i Java programmeringsspråk, ønsker vi å la muligheten for andre skriptspråk stå åpen.
  • Bygget på eksisterende konsepter og maskineri: Vi ønsker ikke å gjenoppfinne det som finnes andre steder. Vi ønsker også å unngå fremtidige konflikter når vi kan forutsi dem

Syntaks:

Tenk på at vi lager testGuru-taggen og vi kan bruke taghandlertestTag-klassen, som vil overstyre doTag()-metoden.

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

Vi må også kartlegge denne testTag-klassen i TLD (Tag Library Descripteller) som JSP-beholder vil automatisk opprette en mapping mellom klassefilen og uri som har blitt nevnt i TLD-filen.

JSP Tag-grensesnitt

  • Denne klassen må utvide SimpleTagSupport-klassen.
  • Denne klassen må overstyre doTag()-metoden som er en del av SimpleTagSupport-klassen (overstyring er en metode som er arvet fra overordnet klasse).
  • Dette grensesnittet er et undergrensesnitt av JSPTag-grensesnittet.
  • Det gir metoder for å utføre på begynnelsen og slutten av taggen.
  • Vi må også kartlegge denne klassen i TLD, dvs. Tag Library-deskriptor

Vi vurderer i eksemplet nedenfor

Metode for taggrensesnitt

  • doTag() er en metode som vi må overstyre som vil ha innholdet for taggen.
  • Den tar den gjeldende JSP-konteksten ved å bruke getJSPContext()

Eksempel:

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");
	}

}

Forklaring av koden:

guruTag.java(TagHandler)

Kodelinje 6:guruTag-klassen utvider SimpleTagSupport-klassen som finnes i javax.servlet.JSP-krukken

Kodelinje 7: Her overstyrer vi doTag()-metoden som kaster JspException og IOException.

Kodelinje 9-10: I denne metoden vil koden bli innebygd i egendefinert tag som vil bli kalt. Vi tar et objekt av JspWriter, og det vil skrive ut "Guru Tag."

Custom.tld

Kodelinje 6: Her er navnet på den tilpassede taggen "guruTag."

Kodelinje 7:Tag-klassen er taghandlerclass, dvs. guruTag.java. Den tar hele banen til behandlerfilen som inkluderer katalogbanen til plasseringen til filen.

Customtag_jsp1.jsp

Kodelinje 3:Dette taglib-prefikset er påkrevd for alle tagger og prefikset som legges til er 'ex', så det kan brukes som et prefiks for alle coretags og uri er custom.tld som kartlegger tag-behandleren.

Kodelinje 11: Her definerer vi den tilpassede taggen "guruTag", som kaller behandlerklassen doTag()-metoden og koden i den vil bli utført.

Når du utfører koden ovenfor, får du følgende utgang

JSP Tag-grensesnitt

Utgang:

  • Vi får utdata som "GuruTag" fra guruTag.java dvs. TagHandler, som overstyrer doTag()-metoden og som skriver ut "Guru Tag" som en utgang.

Sammendrag

  • I denne delen lærte vi om JSP standard tag-bibliotek der vi laget kjernetagger og tilpassede tagger.
  • Kjernetagger inkluderer for, if, omdirigering, import, catch-tagger som var tagger som ble brukt til grunnleggende formål i JSP.
  • Vi laget også tilpassede tagger der vi kan definere taggene og bruke dem i JSP