JSTL (JSP Standard Tag Library)
I denne JSTL-tutorial vil vi se, hvordan brug af forskellige JSTL-tags vil gøre JSP-kodning lettere.
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:
- Standard tag: Det giver et rigt lag af den bærbare funktionalitet af JSP-sider. Det er nemt for en udvikler at forstå koden.
- Kode pænt og rent: Da skriftletter forvirrer udvikleren, gør brugen af JSTL koden pæn og ren.
- 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.
- Lettere for mennesker at læse: JSTL er baseret på XML, som minder meget om HTML. Derfor er det nemt for udviklerne at forstå.
- 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:
Kodelinje 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.
Kodelinje 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:
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:
Kodelinje 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
Kodelinje 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".
Kodelinje 14: Vi udskriver "guruException".
Når du udfører koden, får du følgende output:
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 indhold 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
Kodelinje 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
Kodelinje 11-12: Her importerer vi coretag_jsp32.jsp fil til denne fil ved hjælp af import tag
Kodelinje 13: 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.
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:
Kodelinje 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
Kodelinje 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
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:
Kodelinje 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
Kodelinje 11: Her sætter vi variablen navngivet som tæller til 100
Kodelinje 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
Output:
- Da "hvis"-betingelsen er sand, får vi output som "Antallet er 100".
6. omdirigere
- Det bruges til at omdirigere den aktuelle side til en anden URL ved at angive den relative URL for dette tag.
- Det understøtter kontekstrelative URL'er
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:
Kodelinje 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
Kodelinje 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;
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 opretter 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) som JSP-container vil automatisk oprette en mapping mellem klassefilen og uri, 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)
Kodelinje 6:guruTag-klassen udvider SimpleTagSupport-klassen, som er til stede i javax.servlet.JSP-krukken
Kodelinje 7: Her tilsidesætter vi doTag()-metoden, som kaster JspException og IOException.
Kodelinje 9-10: I denne metode vil koden blive indlejret i brugerdefineret tag, som vil blive kaldt. Vi tager et objekt af JspWriter, og det vil udskrive "Guru Tag."
Custom.tld
Kodelinje 6: Her er navnet på det brugerdefinerede tag "guruTag."
Kodelinje 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
Kodelinje 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.
Kodelinje 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
Output:
- Vi får output som "GuruTag" fra guruTag.java, dvs. TagHandler, som tilsidesætter doTag()-metoden og som udskriver "Guru Tag" som output.
Resumé
- I dette afsnit lærte vi om JSP standard tag-bibliotek, hvor vi lavede kernetags og brugerdefinerede tags.
- Kernetags inkluderer for, if, omdirigering, import, catch-tags, som var tags brugt til grundlæggende formål i JSP.
- Vi lavede også brugerdefinerede tags, hvor vi kan definere tags og bruge det i JSP