JSTL (JSP Standard Tag Library)

โšก Smart opsummering

JSP Standard Tag Library (JSTL) er en samling af brugerdefinerede JSP-tagbiblioteker, der leverer almindelige webudviklingsfunktioner sรฅsom iteration, betinget logik, undtagelseshรฅndtering, import og omdirigering, hvilket gรธr JSP-kode renere, bรฆrbar og lettere at lรฆse end scriptlets.

  • ๐Ÿท๏ธ JSTL-defineret: En standardsamling af brugerdefinerede JSP-tagbiblioteker til almindelige webopgaver.
  • โœจ fordele: Producerer ren, bรฆrbar kode, der er lettere for mennesker og vรฆrktรธjer at lรฆse end scriptlets.
  • ๐Ÿ”ง Kernetags: out, catch, import, forEach, if og redirect hรฅndterer output, fejl, includes, loops og betingelser.
  • ๐Ÿ” Iteration og logik: forEach looper over intervaller, mens if og catch tilfรธjer betinget hรฅndtering og undtagelseshรฅndtering.
  • ๐Ÿ› ๏ธ Brugerdefinerede tags: Opret brugerdefinerede tags ved at udvide SimpleTagSupport, tilsidesรฆtte doTag() og mappeping i et TLD.
  • ๐Ÿ“„ Tag-grรฆnseflade: Tag-biblioteket Descripteller (TLD) knytter tagnavne til deres handlerklasser for JSP-containeren.

JSTL - JSP Standard Tag Library

Hvad er JSTL i Java?

JSTL stรฅr for Java serversiders standard tag-bibliotek, og det er en samling af brugerdefinerede JSP-tag-biblioteker, der giver fรฆlles webudviklingsfunktionalitet. JSTL er et standard tag-bibliotek for JSP.

Fordele ved JSTL

Nedenfor er fordelene ved JSTL:

  1. Standard tag: Det giver et rigt lag af den bรฆrbare funktionalitet af JSP-sider. Det er nemt for en udvikler at forstรฅ koden.
  2. Code Pรฆnt og rent: Da skriftletter forvirrer udvikleren, gรธr brugen af โ€‹โ€‹JSTL koden pรฆn og ren.
  3. Automatisk Ur Javabรธnner Interospektionsstรธtte: Det har en fordel ved JSTL frem for JSP-scriptlets. JSTL Expression sproghรฅndtag JavaBean kode meget nemt. Vi behรธver ikke at nedkaste objekterne, som er blevet hentet som scoped-attributter. Brug af JSP scriptlets kode vil vรฆre kompliceret, og JSTL har forenklet dette formรฅl.
  4. Lettere for mennesker at lรฆse: JSTL er baseret pรฅ XML, som minder meget om HTML. Derfor er det nemt for udviklerne at forstรฅ.
  5. Lettere for computere at forstรฅ: Vรฆrktรธjer som f.eks Dreamweaver og forsiden genererer mere og mere HTML-kode. HTML-vรฆrktรธjer gรธr et godt stykke arbejde med at formatere HTML-kode. HTML-koden er blandet med scriplet-koden. Da JSTL udtrykkes som XML-kompatible tags, er det nemt for HTML-generering at parse JSTL-koden i dokumentet.

JSTL tags

Kernetags er oftest brugte tags i JSP. De yder stรธtte til

  • iteration
  • Betinget logik
  • Fang undtagelse
  • url frem
  • Omdirigering osv.

For at bruge kernetags skal vi fรธrst definere tag-biblioteket, og nedenfor er syntaksen for at inkludere et tag-bibliotek.

Syntaks:

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

Her,

  • prรฆfiks kan bruges til at definere alle kernetags og
  • uri er taglib-biblioteket, hvorfra det er importeret

Lad os se nogle af de centrale tags i detaljer,

1. Ud

  • Resultatet af udtryk vises i out-tagget
  • Det kan direkte undslippe XML-tags. Derfor vurderes de ikke som egentlige tags

Syntaks:

<c:out value="" default="" escapeXML="">
  • Her reprรฆsenterer vรฆrdi information til output, og det er obligatorisk
  • Standard er manglende udlรฆsning af information, og det er ikke obligatorisk
  • escapeXML โ€“ Det er sandt, hvis det undslipper 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 af koden:

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c'. Derfor kan den bruges som et prรฆfiks for alle coretags.

Code Linje 12: Her bruger vi coretag ud med prรฆfikset "c", og denne ud vil udskrive vรฆrdien i udtrykket tag. Derfor vil output vรฆre navn

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output:

JSTL Core Tags - Out

Output:

  • Vi fรฅr vรฆrdien som et navn fra kernemรฆrket "out", som udskrives i outputstrรธmmen.

2. Fangst

  • Den fanger enhver smidbar undtagelse, som forekommer i kroppen og vises som output.
  • Det bruges til at hรฅndtere fejlene og til at fange dem.

Syntaks:

<c:catchvar="">

Her reprรฆsenterer var navnet pรฅ variablen, som vil indeholde en throwable undtagelse.

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 af koden:

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c', sรฅ det kan bruges som et prรฆfiks for alle coretags

Code Linje 11-13: Coretag catch bruges til at fange undtagelsen og udskrive undtagelsen. Her hรฆves undtagelsen, nรฅr 10/0, og den undtagelse har navnet "guruException".

Code Linje 14: Vi udskriver "guruException".

Nรฅr du udfรธrer koden, fรฅr du fรธlgende output:

JSTL Core Tags - Catch

Output:

  • Vi fรฅr aritmetisk undtagelse som /ved nul, og den udskrives i outputtet ved hjรฆlp af variabel "guruException"

3. Importere

  • Vi kan importere et andet filindhold til en JSP-side, som vi gjorde i JSP inkluderer handling.
  • Her kan vi ogsรฅ inkludere URL og indholdet vil blive vist pรฅ den side.

Syntaks:

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

Her er var et variabelnavn, som er en identifikator, som vil indeholde filnavnet/uri. uri er et 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 af koden:

Coretag_jsp31.jsp

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c', sรฅ det kan bruges som et prรฆfiks for alle coretags

Code Linje 11-12: Her importerer vi coretag_jsp32.jsp fil til denne fil ved hjรฆlp af import tag

Code Linje13: Her udskriver vi filen coretag_jsp32.jsp ved hjรฆlp af out tag.

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output.

JSTL Core Tags - Import

Output:

  • Coretag_jsp32 udskrives i outputtet, da denne fil blev importeret i coretag_jsp31.jsp.

4. for hver

  • Det bruges til at iterere antallet af elementer i rรฆkker af udsagn.
  • Det er det samme som en Java forloop.

Syntaks:

<c:forEach var="" begin=""  end="">
  • Her reprรฆsenterer var variabelnavnet, som vil indeholde tรฆllernavnet
  • Start reprรฆsenterer tรฆllerens begyndelsesvรฆrdi
  • End vil reprรฆsentere dens slutvรฆrdi

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 af koden:

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c', sรฅ det kan bruges som et prรฆfiks for alle coretags

Code Linje 11-13: Her bruger vi "forEach"-lรธkke, hvor variabelnavnet er "gurucount", som er begyndt at tรฆlle som 5 og sluttรฆlle som 10. Vi udskriver variablen gurucount, som har tal fra 5 til 10.

Nรฅr du udfรธrer koden, fรฅr du fรธlgende output

JSTL Core Tags - til hver

Output:

  • Det output, vi fรฅr, starter fra 5 til 10.

5. Hvis

  • Det bruges til Test betingelser.
  • Hvis tagget bruges til at teste en betingelse, om den er sand eller ej baseret pรฅ dette, vil kodeblokken blive eksekveret.

Syntaks:

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

Her, hvis betingelsen er sand, udfรธres serier af udsagn.

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 af koden:

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c', sรฅ det kan bruges som et prรฆfiks for alle coretags

Code Linje 11: Her sรฆtter vi variablen navngivet som tรฆller til 100

Code Linje 12-14: Her bruger vi "hvis betingelse", hvor vi kontrollerer, om antallet er lig med 100. Det er lig med 100, sรฅ fรฅr vi output som "Antallet er 100."

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output

JSTL Core Tags - If

Output:

  • Da "hvis"-betingelsen er sand, fรฅr vi output som "Antallet er 100".

6. omdirigere

  • Den bruges til at omdirigere den aktuelle side til en anden URL ved at give den relative URL af dette mรฆrke.
  • Det understรธtter kontekstrelativ URLs

Syntaks:

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

Her er url en relativ url, som den skal omdirigeres til, og kontekstnavnet pรฅ den lokale webapplikation.

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 af koden:

Code Linje 3: Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'c', sรฅ det kan bruges som et prรฆfiks for alle coretags

Code Linje 11: Her bruger vi "redirect tag", hvor vi angiver urlnavnet, og nรฅr vi klikker pรฅ den side, omdirigeres det til webstedet, som er blevet givet til omdirigering.

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output;

JSTL Core Tags - Omdirigering

Output:

  • Vi fรฅr output guru99.com url, som er omdirigeret af coretag_jsp6.jsp

JSTL brugerdefinerede tags

  • Det er en brugerdefineret JSP sprogelement.
  • Nรฅr JSP er oversat til en servlet, konverteres brugerdefineret tag til en klasse, der foretager handling pรฅ et objekt og kaldes som en tag-handler.
  • Disse handlinger, nรฅr servlet'en udfรธres, pรฅkaldes af webcontaineren.
  • For at oprette det brugerdefinerede brugerdefinerede tag skal vi oprette tag-handleren, som udvider SimpleTagSupport og skal tilsidesรฆtte doTag()-metoden.
  • Vi skal oprette TLD, hvor vi skal kortlรฆgge klassefilen i TLD.

Fordele ved brugerdefinerede tags i JSP

Her er fordelene ved tilpassede tags i JSP:

  • Transportabel: En handling beskrevet i et tag-bibliotek skal kunne bruges i enhver JSP-container.
  • Simple: Usofistikerede brugere skal vรฆre i stand til at forstรฅ og bruge denne mekanisme. Leverandรธrer af JSP-funktionalitet skal finde det nemt at gรธre det tilgรฆngeligt for brugere som handlinger.
  • Udtryksfuldt: Mekanismen skal understรธtte en bred vifte af handlinger, herunder indlejrede handlinger, scriptelementer i handlingslegemer, oprettelse, brug og opdatering af scriptvariabler.
  • Kan bruges fra forskellige scriptsprog: Selvom JSP-specifikationen i รธjeblikket kun definerer semantikken for scripts i Java programmeringssprog, รธnsker vi at lade muligheden for andre scriptsprog stรฅ รฅben.
  • Bygget pรฅ eksisterende koncepter og maskineri: Vi รธnsker ikke at genopfinde det, der findes andre steder. Vi รธnsker ogsรฅ at undgรฅ fremtidige konflikter, nรฅr vi kan forudsige dem

Syntaks:

Overvej, at vi laver en testGuru tag, og vi kan bruge taghandlertestTag-klassen, som vil tilsidesรฆtte doTag()-metoden.

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

Vi bliver ogsรฅ nรธdt til at kortlรฆgge denne testTag-klasse i TLD (Tag Library Descripteller) da JSP-containeren automatisk opretter et kortping mellem klassefilen og URI'en, som er blevet nรฆvnt i TLD-filen.

JSP Tag Interface

  • Denne klasse bliver nรธdt til at udvide SimpleTagSupport-klassen.
  • Denne klasse skal tilsidesรฆtte doTag()-metoden, som er en del af SimpleTagSupport-klassen (tilsidesรฆttelse er en metode, som er nedarvet fra den overordnede klasse).
  • Denne grรฆnseflade er en undergrรฆnseflade til JSPTag-grรฆnsefladen.
  • Det giver metoder til at udfรธre i starten og slutningen af โ€‹โ€‹tagget.
  • Vi skal ogsรฅ kortlรฆgge denne klasse i TLD, dvs. Tag Library-deskriptor

Vi overvejer i eksemplet nedenfor

Metode til tag-interface

  • doTag() er en metode, som vi skal tilsidesรฆtte, og som vil have indholdet til tagget.
  • Det tager den aktuelle JSP-kontekst ved hjรฆlp af 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 af koden:

guruTag.java(TagHandler)

Code Linje 6:guruTag-klassen udvider SimpleTagSupport-klassen, som er til stede i javax.servlet.JSP-krukken

Code Linje 7: Her tilsidesรฆtter vi doTag()-metoden, som kaster JspException og IOException.

Code Linje 9-10: I denne metode vil koden blive integreret i et brugerdefineret tag, som vil blive kaldt. Vi tager et objekt fra Jsp.Writer, og det vil udskrive "Guru Dag."

Custom.tld

Code Linje 6: Her er navnet pรฅ det brugerdefinerede tag "guruTag."

Code Linje 7:Tag-klassen er taghandlerclass, dvs. guruTag.java. Det tager den fulde sti til behandlerfilen, som inkluderer biblioteksstien til placeringen af โ€‹โ€‹filen.

Customtag_jsp1.jsp

Code Linje 3:Dette taglib-prรฆfiks er pรฅkrรฆvet for alle tags, og det tilfรธjede prรฆfiks er 'ex', sรฅ det kan bruges som et prรฆfiks for alle coretags, og uri er custom.tld, som kortlรฆgger tag-handleren.

Code Linje 11: Her definerer vi det brugerdefinerede tag "guruTag", som kalder handlerklassen doTag()-metoden, og koden i den vil blive eksekveret.

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output

JSP Tag Interface

Output:

  • Vi fรฅr outputtet som "GuruTagโ€ fra guruTag.java, dvs. TagHandler, som tilsidesรฆtter doTag()-metoden og udskriver โ€œGuru "Tag" som output.

Ofte Stillede Spรธrgsmรฅl

JSTL har fem taggrupper: core, formatering (I18N), SQL, XML og funktioner. Core-tags hรฅndterer iteration og logik, mens formatering, SQL, XML og funktionstags dรฆkker lokalisering, databaser, XML og strengvรฆrktรธjer.

JSTL bruger lรฆsbare XML-lignende tags til logik, mens scriptlets integrerer rรฅ Java i JSP. JSTL producerer renere, mere vedligeholdbare sider og undgรฅr blanding Java kode med HTML-markup.

Et TLD er en XML-fil, der knytter brugerdefinerede tagnavne til deres handlerklasser. JSP-containeren lรฆser TLD'et for at vide, hvilket Java klasse, der skal udfรธres for hvert brugerdefineret tag.

AI-assistenter kan generere JSTL-tags, skrive brugerdefinerede tag-handlere, konvertere scriptlets til JSTL og forklare udtrykssprog. De fremskynder JSP-udviklingen, mens udviklere gennemgรฅr den genererede kode.

Ja. AI-vรฆrktรธjer kan analysere scriptlet-kode og omskrive den ved hjรฆlp af tilsvarende JSTL-kernetags og udtrykssprog, hel.ping Moderniser รฆldre JSP-sider, samtidig med at funktionaliteten bevares.

Opsummer dette indlรฆg med: