JSTL (JSP szabványos címkekönyvtár)
Ebben a JSTL oktatóanyagban látni fogjuk, hogy a különböző JSTL címkék használata hogyan teszi könnyebbé a JSP kódolást.
Miben van a JSTL? Java?
JSTL jelentése Java szerveroldalak szabványos címkekönyvtárát, és ez egyéni JSP címkekönyvtárak gyűjteménye, amelyek közös webfejlesztési funkciókat biztosítanak. A JSTL a JSP szabványos címkekönyvtára.
A JSTL előnyei
Az alábbiakban bemutatjuk a JSTL előnyeit:
- Szabványos címke: A JSP-oldalak hordozható funkcióinak gazdag rétegét biztosítja. A fejlesztő könnyen megértheti a kódot.
- Kód Tiszta és Tiszta: Mivel a szkriptek megzavarják a fejlesztőt, a JSTL használata tisztává és tisztává teszi a kódot.
- Automatikus JavabeansInterospection támogatás: A JSTL előnye van a JSP scriptletekkel szemben. JSTL kifejezési nyelv kezeli JavaBean kód nagyon könnyen. Nem kell leépíteni az objektumokat, amelyek hatókörű attribútumként lettek letöltve. A JSP scriptlet kód használata bonyolult lesz, és a JSTL leegyszerűsítette ezt a célt.
- Az emberek számára könnyebben olvasható: A JSTL alapja XML, ami nagyon hasonlít a HTML-hez. Ezért a fejlesztők számára könnyen érthető.
- A számítógépek számára könnyebben érthető: Eszközök, mint pl Dreamweaver és a címlap egyre több HTML kódot generál. A HTML-eszközök nagyszerűen formázzák a HTML-kódot. A HTML kód keverve van a scriplet kóddal. Mivel a JSTL-t XML-kompatibilis címkékként fejezik ki, a HTML-generálás könnyen elemzi a JSTL-kódot a dokumentumon belül.
JSTL címkék
Az alapvető címkék a JSP leggyakrabban használt címkéi. Támogatást nyújtanak
- Ismétlés
- Feltételes logika
- Cat kivétel
- url előre
- Átirányítás stb.
Az alapvető címkék használatához először meg kell határoznunk a címkekönyvtárat, és lent található a címkekönyvtár szintaxisa.
Szintaxis:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Itt,
- előtag használható az összes alapvető címke meghatározására és
- Az uri a taglib könyvtára, ahonnan importálva van
Nézzünk meg néhány alapvető címkét részletesen,
1. Ki
- A kifejezés eredménye az out címkében jelenik meg
- Közvetlenül elkerülheti az XML címkéket. Ezért a rendszer nem értékeli ki tényleges címkékként
Syntax:
<c:out value="" default="" escapeXML="">
- Itt az érték a kimenet információját jelenti, és ez kötelező
- Az alapértelmezés az információ kiadásának sikertelensége, és ez nem kötelező
- escapeXML – Igaz, ha kihagyja az XML karaktereket.
Példa:
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>
A kód magyarázata:
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, és a hozzáadott előtag a „c”. Ezért minden alapcímke előtagjaként használható.
12. kódsor: Itt a coretag out-ot használjuk a „c” előtaggal, és ez kinyomtatja a kifejezéscímkében lévő értéket. Ezért a kimenet név lesz
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja:
output:
- Az értéket névként az „out” core címkétől kapjuk, amely a kimeneti adatfolyamban fog megjelenni.
2. Elkapni
- Elkap minden dobható kivételt, amely a testben előfordul, és kimenetként jelenik meg.
- A hibák kezelésére és elkapására szolgál.
Syntax:
<c:catchvar="">
Itt a var annak a változónak a nevét jelenti, amely a dobható kivételt tartalmazza.
Példa:
<%@ 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>
A kód magyarázata:
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, a hozzáadott előtag pedig "c", így minden coretag előtagjaként használható
11-13. kódsor: A Coretag catch a kivétel elfogására és a kivétel kinyomtatására szolgál. Itt a kivétel 10/0 esetén jelenik meg, és ennek a kivételnek a neve „guruException”.
14. kódsor: A „guruException”-t nyomtatjuk.
Amikor végrehajtja a kódot, a következő kimenetet kapja:
output:
- Az aritmetikai kivételt /by nullával kapjuk meg, és a „guruException” változó használatával kerül kinyomtatásra a kimenetbe.
3. Importálás
- Egy másik fájl tartalmát importálhatjuk egy JSP-oldalra, ahogyan azt korábban tettük A JSP tartalmaz műveletet.
- Itt is megadhatjuk az URL-t, és a tartalom megjelenik az oldalon.
Syntax:
<c:importvar="" uri="">
Itt a var egy változónév, amely egy azonosító, amely tartalmazza a fájlnevet/uri-t. Az uri egy relatív fájlnév vagy urinév.
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>
A kód magyarázata:
Coretag_jsp31.jsp
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, a hozzáadott előtag pedig "c", így minden coretag előtagjaként használható
11-12. kódsor: Itt a coretag_jsp32.jsp fájlt importáljuk ebbe a fájlba az import címke használatával
13. kódsor: Itt a coretag_jsp32.jsp fájlt nyomtatjuk ki az out tag használatával.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja.
output:
- A Coretag_jsp32 a kimenetben kerül kinyomtatásra, mivel ezt a fájlt a coretag_jsp31.jsp fájlba importálták.
4. Minden
- Az utasítássorozat elemeinek számának iterálására szolgál.
- Ez ugyanaz, mint a Java forloop.
Syntax:
<c:forEach var="" begin="" end="">
- Itt a var a változó nevét jelenti, amely a számláló nevét fogja tartalmazni
- A Begin a számláló kezdési értéket jelenti
- Az End a végértékét jelenti
Példa:
<%@ 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>
A kód magyarázata:
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, a hozzáadott előtag pedig "c", így minden coretag előtagjaként használható
11-13. kódsor: Itt a „forEach” ciklust használjuk, ahol a változó neve „gurucount”, ami 5-től kezdődően és 10-ig számol. A gurucount változót nyomtatjuk, amelynek 5-től 10-ig kezdődő számai vannak.
Amikor végrehajtja a kódot, a következő kimenetet kapja
output:
- A kapott kimenet 5-től 10-ig kezdődik.
5. Ha
- Ezt használják Tesztelés körülmények.
- Ha a címkét egy feltétel tesztelésére használjuk, hogy ez alapján igaz-e vagy sem, akkor a kódblokk végrehajtásra kerül.
Syntax:
<c:if test="${condition}></c:if>
Itt, ha a feltétel igaz, akkor utasítások sorozata kerül végrehajtásra.
Példa:
<%@ 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>
A kód magyarázata:
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, a hozzáadott előtag pedig "c", így minden coretag előtagjaként használható
11. kódsor: Itt a count nevű változót 100-ra állítjuk
12-14. kódsor: Itt az „ha feltételt” használjuk, ahol ellenőrizzük, hogy a szám egyenlő-e 100-zal. Egyenlő 100-zal, akkor a kimenetet a következőképpen kapjuk: „A szám 100”.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja
output:
- Mivel az „ha” feltétel igaz, a kimenetet „A szám 100”-ként kapjuk.
6. átirányítás
- A címke relatív URL-címének megadásával az aktuális oldalt egy másik URL-re irányítja át.
- Támogatja a kontextus relatív URL-eket
Syntax:
<c:redirect url="" context=""/>
Itt az url a relatív URL, amelyre át kell irányítani, és a helyi webalkalmazás környezeti neve.
Példa:
<%@ 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>
A kód magyarázata:
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, a hozzáadott előtag pedig "c", így minden coretag előtagjaként használható
11. kódsor: Itt az „átirányítási címkét” használjuk, ahol megadjuk az urlnevet, és amikor erre az oldalra kattintunk, átirányít az átirányításra megadott webhelyre.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja;
output:
- Megkapjuk a kimeneti guru99.com URL-t, amelyet a coretag_jsp6.jsp irányít át
JSTL egyéni címkék
- Ez egy felhasználó által meghatározott JSP nyelvi elem.
- Amikor a JSP-t szervletté fordítják, az egyéni címkét egy osztálylá alakítják, amely műveleteket hajt végre egy objektumon, és címkekezelőként hívják meg.
- A szervlet végrehajtásakor azokat a műveleteket hívja meg a webtároló.
- A felhasználó által definiált egyéni címke létrehozásához létre kell hoznunk a címkekezelőt, amely kiterjeszti a SimpleTagSupport-ot, és felül kell írnia a doTag() metódust.
- Létre kell hoznunk TLD-t, ahol le kell képeznünk az osztályfájlt TLD-ben.
Az egyéni címkék előnyei a JSP-ben
Íme az egyéni címkék előnyei a JSP-ben:
- Hordozható: A címkekönyvtárban leírt műveletnek használhatónak kell lennie bármely JSP-tárolóban.
- Egyszerű: A nem kifinomult felhasználóknak meg kell tudniuk érteni és használniuk ezt a mechanizmust. A JSP-funkciók szállítóinak könnyen elérhetővé kell tenniük azt a felhasználók számára műveletként.
- Kifejező: A mechanizmusnak támogatnia kell a műveletek széles skáláját, beleértve a beágyazott műveleteket, a művelettesteken belüli szkriptelemeket, a parancsfájl-változók létrehozását, használatát és frissítését.
- Különböző szkriptnyelvekből használható: Bár a JSP specifikáció jelenleg csak a szkriptek szemantikáját határozza meg a Java programozási nyelvet, nyitva akarjuk hagyni más szkriptnyelvek lehetőségét.
- Meglévő koncepciókra és gépekre építve: Nem akarjuk újra feltalálni azt, ami máshol létezik. Ezenkívül el akarjuk kerülni a jövőbeni konfliktusokat, amikor meg tudjuk előre jelezni őket
Syntax:
Fontolja meg, hogy testGuru címkét hozunk létre, és használhatjuk a taghandlertestTag osztályt, amely felülbírálja a doTag() metódust.
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Ezenkívül fel kell térképeznünk ezt a testTag osztályt a TLD-ben (Tag Library Descriptvagy) mivel a JSP-tároló automatikusan létrehoz egy leképezést az osztályfájl és a TLD-fájlban említett uri között.
JSP címke interfész
- Ennek az osztálynak ki kell bővítenie a SimpleTagSupport osztályt.
- Ennek az osztálynak felül kell írnia a doTag() metódust, amely a SimpleTagSupport osztály része (a felülbírálás a szülőosztálytól örökölt metódus).
- Ez az interfész a JSPTag interfész egy alinterfésze.
- A címke elején és végén végrehajtható módszereket biztosít.
- Ezenkívül le kell térképeznünk ezt az osztályt a TLD-ben, azaz a Tag Library leíróban
Az alábbi példában megvizsgáljuk
A címkefelület módszere
- A doTag() egy olyan metódus, amelyet felül kell bírálnunk, és amely tartalmazza a címke tartalmát.
- Az aktuális JSP-környezetet használja a getJSPContext() segítségével
Példa:
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"); } }
A kód magyarázata:
guruTag.java(TagHandler)
6. kódsor:A guruTag osztály kiterjeszti a SimpleTagSupport osztályt, amely a javax.servlet.JSP jar fájlban található
7. kódsor: Itt felülírjuk a doTag() metódust, amely a JspException és az IOException parancsokat dobja.
9-10. kódsor: Ennél a módszernél a kód beágyazódik az egyéni címkébe, amely meghívásra kerül. Elveszünk egy JspWriter objektumot, amely kinyomtatja a „Guru Tag”-ot.
Custom.tld
6. kódsor: Itt az egyéni címke neve „guruTag”.
7. kódsor:A címkeosztály a taghandlerclass, azaz a guruTag.java. A kezelőfájl teljes elérési útját veszi, amely tartalmazza a fájl helyének könyvtárútvonalát.
Customtag_jsp1.jsp
3. kódsor: Ez a taglib előtag minden címkéhez szükséges, és a hozzáadott előtag 'ex', ezért minden coretag előtagjaként használható, az uri pedig a custom.tld, amely leképezi a címkekezelőt.
11. kódsor: Itt definiáljuk a „guruTag” egyéni címkét, amely meghívja a kezelő osztály doTag() metódust, és a benne lévő kód végrehajtásra kerül.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja
output:
- A kimenetet „GuruTag”-ként kapjuk a guruTag.java-tól, azaz a TagHandler-től, amely felülbírálja a doTag() metódust, és amely a „Guru Tag”-ot írja ki kimenetként.
Összegzésként
- Ebben a részben megismerkedtünk a JSP szabványos címkekönyvtárával, amelyben alapvető címkéket és egyéni címkéket készítettünk.
- Az alapvető címkék közé tartoznak az if, redirect, import, catch címkék, amelyek a JSP-ben alapvető célokra használt címkék voltak.
- Emellett egyéni címkéket is készítettünk, amelyekben meghatározhatjuk a címkéket és használhatjuk a JSP-ben