JSTL (JSP Standard Tag Library)
I den här JSTL-handledningen kommer vi att se hur användningen av olika JSTL-taggar kommer att göra JSP-kodning enklare.
Vad är JSTL i Java?
JSTL står för Java serversidors standardtaggbibliotek, och det är en samling anpassade JSP-taggbibliotek som tillhandahåller vanliga webbutvecklingsfunktioner. JSTL är ett standard taggbibliotek för JSP.
Fördelar med JSTL
Nedan är fördelarna med JSTL:
- Standard Tag: Det ger ett rikt lager av portabla funktioner för JSP-sidor. Det är lätt för en utvecklare att förstå koden.
- Kod Snyggt och rent: Eftersom skriftletter förvirrar utvecklare gör användningen av JSTL koden snygg och ren.
- Automat JavabeansInterospection Support: Den har fördelen med JSTL framför JSP-skript. JSTL Expression språk hanterar JavaBean kod väldigt enkelt. Vi behöver inte nedkasta objekten, som har hämtats som scoped-attribut. Att använda JSP-scriptlets kod kommer att vara komplicerat, och JSTL har förenklat det syftet.
- Lättare för människor att läsa: JSTL baseras på XML, som är väldigt lik HTML. Därför är det lätt för utvecklarna att förstå.
- Lättare för datorer att förstå: Verktyg som t.ex Dreamweaver och förstasidan genererar mer och mer HTML-kod. HTML-verktyg gör ett bra jobb med att formatera HTML-kod. HTML-koden blandas med scriplet-koden. Eftersom JSTL uttrycks som XML-kompatibla taggar är det lätt för HTML-generering att analysera JSTL-koden i dokumentet.
JSTL-taggar
Kärntaggarna är vanligast använda taggar i JSP. De ger stöd till
- iteration
- Villkorlig logik
- Fånga undantag
- url framåt
- Omdirigera osv.
För att använda kärntaggar måste vi först definiera taggbiblioteket och nedan är syntaxen för att inkludera ett taggbibliotek.
Syntax:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Här,
- prefix kan användas för att definiera alla kärntaggar och
- uri är taglib-biblioteket från vilket det importeras
Låt oss se några av kärntaggarna i detalj,
1. Ut
- Resultatet av uttrycket visas i out-taggen
- Det kan direkt undkomma XML-taggarna. Därför utvärderas de inte som faktiska taggar
Syntax:
<c:out value="" default="" escapeXML="">
- Här representerar värdet information till utgången, och det är obligatoriskt
- Standard är att inte mata ut information, och det är inte obligatoriskt
- escapeXML – Det är sant om det undkommer XML-tecken.
Exempelvis:
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>
Förklaring av koden:
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som läggs till är 'c'. Därför kan den användas som ett prefix för alla coretags.
Kodrad 12: Här använder vi coretag out med prefixet "c" och denna out kommer att skriva ut värdet i expression-taggen. Därför kommer utdata att vara namn
När du kör ovanstående kod får du följande utdata:
Produktion:
- Vi får värdet som ett namn från kärntaggen "out" som kommer att skrivas ut i utgångsströmmen.
2. Fångst
- Den fångar alla kastbara undantag som inträffar i kroppen och visas som utdata.
- Den används för att hantera felen och fånga upp dem.
Syntax:
<c:catchvar="">
Här representerar var namnet på variabeln, som kommer att innehålla ett kastbart undantag.
Exempelvis:
<%@ 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>
Förklaring av koden:
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som lagts till är 'c', så det kan användas som ett prefix för alla coretaggar
Kodrad 11-13: Coretag catch används för att fånga undantaget och skriva ut undantaget. Här höjs undantaget när 10/0 och det undantaget har namnet "guruException".
Kodrad 14: Vi skriver ut "guruException".
När du kör koden får du följande utdata:
Produktion:
- Vi får aritmetiskt undantag som /med noll, och det skrivs ut i utgången med variabeln "guruException"
3. Importera
- Vi kan importera ett annat filinnehåll till en JSP-sida som vi gjorde i JSP inkluderar åtgärder.
- Här kan vi också inkludera URL och innehållet kommer att visas på den sidan.
Syntax:
<c:importvar="" uri="">
Här är var ett variabelnamn som är en identifierare, som kommer att hålla filnamnet/uri. uri är ett relativt filnamn eller urinnamn.
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>
Förklaring av koden:
Coretag_jsp31.jsp
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som lagts till är 'c', så det kan användas som ett prefix för alla coretaggar
Kodrad 11-12: Här importerar vi filen coretag_jsp32.jsp till den här filen med hjälp av importtaggen
Kodrad 13: Här skriver vi ut filen coretag_jsp32.jsp med out-taggen.
När du kör ovanstående kod får du följande utdata.
Produktion:
- Coretag_jsp32 skrivs ut i utdata eftersom den här filen importerades i coretag_jsp31.jsp.
4. för varje
- Det används för att iterera antalet element i serier av påståenden.
- Det är samma som en Java forloop.
Syntax:
<c:forEach var="" begin="" end="">
- Här representerar var variabelnamn som kommer att innehålla räknarnamn
- Början representerar räknarens startvärde
- End kommer att representera dess slutvärde
Exempelvis:
<%@ 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>
Förklaring av koden:
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som lagts till är 'c', så det kan användas som ett prefix för alla coretaggar
Kodrad 11-13: Här använder vi ”forEach”-slingan där variabelnamnet är ”gurucount”, som har börjat räknas som 5 och sluträkningen som 10. Vi skriver ut variabeln gurucount som har siffror från 5 till 10.
När du kör koden får du följande utdata
Produktion:
- Resultatet vi får börjar från 5 till 10.
5. Om
- Det används för Testning förhållanden.
- Om taggen används för att testa ett villkor om det är sant eller inte baserat på detta, kommer kodblocket att exekveras.
Syntax:
<c:if test="${condition}></c:if>
Här, om villkoret är sant, exekveras serier av satser.
Exempelvis:
<%@ 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>
Förklaring av koden:
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som lagts till är 'c', så det kan användas som ett prefix för alla coretaggar
Kodrad 11: Här ställer vi in variabeln som heter count till 100
Kodrad 12-14: Här använder vi "om villkor" där vi kontrollerar om antalet är lika med 100. Det är lika med 100 då vi får utdata som "Antalet är 100."
När du kör ovanstående kod får du följande utdata
Produktion:
- Eftersom "om"-villkoret är sant, får vi utdata som "Antalet är 100".
6. omdirigera
- Den används för att omdirigera den aktuella sidan till en annan URL genom att ange den relativa URL:en för denna tagg.
- Det stöder kontextrelativa webbadresser
Syntax:
<c:redirect url="" context=""/>
Här är url en relativ url som den måste omdirigeras till och sammanhangsnamnet för den lokala webbapplikationen.
Exempelvis:
<%@ 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>
Förklaring av koden:
Kodrad 3: Detta taglib-prefix krävs för alla taggar och prefixet som lagts till är 'c', så det kan användas som ett prefix för alla coretaggar
Kodrad 11: Här använder vi "omdirigeringstagg", där vi anger urlnamnet, och när vi klickar på den sidan omdirigerar den till webbplatsen som har angetts för omdirigering.
När du kör ovanstående kod får du följande utdata;
Produktion:
- Vi får ut guru99.com url som omdirigeras av coretag_jsp6.jsp
JSTL anpassade taggar
- Det är en användardefinierad JSP språkelement.
- När JSP översätts till en servlet, konverteras anpassad tagg till en klass som vidtar åtgärder på ett objekt och anropas som en tagghanterare.
- Dessa åtgärder när servleten körs anropas av webbbehållaren.
- För att skapa den användardefinierade anpassade taggen måste vi skapa tagghanteraren som kommer att utöka SimpleTagSupport och måste åsidosätta doTag()-metoden.
- Vi måste skapa TLD där vi behöver mappa klassfilen i TLD.
Fördelar med anpassade taggar i JSP
Här är fördelarna med anpassade taggar i JSP:
- Bärbar: En åtgärd som beskrivs i ett taggbibliotek måste vara användbar i vilken JSP-behållare som helst.
- Enkel Osofistikerade användare måste kunna förstå och använda denna mekanism. Leverantörer av JSP-funktionalitet måste ha lätt för att göra den tillgänglig för användare som åtgärder.
- Uttrycksfull: Mekanismen måste stödja ett brett utbud av åtgärder, inklusive kapslade åtgärder, skriptelement inuti åtgärdskroppar, skapande, användning och uppdatering av skriptvariabler.
- Kan användas från olika skriptspråk: Även om JSP-specifikationen för närvarande bara definierar semantiken för skript i Java programmeringsspråk vill vi lämna möjligheten till andra skriptspråk öppen.
- Byggd på befintliga koncept och maskiner: Vi vill inte återuppfinna det som finns någon annanstans. Vi vill också undvika framtida konflikter närhelst vi kan förutse dem
Syntax:
Tänk på att vi skapar testGuru-taggen och vi kan användataghandlertestTag-klassen, som kommer att åsidosätta doTag()-metoden.
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Vi måste också kartlägga denna testTag-klass i TLD (Tag Library Descripteller) som JSP-behållare kommer automatiskt att skapa en mappning mellan klassfilen och uri som har nämnts i TLD-filen.
JSP-tagggränssnitt
- Den här klassen måste utöka klassen SimpleTagSupport.
- Den här klassen måste åsidosätta doTag()-metoden som är en del av klassen SimpleTagSupport (åsidosättande är en metod som ärvs från den överordnade klassen).
- Detta gränssnitt är ett undergränssnitt till JSPTag-gränssnittet.
- Den tillhandahåller metoder att utföra i början och slutet av taggen.
- Dessutom måste vi mappa denna klass i TLD, dvs. Tag Library-deskriptor
Vi överväger i exemplet nedan
Metod för tagggränssnitt
- doTag() är en metod som vi måste åsidosätta som kommer att ha innehållet för taggen.
- Den tar den aktuella JSP-kontexten med getJSPContext()
Exempelvis:
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"); } }
Förklaring av koden:
guruTag.java(TagHandler)
Kodrad 6:guruTag-klassen utökar SimpleTagSupport-klassen som finns i javax.servlet.JSP-burken
Kodrad 7: Här åsidosätter vi doTag()-metoden som kastar JspException och IOException.
Kodrad 9-10: I den här metoden kommer koden att bäddas in i en anpassad tagg som kommer att anropas. Vi tar ett objekt av JspWriter, och det kommer att skriva ut "Guru Tag."
Custom.tld
Kodrad 6: Här är namnet på den anpassade taggen "guruTag".
Kodrad 7:Taggklassen är taghandlerclass, dvs guruTag.java. Den tar hela sökvägen till hanterarfilen som inkluderar katalogsökvägen till platsen för filen.
Customtag_jsp1.jsp
Kodrad 3:Detta taglib-prefix krävs för alla taggar och prefixet som läggs till är 'ex', så det kan användas som ett prefix för alla coretags och uri är custom.tld som mappar tagghanteraren.
Kodrad 11: Här definierar vi den anpassade taggen "guruTag", som kommer att anropa hanterarklassen doTag()-metoden och koden i den kommer att exekveras.
När du kör ovanstående kod får du följande utdata
Produktion:
- Vi får utdata som "GuruTag" från guruTag.java dvs TagHandler, som åsidosätter doTag()-metoden och som skriver ut "Guru Tag" som en utdata.
Sammanfattning
- I det här avsnittet lärde vi oss om JSP-standardtaggbibliotek där vi gjorde kärntaggar och anpassade taggar.
- Kärntaggar inkluderar för, if, omdirigering, import, catch-taggar som var taggar som användes för grundläggande ändamål i JSP.
- Vi gjorde också anpassade taggar där vi kan definiera taggarna och använda dem i JSP