JSTL (JSP standardna biblioteka oznaka)
U ovom JSTL vodiču vidjet ćemo kako će korištenje različitih JSTL oznaka olakšati JSP kodiranje.
U čemu je JSTL Java?
JSTL zalaže za Java standardne knjižnice oznaka stranica poslužitelja, a to je zbirka prilagođenih biblioteka JSP oznaka koje pružaju uobičajenu funkcionalnost web-razvoja. JSTL je standardna biblioteka oznaka JSP-a.
Prednosti JSTL-a
Ispod su prednosti JSTL-a:
- Standardna oznaka: Pruža bogat sloj prenosive funkcionalnosti JSP stranica. Programeru je lako razumjeti kôd.
- Kod uredan i čist: Dok skripte zbunjuju programere, upotreba JSTL-a čini kod urednim i čistim.
- Automatski JavabeansInterospection podrška: Ima prednost JSTL-a nad JSP skriptama. Ručke jezika JSTL Expression JavaBean kod vrlo jednostavno. Ne trebamo spuštati objekte, koji su dohvaćeni kao atributi s opsegom. Korištenje koda JSP skriptleta bit će komplicirano, a JSTL je tu svrhu pojednostavio.
- Lakše za čitanje ljudima: JSTL se temelji na XML, koji je vrlo sličan HTML-u. Stoga je programerima lako razumjeti.
- Lakše za razumijevanje računalima: Alati kao što su Dreamweaver i naslovnica generiraju sve više i više HTML koda. HTML alati odlično rade formatiranje HTML koda. HTML kod je pomiješan sa kodom skripte. Budući da se JSTL izražava kao oznake usklađene s XML-om, generiranje HTML-a lako je analizirati JSTL kod unutar dokumenta.
JSTL oznake
Osnovne oznake su najčešće korištene oznake u JSP-u. Oni pružaju podršku za
- ponavljanje
- Uvjetna logika
- Uhvati iznimku
- url naprijed
- Preusmjeravanje itd.
Da bismo koristili osnovne oznake, prvo moramo definirati biblioteku oznaka, a ispod je sintaksa za uključivanje biblioteke oznaka.
sintaksa:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Ovdje,
- prefiks se može koristiti za definiranje svih osnovnih oznaka i
- uri je biblioteka tagliba iz koje se uvozi
Pogledajmo neke od osnovnih oznaka u detalje,
1. Van
- Rezultat izraza prikazuje se u izlaznoj oznaci
- Može izravno izbjeći XML oznake. Stoga se ne vrednuju kao stvarne oznake
Sintaksa:
<c:out value="" default="" escapeXML="">
- Ovdje vrijednost predstavlja informaciju za izlaz i obavezna je
- Zadano je neuspjeh u ispisivanju informacija i nije obavezno
- escapeXML – Istina je ako izbjegava XML znakove.
Primjer:
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>
Objašnjenje koda:
Redak koda 3: Ovaj prefiks oznake je potreban za sve oznake, a dodani prefiks je 'c'. Stoga se može koristiti kao prefiks za sve coretagove.
Redak koda 12: Ovdje koristimo coretag out s prefiksom "c" i ovaj out će ispisati vrijednost u oznaci izraza. Stoga će izlaz biti ime
Kada izvršite gornji kod, dobit ćete sljedeći izlaz:
Izlaz:
- Dobivamo vrijednost kao naziv iz osnovne oznake "out" koja će se ispisati u izlaznom toku.
2. Uhvatite
- Hvata svaku iznimku koja se može izbaciti koja se dogodi u tijelu i prikazuje kao izlaz.
- Koristi se za obradu grešaka i njihovo otkrivanje.
Sintaksa:
<c:catchvar="">
Ovdje var predstavlja naziv varijable, koja će sadržavati iznimku koja se može izbaciti.
Primjer:
<%@ 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>
Objašnjenje koda:
Redak koda 3: Ovaj prefiks oznake potreban je za sve oznake, a dodani prefiks je 'c', stoga se može koristiti kao prefiks za sve osnovne oznake
Redak koda 11-13: Coretag catch koristi se za hvatanje iznimke i ispis iznimke. Ovdje se iznimka pokreće kada je 10/0 i ta iznimka ima naziv "guruException".
Redak koda 14: Ispisujemo "guruException".
Kada izvršite kod, dobit ćete sljedeći izlaz:
Izlaz:
- Dobivamo aritmetičku iznimku kao /by zero, i ona se ispisuje u izlazu pomoću varijable “guruException”
3. Uvoz
- Možemo uvesti sadržaj druge datoteke u JSP stranicu kao što smo to učinili JSP uključuje akciju.
- Ovdje također možemo uključiti URL i sadržaj će biti prikazan na toj stranici.
Sintaksa:
<c:importvar="" uri="">
Ovdje je var naziv varijable koji je identifikator koji će sadržavati naziv/uri datoteke. uri je relativno ime datoteke ili uriname.
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>
Objašnjenje koda:
Coretag_jsp31.jsp
Redak koda 3: Ovaj prefiks oznake potreban je za sve oznake, a dodani prefiks je 'c', stoga se može koristiti kao prefiks za sve osnovne oznake
Redak koda 11-12: Ovdje uvozimo datoteku coretag_jsp32.jsp u ovu datoteku pomoću oznake uvoza
Kodna linija 13: Ovdje ispisujemo datoteku coretag_jsp32.jsp koristeći out tag.
Kada izvršite gornji kod, dobit ćete sljedeći izlaz.
Izlaz:
- Coretag_jsp32 se ispisuje u izlazu jer je ova datoteka uvezena u coretag_jsp31.jsp.
4. zaSvakog
- Koristi se za ponavljanje broja elemenata u nizu izjava.
- Isto je kao a Java petlja
Sintaksa:
<c:forEach var="" begin="" end="">
- Ovdje var predstavlja naziv varijable koji će sadržavati naziv brojača
- Početak predstavlja početnu vrijednost brojača
- Kraj će predstavljati njegovu krajnju vrijednost
Primjer:
<%@ 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>
Objašnjenje koda:
Redak koda 3: Ovaj prefiks oznake potreban je za sve oznake, a dodani prefiks je 'c', stoga se može koristiti kao prefiks za sve osnovne oznake
Redak koda 11-13: Ovdje koristimo petlju "forEach" gdje je naziv varijable "gurucount", koja je počela brojati kao 5, a završila kao 10. Ispisujemo varijablu gurucount koja ima brojeve počevši od 5 do 10.
Kada izvršite kod, dobit ćete sljedeći izlaz
Izlaz:
- Rezultat koji dobivamo počinje od 5 do 10.
5. Ako
- Koristi se za Ispitivanje uvjeti.
- Ako se oznaka koristi za testiranje uvjeta je li na temelju toga istinit ili ne, blok koda bi se izvršio.
Sintaksa:
<c:if test="${condition}></c:if>
Ovdje ako je uvjet istinit tada se izvršava niz naredbi.
Primjer:
<%@ 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>
Objašnjenje koda:
Redak koda 3: Ovaj prefiks oznake potreban je za sve oznake, a dodani prefiks je 'c', stoga se može koristiti kao prefiks za sve osnovne oznake
Redak koda 11: Ovdje postavljamo varijablu pod nazivom count na 100
Redak koda 12-14: Ovdje koristimo "if uvjet" gdje provjeravamo je li zbroj jednak 100. Jednako je 100, a zatim dobivamo izlaz kao "Broj je 100."
Kada izvršite gornji kod, dobit ćete sljedeći izlaz
Izlaz:
- Kako je uvjet "ako" istinit, dobivamo izlaz kao "Broj je 100".
6. preusmjeriti
- Koristi se za preusmjeravanje trenutne stranice na drugi URL pružanjem relativnog URL-a ove oznake.
- Podržava kontekstne relativne URL-ove
Sintaksa:
<c:redirect url="" context=""/>
Ovdje je url relativni url na koji se mora preusmjeriti i naziv konteksta lokalne web aplikacije.
Primjer:
<%@ 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>
Objašnjenje koda:
Redak koda 3: Ovaj prefiks oznake potreban je za sve oznake, a dodani prefiks je 'c', stoga se može koristiti kao prefiks za sve osnovne oznake
Redak koda 11: Ovdje koristimo “redirect tag”, gdje specificiramo urlname, a kada kliknemo na tu stranicu preusmjerava se na stranicu koja je dana za preusmjeravanje.
Kada izvršite gornji kod, dobit ćete sljedeći izlaz;
Izlaz:
- Dobivamo izlaz guru99.com url koji je preusmjeren putem coretag_jsp6.jsp
JSTL prilagođene oznake
- To je korisnički definiran JSP jezični element.
- Kada se JSP prevede u servlet, prilagođena oznaka se pretvara u klasu koja poduzima radnje na objektu i poziva se kao rukovatelj oznakama.
- Te radnje kada se servlet izvršava poziva web spremnik.
- Da bismo stvorili korisnički definiranu prilagođenu oznaku, moramo izraditi rukovatelj oznakama koji će proširivati SimpleTagSupport i morati nadjačati metodu doTag().
- Moramo stvoriti TLD gdje trebamo mapirati datoteku klase u TLD-u.
Prednosti prilagođenih oznaka u JSP-u
Evo prednosti prilagođenih oznaka u JSP-u:
- Prijenosni: Radnja opisana u biblioteci oznaka mora biti upotrebljiva u bilo kojem JSP spremniku.
- Jednostavno: Nesofisticirani korisnici moraju biti u stanju razumjeti i koristiti ovaj mehanizam. Dobavljačima JSP funkcionalnosti mora biti lako učiniti je dostupnom korisnicima kao radnju.
- Izražajno: Mehanizam mora podržavati širok raspon radnji, uključujući ugniježđene radnje, elemente skriptiranja unutar tijela radnji, stvaranje, korištenje i ažuriranje varijabli skriptiranja.
- Može se koristiti iz različitih skriptnih jezika: Iako JSP specifikacija trenutno samo definira semantiku za skripte u Java programskog jezika, želimo ostaviti otvorenu mogućnost drugih skriptnih jezika.
- Izgrađeno na postojećim konceptima i strojevima: Ne želimo ponovno izmisliti ono što postoji drugdje. Također, želimo izbjeći buduće sukobe kad god ih možemo predvidjeti
Sintaksa:
Uzmite u obzir da stvaramo oznaku testGuru i možemo koristiti klasu taghandlertestTag, koja će nadjačati metodu doTag().
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Također, morat ćemo mapirati ovu testTag klasu u TLD (Tag Library Descriptili) budući da će JSP spremnik automatski stvoriti mapiranje između datoteke klase i uri-ja koji je spomenut u TLD datoteci.
JSP Tag sučelje
- Ova će klasa morati proširiti klasu SimpleTagSupport.
- Ova će klasa morati nadjačati metodu doTag() koja je dio klase SimpleTagSupport (nadjačavanje je metoda koja je naslijeđena od nadređene klase).
- Ovo sučelje je podsučelje JSPTag sučelja.
- Omogućuje metode za izvođenje na početku i kraju oznake.
- Također, moramo preslikati ovu klasu u TLD tj. deskriptor biblioteke oznaka
Razmatramo u primjeru u nastavku
Metoda sučelja oznaka
- doTag() je metoda koju trebamo nadjačati koja će imati sadržaj za oznaku.
- Uzima trenutni JSP kontekst koristeći getJSPContext()
Primjer:
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"); } }
Objašnjenje koda:
guruTag.java(TagHandler)
Redak koda 6:klasa guruTag proširuje klasu SimpleTagSupport koja je prisutna u javax.servlet.JSP jar
Redak koda 7: Ovdje nadjačavamo doTag() metodu koja izbacuje JspException i IOException.
Redak koda 9-10: U ovoj metodi, kod će biti ugrađen u prilagođenu oznaku koja će biti pozvana. Uzimamo objekt JspWritera i on će ispisati "Guru Tag."
Custom.tld
Redak koda 6: Ovdje je naziv prilagođene oznake "guruTag."
Redak koda 7:Klasa oznake je taghandlerclass, tj. guruTag.java. Potrebna je cijela staza datoteke rukovatelja koja uključuje stazu direktorija lokacije datoteke.
Customtag_jsp1.jsp
Kodna linija 3: Ovaj prefiks oznake je potreban za sve oznake, a dodani prefiks je 'ex', stoga se može koristiti kao prefiks za sve osnovne oznake, a uri je custom.tld koji preslikava rukovatelja oznakama.
Redak koda 11: Ovdje definiramo prilagođenu oznaku "guruTag", koja će pozvati metodu doTag() klase rukovatelja i kod unutar nje će se izvršiti.
Kada izvršite gornji kod, dobit ćete sljedeći izlaz
Izlaz:
- Dobivamo izlaz kao “GuruTag” iz guruTag.java tj. TagHandler, koji nadjačava metodu doTag() i koji ispisuje “Guru Tag” kao izlaz.
rezime
- U ovom odjeljku naučili smo o JSP standardnoj biblioteci oznaka u kojoj smo izradili osnovne oznake i prilagođene oznake.
- Osnovne oznake uključuju oznake for, if, redirect, import, catch koje su bile oznake korištene u osnovne svrhe u JSP-u.
- Također, napravili smo prilagođene oznake u kojima možemo definirati oznake i koristiti ih u JSP-u