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.

  • 🏷️ Definizione di JSTL: Una raccolta standard di librerie di tag JSP personalizzate per attività web comuni.
  • ✨ vantaggi: Produce codice pulito e portatile, più facile da leggere sia per gli esseri umani che per gli strumenti rispetto agli scriptlet.
  • 🔧 Tag principali: out, catch, import, forEach, if e redirect gestiscono output, errori, include, cicli e condizioni.
  • 🔁 Iterazione e logica: forEach esegue cicli sugli intervalli, mentre if e catch aggiungono la gestione condizionale e delle eccezioni.
  • ️ Tag personalizzati: Crea tag definiti dall'utente estendendo SimpleTagSupport, sovrascrivendo doTag() e mappandoping in un TLD.
  • 📄 Interfaccia tag: La libreria dei tag Descripto (TLD) mappa i nomi dei tag alle rispettive classi di gestione per il contenitore JSP.

JSTL - Libreria di tag standard JSP

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:

  1. Etichetta standard: Fornisce un ricco livello di funzionalità portabile delle pagine JSP. È facile per uno sviluppatore comprendere il codice.
  2. Code Ordinato e pulito: Poiché gli scriptlet confondono lo sviluppatore, l'utilizzo di JSTL rende il codice ordinato e pulito.
  3. 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.
  4. Più facile da leggere per gli esseri umani: JSTL è basato su XML, che è molto simile all'HTML. Quindi, è facile da capire per gli sviluppatori.
  5. 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:

Tag principali JSTL - Uscita

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:

Tag principali JSTL: cattura

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.

Tag principali JSTL: importazione

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

Tag principali JSTL: forEach

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

Tag principali JSTL - Se

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;

Tag principali JSTL - Reindirizzamento

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

Interfaccia tag JSP

Produzione:

  • Otteniamo l'output come "GuruTag” da guruTag.java, ovvero TagHandler, che sovrascrive il metodo doTag() e che stampa “Guru Etichetta " come output".

DOMANDE FREQUENTI

JSTL ha cinque gruppi di tag: core, formattazione (I18N), SQL, XML e funzioni. I tag core gestiscono l'iterazione e la logica, mentre i tag formattazione, SQL, XML e funzioni si occupano di localizzazione, database, XML e utilità per le stringhe.

JSTL utilizza tag leggibili simili a XML per la logica, mentre gli scriptlet incorporano il raw Java in JSP. JSTL produce pagine più pulite e manutenibili ed evita la mescolanza Java codice con markup HTML.

Un TLD è un file XML che mappa i nomi dei tag personalizzati alle rispettive classi di gestione. Il contenitore JSP legge il TLD per sapere quale Java classe da eseguire per ogni tag personalizzato.

Gli assistenti basati sull'intelligenza artificiale possono generare tag JSTL, scrivere gestori di tag personalizzati, convertire scriptlet in JSTL e spiegare il linguaggio delle espressioni. Accelerano lo sviluppo di pagine JSP mentre gli sviluppatori esaminano il codice generato.

Sì. Gli strumenti di IA possono analizzare il codice degli scriptlet e riscriverlo utilizzando tag core JSTL equivalenti e linguaggio di espressione, aiutandoping Modernizzare le pagine JSP legacy preservandone la funzionalità.

Riassumi questo post con: