JSTL (bibliothèque de balises standard JSP)
Dans ce didacticiel JSTL, nous verrons comment l'utilisation de différentes balises JSTL facilitera le codage JSP.
Qu'est-ce que JSTL dans Java?
JSTL qui veut dire Java bibliothèque de balises standard des pages du serveur, et il s'agit d'une collection de bibliothèques de balises JSP personnalisées qui fournissent des fonctionnalités de développement Web communes. JSTL est une bibliothèque de balises standard du JSP.
Avantages de JSTL
Voici les avantages de JSTL :
- Balise standard: Il fournit une riche couche de fonctionnalités portables des pages JSP. Il est facile pour un développeur de comprendre le code.
- Code soigné et propre: Comme les scripts confondent le développeur, l'utilisation de JSTL rend le code propre et net.
- Automatique JavaSupport pour l'interospection beans: Il présente un avantage du JSTL par rapport aux scriptlets JSP. Poignées du langage d’expression JSTL JavaCodez le bean très facilement. Nous n'avons pas besoin de downcaster les objets, qui ont été récupérés en tant qu'attributs de portée. L'utilisation du code des scriptlets JSP sera compliquée, et JSTL a simplifié cet objectif.
- Plus facile à lire pour les humains:JSTL est basé sur XML, qui est très similaire au HTML. Il est donc facile à comprendre pour les développeurs.
- Plus facile à comprendre pour les ordinateurs: Des outils tels que Dreamweaver et la page d'accueil génèrent de plus en plus de code HTML. Les outils HTML font un excellent travail de formatage du code HTML. Le code HTML est mélangé au code script. Comme JSTL est exprimé sous forme de balises compatibles XML, il est facile pour la génération HTML d'analyser le code JSTL dans le document.
Balises JSTL
Les balises principales sont les balises les plus fréquemment utilisées dans JSP. Ils apportent un soutien à
- Itération
- Logique conditionnelle
- Attraper l'exception
- URL en avant
- Redirection, etc.
Pour utiliser les balises principales, nous devons d'abord définir la bibliothèque de balises et ci-dessous se trouve la syntaxe pour inclure une bibliothèque de balises.
Syntaxe :
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Ici,
- le préfixe peut être utilisé pour définir toutes les balises principales et
- uri est la bibliothèque de taglib à partir de laquelle il est importé
Voyons quelques-unes des balises principales en détail,
1. Sortie
- Le résultat de l'expression est affiché dans la balise out
- Il peut directement échapper aux balises XML. Par conséquent, ils ne sont pas évalués comme de véritables balises
syntaxe:
<c:out value="" default="" escapeXML="">
- Ici, la valeur représente les informations à la sortie, et elle est obligatoire
- La valeur par défaut est l'échec de la sortie des informations, et ce n'est pas obligatoire
- escapeXML – C'est vrai si cela échappe les caractères XML.
Mise en situation :
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>
Explication du code :
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c ». Par conséquent, il peut être utilisé comme préfixe pour tous les coretags.
Ligne de code 12 : Ici, nous utilisons coretag out avec le préfixe « c » et cela imprimera la valeur dans la balise d'expression. Par conséquent, la sortie sera nom
Lorsque vous exécutez le code ci-dessus, vous obtenez le résultat suivant :
Sortie :
- Nous obtenons la valeur sous forme de nom de la balise principale « out » qui sera imprimée dans le flux de sortie.
2. Attrape
- Il intercepte toute exception pouvant être lancée qui se produit dans le corps et s'affiche en sortie.
- Il est utilisé pour gérer les erreurs et les détecter.
syntaxe:
<c:catchvar="">
Ici, var représente le nom de la variable, qui contiendra une exception pouvant être lancée.
Mise en situation :
<%@ 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>
Explication du code :
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c », il peut donc être utilisé comme préfixe pour toutes les balises core.
Ligne de code 11-13 : Coretag catch est utilisé pour intercepter l’exception et imprimer l’exception. Ici, l'exception est déclenchée lorsque 10/0 et cette exception porte le nom « guruException ».
Ligne de code 14 : Nous imprimons la « guruException ».
Lorsque vous exécutez le code, vous obtiendrez le résultat suivant :
Sortie :
- Nous obtenons une exception arithmétique sous la forme /par zéro, et elle est imprimée dans la sortie en utilisant la variable « guruException »
3. Importation
- Nous pouvons importer le contenu d'un autre fichier dans une page JSP comme nous l'avons fait dans JSP inclut une action.
- Ici, nous pouvons également inclure l'URL et le contenu sera affiché sur cette page.
syntaxe:
<c:importvar="" uri="">
Ici, var est un nom de variable qui est un identifiant, qui contiendra le nom de fichier/uri. uri est un nom de fichier relatif ou 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>
Explication du code :
Coretag_jsp31.jsp
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c », il peut donc être utilisé comme préfixe pour toutes les balises core.
Ligne de code 11-12 : Ici, nous importons le fichier coretag_jsp32.jsp dans ce fichier en utilisant la balise d'importation
Ligne de code 13 : Ici, nous imprimons le fichier coretag_jsp32.jsp en utilisant la balise out.
Lorsque vous exécutez le code ci-dessus, vous obtenez le résultat suivant.
Sortie :
- Coretag_jsp32 est imprimé dans la sortie car ce fichier a été importé dans coretag_jsp31.jsp.
4. pour chaque
- Il est utilisé pour itérer le nombre d’éléments dans une série d’instructions.
- C'est la même chose qu'un Java boucle for.
syntaxe:
<c:forEach var="" begin="" end="">
- Ici, var représente le nom de la variable qui contiendra le nom du compteur
- Le début représente la valeur de début du compteur
- La fin représentera sa valeur finale
Mise en situation :
<%@ 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>
Explication du code :
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c », il peut donc être utilisé comme préfixe pour toutes les balises core.
Ligne de code 11-13 : Ici, nous utilisons la boucle « forEach » où le nom de la variable est « gurucount », qui a commencé à compter à 5 et terminé à 10. Nous imprimons la variable gurucount qui a des nombres commençant de 5 à 10.
Lorsque vous exécutez le code, vous obtenez le résultat suivant
Sortie :
- Le résultat que nous obtenons va de 5 à 10.
5. Si
- Il est utilisé pour Contrôle de qualité conditions.
- Si la balise est utilisée pour tester une condition si elle est vraie ou non, le bloc de code sera exécuté.
syntaxe:
<c:if test="${condition}></c:if>
Ici, si la condition est vraie, une série d'instructions est exécutée.
Mise en situation :
<%@ 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>
Explication du code :
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c », il peut donc être utilisé comme préfixe pour toutes les balises core.
Ligne de code 11 : Ici, nous définissons la variable nommée count sur 100
Ligne de code 12-14 : Ici, nous utilisons la « condition if » où nous vérifions si le compte est égal à 100. S'il est égal à 100, nous obtenons alors le résultat « Le compte est de 100 ».
Lorsque vous exécutez le code ci-dessus, vous obtenez le résultat suivant
Sortie :
- Comme la condition « si » est vraie, nous obtenons le résultat « Le compte est 100 ».
6. rediriger
- Il est utilisé pour rediriger la page actuelle vers une autre URL en fournissant l'URL relative de cette balise.
- Il prend en charge les URL relatives au contexte
syntaxe:
<c:redirect url="" context=""/>
Ici, l'URL est l'URL relative vers laquelle elle doit être redirigée et le nom de contexte de l'application Web locale.
Mise en situation :
<%@ 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>
Explication du code :
Ligne de code 3 : Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est « c », il peut donc être utilisé comme préfixe pour toutes les balises core.
Ligne de code 11 : Ici, nous utilisons la « balise de redirection », où nous spécifions le nom de l'URL, et lorsque nous cliquons sur cette page, elle redirige vers le site qui a été donné pour la redirection.
Lorsque vous exécutez le code ci-dessus, vous obtenez le résultat suivant :
Sortie :
- Nous obtenons l'url de sortie guru99.com qui est redirigée par coretag_jsp6.jsp
Balises personnalisées JSTL
- Il s'agit d'un élément défini par l'utilisateur JSP élément de langage.
- Lorsque JSP est traduit en servlet, la balise personnalisée est convertie en une classe qui agit sur un objet et est appelée en tant que gestionnaire de balises.
- Ces actions lorsque le servlet est exécuté sont invoquées par le conteneur Web.
- Pour créer la balise personnalisée définie par l'utilisateur, nous devons créer le gestionnaire de balises qui étendra SimpleTagSupport et devra remplacer la méthode doTag().
- Nous devons créer un TLD où nous devons mapper le fichier de classe dans TLD.
Avantages des balises personnalisées dans JSP
Voici les avantages des balises personnalisées dans JSP :
- portable: Une action décrite dans une bibliothèque de balises doit être utilisable dans n'importe quel conteneur JSP.
- Simple: Les utilisateurs non avertis doivent être capables de comprendre et d'utiliser ce mécanisme. Les fournisseurs de fonctionnalités JSP doivent pouvoir facilement les mettre à la disposition des utilisateurs sous forme d'actions.
- Expressif: Le mécanisme doit prendre en charge un large éventail d’actions, y compris les actions imbriquées, les éléments de script à l’intérieur des corps d’action, la création, l’utilisation et la mise à jour des variables de script.
- Utilisable à partir de différents langages de script : Bien que la spécification JSP ne définisse actuellement que la sémantique des scripts dans le Java langage de programmation, nous souhaitons laisser ouverte la possibilité d’autres langages de script.
- Construit sur des concepts et des machines existants : Nous ne voulons pas réinventer ce qui existe ailleurs. Nous voulons aussi éviter les conflits futurs chaque fois que nous pouvons les prévoir.
syntaxe:
Considérez que nous créons la balise testGuru et que nous pouvons utiliser la classe taghandlertestTag, qui remplacera la méthode doTag().
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Aussi, nous devrons mapper cette classe testTag en TLD (Tag Library Descriptou) car le conteneur JSP créera automatiquement un mappage entre le fichier de classe et l'uri qui a été mentionné dans le fichier TLD.
Interface de balise JSP
- Cette classe devra étendre la classe SimpleTagSupport.
- Cette classe devra remplacer la méthode doTag() qui fait partie de la classe SimpleTagSupport (la substitution est une méthode héritée de la classe parent).
- Cette interface est une sous-interface de l'interface JSPTag.
- Il fournit des méthodes à exécuter au début et à la fin de la balise.
- Nous devons également mapper cette classe dans le TLD, c'est-à-dire le descripteur de la bibliothèque de balises.
Nous considérons dans l'exemple ci-dessous
Méthode d'interface de balise
- doTag() est une méthode que nous devons remplacer et qui aura le contenu de la balise.
- Il prend le contexte JSP actuel en utilisant getJSPContext()
Mise en situation :
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>
Personnalisé.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"); } }
Explication du code :
guruTag.java(TagHandler)
Ligne de code 6 :La classe guruTag étend la classe SimpleTagSupport qui est présente dans le fichier jar javax.servlet.JSP
Ligne de code 7 : Ici, nous remplaçons la méthode doTag() qui lève JspException et IOException.
Ligne de code 9-10 : Dans cette méthode, le code sera intégré à la balise personnalisée qui sera appelée. Nous prenons un objet de JspWriter, et cela affichera « Guru Tag ».
Personnalisé.tld
Ligne de code 6 : Ici, le nom de la balise personnalisée est « guruTag ».
Ligne de code 7 :La classe de balises est taghandlerclass, c'est-à-dire guruTag.java. Il prend le chemin complet du fichier du gestionnaire qui inclut le chemin du répertoire de l’emplacement du fichier.
Customtag_jsp1.jsp
Ligne de code 3:Ce préfixe taglib est requis pour toutes les balises et le préfixe ajouté est 'ex', il peut donc être utilisé comme préfixe pour toutes les coretags et l'uri est custom.tld qui mappe le gestionnaire de balises.
Ligne de code 11 : Ici, nous définissons la balise personnalisée « guruTag », qui appellera la méthode doTag() de la classe de gestionnaire et le code qu'elle contient sera exécuté.
Lorsque vous exécutez le code ci-dessus, vous obtenez le résultat suivant
Sortie :
- Nous obtenons la sortie sous la forme « GuruTag » de guruTag.java, c'est-à-dire TagHandler, qui remplace la méthode doTag() et qui imprime « Guru Tag » en sortie.
Résumé
- Dans cette section, nous avons découvert la bibliothèque de balises standard JSP dans laquelle nous avons créé des balises principales et des balises personnalisées.
- Les balises principales incluent les balises for, if, redirect, import, catch qui étaient des balises utilisées à des fins de base dans JSP.
- Nous avons également créé des balises personnalisées dans lesquelles nous pouvons définir les balises et les utiliser dans JSP.