Tutoriel JSTL, Exemple de balises JSTL

JSTL signifie JSP Standard Tag Library. JSTL est la bibliothèque de balises standard qui fournit des balises pour contrôler le comportement de la page JSP. Les balises JSTL peuvent être utilisées pour les boucles et les instructions de contrôle, l’internationalisation, le SQL, etc. Nous examinerons en détail les balises JSTL dans ce tutoriel JSTL. Nous avons déjà vu comment nous pouvons utiliser JSP EL et les balises d’action JSP pour écrire du code JSP comme du HTML, mais leur fonctionnalité est très limitée. Par exemple, nous ne pouvons pas effectuer de boucle sur une collection en utilisant EL ou des éléments d’action et nous ne pouvons pas échapper aux balises HTML pour les afficher comme du texte côté client. C’est là que les balises JSTL sont utiles car nous pouvons faire beaucoup plus à partir des balises JSTL.

JSTL

JSTL fait partie de l’API Java EE et est inclus dans la plupart des conteneurs de servlets. Mais pour utiliser JSTL dans nos pages JSP, nous devons télécharger les fichiers JSTL pour notre conteneur de servlets. La plupart du temps, vous pouvez les trouver dans les projets d’exemple du téléchargement du serveur et vous pouvez les utiliser. Vous devez inclure ces bibliothèques dans le répertoire WEB-INF/lib de votre projet d’application web.

Les fichiers JSTL

Les fichiers JSTL sont spécifiques au conteneur, par exemple dans Tomcat, nous devons inclure les fichiers jar jstl.jar et standard.jar dans le chemin de construction du projet. S’ils ne sont pas présents dans le répertoire lib du conteneur, vous devez les inclure dans votre application. Si vous avez un projet Maven, les dépendances suivantes doivent être ajoutées dans le fichier pom.xml, sinon vous obtiendrez l’erreur suivante dans les pages JSP : eclipse Can not find the tag library descriptor for "https://java.sun.com/jsp/jstl/ core"

<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<dependency>
	<groupId>taglibs</groupId>
	<artifactId>standard</artifactId>
	<version>1.1.2</version>
</dependency>

Les balises JSTL

En fonction des fonctions JSTL, elles sont classées en cinq types.

  1. Tags JSTL Core: Les tags JSTL Core fournissent un support pour l’itération, la logique conditionnelle, la capture d’exception, les URL, la redirection de réponse, etc. Pour utiliser les tags JSTL Core, nous devons les inclure dans la page JSP comme indiqué ci-dessous.

    <%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
    

    Dans cet article, nous examinerons les balises JSTL Core importantes.

  2. Tags de formatage et de localisation JSTL: Les tags de formatage JSTL sont fournis pour le formatage des nombres, des dates et le support i18n via les locales et les fichiers de ressources. Nous pouvons inclure ces balises jstl dans JSP avec la syntaxe suivante:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. Tags SQL JSTL: Les tags SQL JSTL fournissent un support pour l’interaction avec les bases de données relationnelles telles que Oracle, MySql, etc. En utilisant les tags SQL JSTL, nous pouvons exécuter des requêtes de base de données, nous incluons ces balises JSTL dans JSP avec la syntaxe suivante:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. Tags JSTL XML: Les tags JSTL XML sont utilisés pour travailler avec des documents XML, tels que l’analyse XML, la transformation des données XML et l’évaluation des expressions XPath. La syntaxe pour inclure les tags JSTL XML dans une page JSP est :

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
    
  5. Tags JSTL Functions: Les tags JSTL fournissent plusieurs fonctions que nous pouvons utiliser pour effectuer des opérations courantes. La plupart d’entre elles sont destinées à la manipulation de chaînes de caractères, telles que la concaténation de chaînes, la division de chaînes, etc. La syntaxe pour inclure les fonctions JSTL dans une page JSP est :

    <%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    

Notez que toutes les URI des tags JSTL standard commencent par https://java.sun.com/jsp/jstl/ et nous pouvons utiliser le préfixe de notre choix, mais il est préférable d’utiliser le préfixe défini ci-dessus car tout le monde les utilise, ce qui ne créera aucune confusion.

Les balises JSTL Core

Les balises JSTL Core sont répertoriées dans le tableau ci-dessous.

JSTL Core Tag Description
<c:out> To write something in JSP page, we can use EL also with this tag
<c:import> Same as jsp:include or include directive
<c:redirect> redirect request to another resource
<c:set> To set the variable value in given scope.
<c:remove> To remove the variable from given scope
<c:catch> To catch the exception and wrap it into an object.
<c:if> Simple conditional logic, used with EL and we can use it to process the exception from <c:catch>
<c:choose> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise>
<c:when> Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’.
<c:otherwise> Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’.
<c:forEach> for iteration over a collection
<c:forTokens> for iteration over tokens separated by a delimiter.
<c:param> used with <c:import> to pass parameters
<c:url> to create a URL with optional query string parameters

Tutoriel JSTL

Voyons quelques exemples d’utilisation des balises JSTL Core dans une application Web simple. Notre projet inclura une classe Java Bean et nous créerons une liste d’objets et définirons des attributs qui seront utilisés dans le JSP. La page JSP montrera comment itérer sur une collection, utiliser une logique conditionnelle avec EL et d’autres utilisations courantes.

Tutoriel JSTL – Classe Java Bean

package com.journaldev.model;

public class Employee {

	private int id;
	private String name;
	private String role;
	public Employee() {
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}

}

Tutoriel JSTL – Classe Servlet

package com.journaldev.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.journaldev.model.Employee;

@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<Employee> empList = new ArrayList<Employee>();
		Employee emp1 = new Employee();
		emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
		Employee emp2 = new Employee();
		emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
		empList.add(emp1);empList.add(emp2);
		request.setAttribute("empList", empList);
		
		request.setAttribute("htmlTagData", "<br/> creates a new line.");
		request.setAttribute("url", "https://www.journaldev.com");
		RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
		rd.forward(request, response);
	}

}

Tutoriel JSTL – Page JSP

home.jsp code:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${exception ne null}">
   <p>Exception is : ${exception} <br>
   Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>

Maintenant, lorsque nous exécutons l’application avec l’URL https://localhost:8080/JSTLExample/HomeServlet, nous obtenons la réponse comme sur l’image ci-dessous. Dans l’exemple JSTL ci-dessus, nous utilisons c:catch pour capturer l’exception dans la méthode de service JSP, ce qui est différent de la Gestion des exceptions JSP avec les configurations des pages d’erreur. C’est tout pour un bref aperçu des balises JSTL et de l’exemple d’utilisation des balises principales JSTL. Référence: Page Wikipedia sur JSTL

Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example