JSTL (Bibliotecă de etichete standard JSP)
În acest tutorial JSTL, vom vedea cum utilizarea diferitelor etichete JSTL va ușura codarea JSP.
În ce este JSTL Java?
JSTL standuri pentru Java bibliotecă standard de etichete de pagini de server și este o colecție de biblioteci de etichete JSP personalizate care oferă funcționalități comune de dezvoltare web. JSTL este o bibliotecă de etichete standard a JSP.
Avantajele JSTL
Mai jos sunt avantajele JSTL:
- Etichetă standard: Oferă un strat bogat de funcționalitate portabilă a paginilor JSP. Este ușor pentru un dezvoltator să înțeleagă codul.
- Code Ordonat si curat: Deoarece scriptletele derutează dezvoltatorul, utilizarea JSTL face codul ordonat și curat.
- Automat JavabeansInterospection Support: Are un avantaj de JSTL față de scriptlet-urile JSP. Manerile limbajului JSTL Expression JavaCodul Bean foarte ușor. Nu trebuie să reducem obiectele, care au fost preluate ca atribute delimitate. Utilizarea codului scriptlet-urilor JSP va fi complicată, iar JSTL a simplificat acest scop.
- Mai ușor de citit pentru oameni: JSTL se bazează pe XML, care este foarte asemănător cu HTML. Prin urmare, este ușor de înțeles pentru dezvoltatori.
- Mai ușor de înțeles de către computere: Instrumente precum Dreamweaver și prima pagină generează din ce în ce mai mult cod HTML. Instrumentele HTML fac o treabă excelentă în formatarea codului HTML. Codul HTML este amestecat cu codul scriptlet. Deoarece JSTL este exprimat ca etichete compatibile cu XML, este ușor pentru generarea HTML să analizeze codul JSTL din document.
Etichete JSTL
Etichetele de bază sunt cele mai frecvent utilizate etichete în JSP. Ei oferă sprijin pentru
- Repetare
- Logica condiționată
- Captură excepție
- url înainte
- Redirecționare etc.
Pentru a folosi etichetele de bază, trebuie să definim mai întâi biblioteca de etichete, iar mai jos este sintaxa pentru a include o bibliotecă de etichete.
Sintaxa:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Aici,
- prefixul poate fi folosit pentru a defini toate etichetele de bază și
- uri este biblioteca taglib din care este importat
Să vedem câteva dintre etichetele de bază în detaliu,
1. Afară
- Rezultatul expresiei este afișat în eticheta out
- Poate scăpa direct de etichetele XML. Prin urmare, ele nu sunt evaluate ca etichete reale
Sintaxă:
<c:out value="" default="" escapeXML="">
- Aici valoarea reprezintă informații pentru ieșire și este obligatorie
- Implicit este eșecul de a furniza informații și nu este obligatoriu
- escapeXML – Este adevărat dacă scapă caractere XML.
Exemplu:
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>
Explicația codului:
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”. Prin urmare, poate fi folosit ca prefix pentru toate coretag-urile.
Code Linia 12: Aici folosim coretag out cu prefixul „c” și acest out va tipări valoarea din eticheta expresiei. Prin urmare, ieșirea va fi numele
Când executați codul de mai sus, obțineți următoarea ieșire:
ieșire:
- Obținem valoarea ca nume din eticheta de bază „out”, care se va imprima în fluxul de ieșire.
2. Prinde
- Captează orice excepție care poate fi aruncată care apare în corp și se afișează ca rezultat.
- Este folosit pentru tratarea erorilor și pentru a le prinde.
Sintaxă:
<c:catchvar="">
Aici var reprezintă numele variabilei, care va deține excepția care poate fi aruncată.
Exemplu:
<%@ 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>
Explicația codului:
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile
Code Linia 11-13: Coretag catch este folosit pentru a captura excepția și pentru a imprima excepția. Aici excepția este ridicată când 10/0 și acea excepție are numele „guruException”.
Code Linia 14: Imprimăm „guruException”.
Când executați codul, veți obține următoarea ieșire:
ieșire:
- Obținem excepția aritmetică ca / la zero și este tipărită în rezultat folosind variabila „guruException”
3. Importați
- Putem importa un alt conținut de fișier într-o pagină JSP, așa cum am făcut-o în JSP include acțiune.
- Aici putem include și URL iar conținutul va fi afișat pe pagina respectivă.
Sintaxă:
<c:importvar="" uri="">
Aici var este un nume de variabilă care este un identificator, care va deține numele de fișier/uri. uri este nume de fișier relativ sau 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>
Explicația codului:
Coretag_jsp31.jsp
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile
Code Linia 11-12: Aici importăm fișierul coretag_jsp32.jsp în acest fișier folosind eticheta de import
Code Linia 13: Aici tipărim fișierul coretag_jsp32.jsp folosind eticheta out.
Când executați codul de mai sus, obțineți următoarea ieșire.
ieșire:
- Coretag_jsp32 este tipărit în rezultat deoarece acest fișier a fost importat în coretag_jsp31.jsp.
4. pentruFiecare
- Este folosit pentru a repeta numărul de elemente din serii de instrucțiuni.
- Este la fel ca a Java forloop.
Sintaxă:
<c:forEach var="" begin="" end="">
- Aici var reprezintă numele variabilei care va deține numele contorului
- Begin reprezintă valoarea de început a contorului
- End va reprezenta valoarea finală
Exemplu:
<%@ 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>
Explicația codului:
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile
Code Linia 11-13: Aici folosim bucla „forEach” unde numele variabilei este „gurucount”, care a început să conteze ca 5 și s-a terminat ca 10. Tipărim variabila gurucount care are numere care încep de la 5 la 10.
Când executați codul, obțineți următoarea ieșire
ieșire:
- Rezultatul pe care îl obținem începe de la 5 la 10.
5. Dacă
- Este folosit pentru Testarea condiții.
- Dacă eticheta este folosită pentru a testa o condiție dacă este adevărată sau nu pe baza acesteia, blocul de cod va fi executat.
Sintaxă:
<c:if test="${condition}></c:if>
Aici, dacă condiția este adevărată, se execută o serie de instrucțiuni.
Exemplu:
<%@ 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>
Explicația codului:
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile
Code Linia 11: Aici setăm variabila numită ca număr la 100
Code Linia 12-14: Aici folosim „condiția dacă” în care verificăm dacă numărul este egal cu 100. Este egal cu 100, apoi obținem rezultatul ca „Numărul este 100”.
Când executați codul de mai sus, obțineți următoarea ieșire
ieșire:
- Deoarece condiția „dacă” este adevărată, obținem rezultatul „Numărul este 100”.
6. redirecționare
- Este folosit pentru redirecționarea paginii curente către o alta URL prin furnizarea relativului URL a acestei etichete.
- Suportă contextul relativ URLs
Sintaxă:
<c:redirect url="" context=""/>
Aici url este adresa URL relativă către care trebuie redirecționată și numele context al aplicației web locale.
Exemplu:
<%@ 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>
Explicația codului:
Code Linia 3: Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „c”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile
Code Linia 11: Aici folosim „eticheta de redirecționare”, unde specificăm urlname-ul, iar când facem clic pe acea pagină, acesta redirecționează către site-ul care a fost dat pentru redirecționare.
Când executați codul de mai sus, obțineți următoarea ieșire;
ieșire:
- Obținem url-ul de ieșire guru99.com care este redirecționat de coretag_jsp6.jsp
Etichete personalizate JSTL
- Este definit de utilizator JSP element de limbaj.
- Când JSP este tradus într-un servlet, eticheta personalizată este convertită într-o clasă care acționează asupra unui obiect și este numită ca un handler de etichetă.
- Acele acțiuni când servletul este executat sunt invocate de containerul web.
- Pentru a crea eticheta personalizată definită de utilizator, trebuie să creăm un handler de etichetă care va extinde SimpleTagSupport și trebuie să suprascriem metoda doTag().
- Trebuie să creăm TLD unde trebuie să mapam fișierul de clasă în TLD.
Avantajele etichetelor personalizate în JSP
Iată avantajele etichetelor personalizate în JSP:
- Portabil: O acțiune descrisă într-o bibliotecă de etichete trebuie să fie utilizabilă în orice container JSP.
- Simplu: Utilizatorii nesofisticați trebuie să poată înțelege și utiliza acest mecanism. Furnizorilor de funcționalități JSP trebuie să le fie ușor să le facă disponibile utilizatorilor ca acțiuni.
- Expresiv: Mecanismul trebuie să suporte o gamă largă de acțiuni, inclusiv acțiuni imbricate, elemente de scriptare în interiorul corpurilor de acțiune, crearea, utilizarea și actualizarea variabilelor de scriptare.
- Utilizabil din diferite limbaje de scripting: Deși specificația JSP în prezent definește doar semantica pentru scripturile din Java limbaj de programare, vrem să lăsăm deschisă posibilitatea altor limbaje de scripting.
- Construit pe concepte și mașini existente: Nu vrem să reinventăm ceea ce există în altă parte. De asemenea, dorim să evităm conflictele viitoare ori de câte ori le putem prezice
Sintaxă:
Să considerăm că creăm un testGuru etichetă și putem folosi clasa taghandlertestTag, care va suprascrie metoda doTag().
<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}
De asemenea, va trebui să mapam această clasă testTag în TLD (Biblioteca de etichete Descriptsau) ca container JSP va crea automat o hartăping între fișierul de clasă și uri, care a fost menționat în fișierul TLD.
Interfață JSP Tag
- Această clasă va trebui să extindă clasa SimpleTagSupport.
- Această clasă va trebui să suprascrie metoda doTag() care face parte din clasa SimpleTagSupport (suprascrierea este o metodă care este moștenită de la clasa părinte).
- Această interfață este o subinterfață a interfeței JSPTag.
- Acesta oferă metode de a efectua la începutul și la sfârșitul etichetei.
- De asemenea, trebuie să mapam această clasă în TLD, adică descriptorul Bibliotecii de etichete
Luăm în considerare în exemplul de mai jos
Metoda interfeței Tag
- doTag() este o metodă pe care trebuie să o înlocuim și care va avea conținutul etichetei.
- Preia contextul JSP curent folosind getJSPContext()
Exemplu:
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>
Personalizat.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");
}
}
Explicația codului:
guruTag.java(TagHandler)
Code Linia 6:Clasa guruTag extinde clasa SimpleTagSupport care este prezentă în jar javax.servlet.JSP
Code Linia 7: Aici suprascriem metoda doTag() care aruncă JspException și IOException.
Code Linia 9-10: În această metodă, codul va fi încorporat într-o etichetă personalizată care va fi apelată. Luăm un obiect Jsp.Writer, și care va imprima „Guru Zi."
Personalizat.tld
Code Linia 6: Aici numele etichetei personalizate este „guruTag”.
Code Linia 7:Clasa de etichete este taghandlerclass, adică guruTag.java. Este nevoie de calea completă a fișierului handler, care include calea directorului locației fișierului.
Customtag_jsp1.jsp
Code Line 3:Acest prefix taglib este necesar pentru toate etichetele, iar prefixul adăugat este „ex”, prin urmare poate fi folosit ca prefix pentru toate coretag-urile, iar uri este custom.tld care mapează handlerul de etichetă.
Code Linia 11: Aici definim eticheta personalizată „guruTag”, care va apela metoda doTag() din clasa handlerului și va fi executat codul din ea.
Când executați codul de mai sus, obțineți următoarea ieșire
ieșire:
- Obținem rezultatul ca „Guru„Etichetă” din guruTag.java, adică TagHandler, care suprascrie metoda doTag() și care afișează „Guru „Etichetă” ca ieșire.
Rezumat
- În această secțiune, am aflat despre biblioteca standard de etichete JSP în care am făcut etichete de bază și etichete personalizate.
- Etichetele de bază includ pentru, dacă, redirecționarea, importul, etichetele de captură care erau etichete utilizate în scopuri de bază în JSP.
- De asemenea, am făcut etichete personalizate în care putem defini etichetele și le putem folosi în JSP







