JSTL (libreria di tag standard JSP)
⚡ Riepilogo intelligente
JSP Standard Tag Library (JSTL) è una raccolta di librerie di tag JSP personalizzate che forniscono funzionalità comuni per lo sviluppo web, come iterazione, logica condizionale, gestione delle eccezioni, importazione e reindirizzamento, rendendo il codice JSP più pulito, portatile e più facile da leggere rispetto agli scriptlet.
In cosa consiste JSTL? Java?
JSTL sta per Java libreria di tag standard delle pagine server ed è una raccolta di librerie di tag JSP personalizzate che forniscono funzionalità comuni di sviluppo web. JSTL è una libreria di tag standard del JSP.
Vantaggi di JSTL
Di seguito sono riportati i vantaggi di JSTL:
- Etichetta standard: Fornisce un ricco livello di funzionalità portabile delle pagine JSP. È facile per uno sviluppatore comprendere il codice.
- Code Ordinato e pulito: Poiché gli scriptlet confondono lo sviluppatore, l'utilizzo di JSTL rende il codice ordinato e pulito.
- Automatico JavaBeanSupporto per l'interispezione: Ha il vantaggio di JSTL rispetto agli scriptlet JSP. Maniglie del linguaggio delle espressioni JSTL JavaCodice Bean molto facilmente. Non è necessario effettuare il downcast degli oggetti, che sono stati recuperati come attributi con ambito. L'uso del codice degli scriptlet JSP sarà complicato e JSTL ha semplificato questo scopo.
- Più facile da leggere per gli esseri umani: JSTL è basato su XML, che è molto simile all'HTML. Quindi, è facile da capire per gli sviluppatori.
- Più facile da capire per i computer: Strumenti come Dreamweaver e la prima pagina generano sempre più codice HTML. Gli strumenti HTML fanno un ottimo lavoro nel formattare il codice HTML. Il codice HTML è mescolato con il codice scriptlet. Poiché JSTL è espresso come tag conformi a XML, è facile per la generazione HTML analizzare il codice JSTL all'interno del documento.
Tag JSTL
I tag principali sono i tag utilizzati più frequentemente in JSP. Forniscono supporto per
- Iterazione
- Logica condizionale
- Cattura eccezione
- URL in avanti
- Reindirizzamento, ecc.
Per utilizzare i tag principali dobbiamo prima definire la libreria di tag e di seguito è riportata la sintassi per includere una libreria di tag.
Sintassi:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Qui,
- il prefisso può essere utilizzato per definire tutti i tag principali e
- uri è la libreria di taglib da cui viene importato
Vediamo alcuni dei tag principali in dettaglio,
1. Fuori
- Il risultato dell'espressione viene visualizzato nel tag out
- Può sfuggire direttamente ai tag XML. Pertanto non vengono valutati come tag effettivi
Sintassi:
<c:out value="" default="" escapeXML="">
- Qui il valore rappresenta le informazioni sull'output ed è obbligatorio
- L'impostazione predefinita prevede l'impossibilità di fornire informazioni e non è obbligatoria
- escapeXML – È vero se esegue l'escape dei caratteri XML.
Esempio:
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>
Spiegazione del codice:
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c". Pertanto, può essere utilizzato come prefisso per tutti i coretag.
Code Linea 12: Qui stiamo usando coretag out con il prefisso "c" e questo out stamperà il valore nel tag espressione. Pertanto, l'output sarà name
Quando esegui il codice sopra, ottieni il seguente output:
Produzione:
- Otteniamo il valore come nome dal tag principale "out" che verrà stampato nel flusso di output.
2. Cattura
- Rileva qualsiasi eccezione lanciabile che si verifica nel corpo e la mostra come output.
- Viene utilizzato per gestire gli errori e rilevarli.
Sintassi:
<c:catchvar="">
Qui var rappresenta il nome della variabile, che conterrà un'eccezione lanciabile.
Esempio:
<%@ 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>
Spiegazione del codice:
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c", quindi può essere utilizzato come prefisso per tutti i coretag
Code Linea 11-13: Coretag catch viene utilizzato per catturare l'eccezione e stampare l'eccezione. Qui l'eccezione viene sollevata quando 10/0 e l'eccezione ha il nome "guruException".
Code Linea 14: Stiamo stampando la “guruException”.
Quando esegui il codice, otterrai il seguente output:
Produzione:
- Stiamo ottenendo un'eccezione aritmetica come /per zero e viene stampata nell'output utilizzando la variabile "guruException"
3. Importare
- Possiamo importare il contenuto di un altro file in una pagina JSP come abbiamo fatto in JSP include l'azione.
- Qui possiamo anche includere URL e il contenuto verrà visualizzato su quella pagina.
Sintassi:
<c:importvar="" uri="">
Qui var è un nome di variabile che è un identificatore, che conterrà il nome file/uri. uri è il nome file relativo o 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>
Spiegazione del codice:
Coretag_jsp31.jsp
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c", quindi può essere utilizzato come prefisso per tutti i coretag
Code Linea 11-12: Qui stiamo importando il file coretag_jsp32.jsp in questo file utilizzando il tag di importazione
Code Linea 13: Qui stiamo stampando il file coretag_jsp32.jsp utilizzando il nostro tag.
Quando si esegue il codice sopra riportato, si ottiene il seguente output.
Produzione:
- Coretag_jsp32 viene stampato nell'output poiché questo file è stato importato in coretag_jsp31.jsp.
4. per ciascuno
- Viene utilizzato per ripetere il numero di elementi in una serie di istruzioni.
- È lo stesso di a Java forloop.
Sintassi:
<c:forEach var="" begin="" end="">
- Qui var rappresenta il nome della variabile che manterrà il nome del contatore
- Begin rappresenta il valore iniziale del contatore
- End rappresenterà il suo valore finale
Esempio:
<%@ 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>
Spiegazione del codice:
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c", quindi può essere utilizzato come prefisso per tutti i coretag
Code Linea 11-13: Qui utilizziamo il ciclo "forEach" in cui il nome della variabile è "gurucount", che ha iniziato il conteggio come 5 e terminato il conteggio come 10. Stiamo stampando la variabile gurucount che ha numeri che vanno da 5 a 10.
Quando esegui il codice, ottieni il seguente output
Produzione:
- L'output che stiamo ottenendo inizia da 5 a 10.
5. Se
- È usato per Collaudo condizioni.
- Se il tag viene utilizzato per verificare se una condizione è vera o meno in base a questa, il blocco di codice verrebbe eseguito.
Sintassi:
<c:if test="${condition}></c:if>
Qui se la condizione è vera vengono eseguite una serie di istruzioni.
Esempio:
<%@ 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>
Spiegazione del codice:
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c", quindi può essere utilizzato come prefisso per tutti i coretag
Code Linea 11: Qui stiamo impostando la variabile denominata count su 100
Code Linea 12-14: Qui stiamo usando la "condizione if" in cui controlliamo se il conteggio è uguale a 100. Se è uguale a 100, otteniamo l'output come "Il conteggio è 100".
Quando esegui il codice sopra, ottieni il seguente output
Produzione:
- Poiché la condizione "se" è vera, otteniamo l'output come "Il conteggio è 100".
6. reindirizzamento
- Viene utilizzato per reindirizzare la pagina corrente a un'altra URL fornendo il relativo URL di questo tag.
- Supporta il contesto relativo URLs
Sintassi:
<c:redirect url="" context=""/>
Qui l'URL è l'URL relativo al quale deve essere reindirizzato e il nome del contesto dell'applicazione Web locale.
Esempio:
<%@ 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>
Spiegazione del codice:
Code Linea 3: Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "c", quindi può essere utilizzato come prefisso per tutti i coretag
Code Linea 11: Qui utilizziamo il "tag di reindirizzamento", dove specifichiamo il nome dell'URL e quando facciamo clic su quella pagina reindirizza al sito che è stato fornito per il reindirizzamento.
Quando esegui il codice sopra, ottieni il seguente output;
Produzione:
- Otteniamo l'URL di output guru99.com che viene reindirizzato da coretag_jsp6.jsp
Tag personalizzati JSTL
- È definito dall'utente JSP elemento linguistico.
- Quando JSP viene tradotto in un servlet, il tag personalizzato viene convertito in una classe che agisce su un oggetto e viene chiamata come gestore di tag.
- Quelle azioni quando viene eseguito il servlet vengono richiamate dal contenitore web.
- Per creare il tag personalizzato definito dall'utente, dobbiamo creare il gestore di tag che estenderà SimpleTagSupport e dovrà sovrascrivere il metodo doTag().
- Dobbiamo creare TLD dove dobbiamo mappare il file di classe in TLD.
Vantaggi dei tag personalizzati in JSP
Ecco i vantaggi dei tag personalizzati in JSP:
- Portatile: Un'azione descritta in una libreria di tag deve essere utilizzabile in qualsiasi contenitore JSP.
- semplice: Gli utenti non sofisticati devono essere in grado di comprendere e utilizzare questo meccanismo. I venditori di funzionalità JSP devono trovare facile renderla disponibile agli utenti come azioni.
- Espressivo: Il meccanismo deve supportare un'ampia gamma di azioni, tra cui azioni nidificate, elementi di scripting all'interno dei corpi delle azioni, creazione, utilizzo e aggiornamento di variabili di scripting.
- Utilizzabile da diversi linguaggi di scripting: Sebbene la specifica JSP definisca attualmente solo la semantica per gli script in Java linguaggio di programmazione, vogliamo lasciare aperta la possibilità di altri linguaggi di scripting.
- Basato su concetti e macchinari esistenti: Non vogliamo reinventare ciò che esiste altrove. Inoltre, vogliamo evitare conflitti futuri ogni volta che possiamo prevederli.
Sintassi:
Consideriamo che stiamo creando un testGuru tag e possiamo usare la classe taghandlertestTag, che sovrascriverà il metodo doTag().
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Inoltre, dovremo mappare questa classe testTag in TLD (Tag Library Descriptoppure) come contenitore JSP creerà automaticamente una mappaping tra il file di classe e l'URI menzionato nel file TLD.
Interfaccia tag JSP
- Questa classe dovrà estendere la classe SimpleTagSupport.
- Questa classe dovrà sovrascrivere il metodo doTag() che fa parte della classe SimpleTagSupport (l'override è un metodo ereditato dalla classe genitore).
- Questa interfaccia è una sottointerfaccia dell'interfaccia JSPTag.
- Fornisce metodi da eseguire all'inizio e alla fine del tag.
- Inoltre, dobbiamo mappare questa classe nel TLD, ovvero nel descrittore della libreria di tag
Stiamo considerando nell'esempio seguente
Metodo di interfaccia dei tag
- doTag() è un metodo che dobbiamo sovrascrivere e che avrà il contenuto del tag.
- Richiede il contesto JSP corrente utilizzando getJSPContext()
Esempio:
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"); } }
Spiegazione del codice:
guruTag.java(TagHandler)
Code Linea 6:La classe guruTag estende la classe SimpleTagSupport presente nel jar javax.servlet.JSP
Code Linea 7: Qui stiamo sovrascrivendo il metodo doTag() che lancia JspException e IOException.
Code Linea 9-10: In questo metodo, il codice verrà incorporato in un tag personalizzato che verrà richiamato. Stiamo prendendo un oggetto JspWritere che stamperà “Guru Giorno."
Custom.tld
Code Linea 6: Qui il nome del tag personalizzato è "guruTag".
Code Linea 7:La classe del tag è taghandlerclass, ovvero guruTag.java. Richiede il percorso completo del file del gestore che include il percorso della directory in cui si trova il file.
Customtag_jsp1.jsp
Code Linea 3:Questo prefisso taglib è richiesto per tutti i tag e il prefisso aggiunto è "ex", quindi può essere utilizzato come prefisso per tutti i coretag e l'uri è custom.tld che mappa il gestore dei tag.
Code Linea 11: Qui stiamo definendo il tag personalizzato "guruTag", che chiamerà il metodo doTag() della classe del gestore e il codice al suo interno verrà eseguito.
Quando esegui il codice sopra, ottieni il seguente output
Produzione:
- Otteniamo l'output come "GuruTag” da guruTag.java, ovvero TagHandler, che sovrascrive il metodo doTag() e che stampa “Guru Etichetta " come output".








