JEE_JSP_JSTL (S3)
JEE_JSP_JSTL (S3)
JEE_JSP_JSTL (S3)
54
Introduction
● Les servlets Java sont très intéressantes afin de fournir des traitements, exécutés coté
serveur, sur les pages HTML à renvoyer au client.
● Cela permet, notamment, de renvoyer des pages dont le contenu provient de bases de
données.
● Certains aspects de cette technologie qui sont ennuyeux ???
● Plus précisément, au niveau de l'intégration du code HTML au sein de la classe Java.
● En effet, chaque tag Java est renvoyé au client, par l'intermédiaire de println.
out.println("<HTML>"); out.println("<BODY>");
● Cela n'est pas d'une lisibilité absolue.
● De plus, imaginez que vous ayez un infographiste dans votre équipe. Lui demander
d'intervenir au niveau d'une classe de code Java n'est peut-être pas la meilleure idée
● En réponse à ce besoin de simplification de l'intégration des deux langages (HTML et
Java), Une seconde technologie est proposée : les JSP (Java Server Pages).
55
Introduction
● Une Java Server Page (JSP) est une page html avec du code s’exécutant coté serveur.
● Le code peut être du java, ou bien une sur-couche (ex : JSTL),
● Une page JSP ressemble plus à une page HTML qu'à une classe Java.
● Une JSP permet de générer des pages web dynamiques,
● Une JSP est transformée par un moteur JSP en une servlet.
● En bref, on peut dire que :
− Les servlets c’est du code html à l’intérieur du code java
− Alors que JSP, c’est du code java à l’intérieur du code HTML
56
Une premiere JSP
57
Eléments syntaxiques d’une JSP
● Une page JSP peut être formée par les éléments suivants :
− Les expressions
− Les déclarations
− Les directives
− Les scriptlets
− Les actions
58
Expressions
● Les expressions JSP sont, des expressions Java qui vont être évaluées à l'intérieur d'un
appel de méthode print.
● Une expression commence par les caractères <%= et se termine par les caractères %>.
● Comme l'expression est placée dans un appel de méthode, il est interdit de terminer
l'expression via un point-virgule.
● Syntaxe: <%=expression%>
Equivalent à: out.println(expression) ;
● Exemple : <%=new Date()%>
Equivalent à: out.println(new Date()) ;
59
Déclarations
● Dans certains cas, un peu complexe, il est nécessaire d'ajouter des méthodes et des
attributs à la servlet qui va être générée (en dehors de la méthode de service).
● Une construction JSP particulière permet de répondre à ces besoins. Elle commence par
les caractères <%! et se termine, par les caractères %>.
● Voici un petit exemple d'utilisation.
● Exemple:
60
Directives
● Une directive permet de spécifier des informations qui vont servir à configurer et à influer
sur le code de la servlet générée.
● Ce type de construction se repère facilement étant donné qu'une directive commence par
les trois caractères <%@.
● Notons principalement deux directives :
− <%@ page ... %> et
− <%@ include ... %>
● Voyons de plus près quelques unes des possibilités qui vous sont offertes.
61
Directive <%@ page .. %>
● La directive <%@ page .. %> permet de pouvoir spécifier des informations utiles pour la
génération et la compilation de la servlet.
● En fait, cette directive accepte de nombreux paramètres dont les principaux sont:
− <%@ page language="java" %>
− <%@ page import= "package|classe %>
− <%@ page session="true|false" %>
− <%@ page extends="classe" %>
− <%@ page errorPage="url" %>
− <%@ page isErrorPage="true|false" %>
62
Directive <%@ include .. %>
● La directive <%@ include ... %> est très utile si plusieurs pages se doivent de partager
une même ensemble d'information.
● C'est souvent le cas avec les entêtes et les pieds de pages. Dans ce cas, codez ces
parties dans des fichiers séparés et injectez les, via cette directive, dans tous les autre
fichiers qui en ont besoin.
● Voici un petit exemple d'utilisation de cette directive:
63
Scriptlets
● Les scriptlets correspondent aux blocs de code introduit par le caractères <% et se
terminant par %>.
● Ils servent à ajouter du code dans la méthode de service.
● Le code Java du scriptlet est inséré tel quel dans la servlet générée : la vérification, par le
compilateur, du code aura lieu au moment de la compilation totale de la servlet équivalent.
● Exmple:
64
Les actions
● Les actions constituent une autre façon de générer du code Java à partir d'une page JSP.
● Les actions se reconnaissent facilement, syntaxiquement parlant : il s'agit de tag XML
ressemblant à <jsp:tagName ... />.
● Cela permet d'indiquer que le tag fait partie du namespace (espace de noms) jsp. Le nom
du tag est préétabli.
● Enfin, le tag peut, bien entendu comporter plusieurs attributs.
65
Les actions
● Il existe plusieurs actions différentes. Les principales sont les suivantes :
− <jsp:include> : Inclusion coté serveur
Exemple : <jsp:include page= "entete.jsp" />
− <jsp:forward> : Redirection vers une page
Exemple : <jsp:forward page="affiche.jsp" />
− <jsp:useBean> : Instanciation d’un objet java (java bean)
Exemple : <jsp:useBean id="jbName" class="TheClass" scope="session" />
− <jsp:setProperty> : Cette action, permet de modifier une propriété sur un objet créé via l'action
<jsp:useBean ...>
Exemple : <jsp:setProperty name="jbName" property="XXX" value="<%=
javaExpression %>" />
− <jsp:getProperty> : cette action est l'inverse de la précédente : elle permet de retourner dans le
flux HTML, la valeur de la propriété considérée.
Exemple : <jsp:getProperty name="jbName" property="XXX" />
66
JSP vs Servlet
● En fait, il n'y a pas une technologie qui est, de manière absolue, meilleur qu'une autre.
● Elles ont, toutes les deux des points forts et des inconvénients.
● Dans les deux cas, l'inconvénient majeur est qu'on mixe deux types de code : du code
HTML de description de la page, et du code Java implémentant le comportement
souhaité.
● Or, on peut au moins dire qu'il y a deux types d'informaticiens pouvant intervenir sur le
développement d'une application web : les infographistes et les développeurs.
● Chacun d'eux cherchant au maximum à éviter l'autre type de code.
● Le mieux est donc de chercher à séparer ces deux types d'informations.
● Dans ce but, on peut dire qu'il y a deux solutions intéressantes.
● Vous pouvez utiliser le modèle MVC (Modèle Vue Contrôleur).
● Chaque URL invoque une servlet.
67
JSTL et EL
JSTL
● La JavaServer Pages Standard Tag Library (JSTL) est un composant de la plate-
forme JEE de développement.
● Elle étend la spécification JSP en ajoutant une bibliothèque de balises pour les tâches
courantes, comme :
− le travail sur des fichiers XML,
− l'exécution conditionnelle,
− les boucles
− l'internationalisation.
− …
● La JSTL, en tant que bibliothèque de balises JSP, propose de développer une page JSP
sans y utiliser de code Java directement ce qui permet aux web designers de concevoir
des pages dynamiques complexes sans connaissances préalable du langage Java.
71
Expression Language
● JSTL propose un langage nommé EL (Expression Langage) qui permet de faire
facilement référence à des objets Java accessibles dans les différents contextes de la
JSP (page, requête, session ou application).
● Il permet de placer à n'importe quel endroit d'une page JSP des expressions qui sont
évaluées et remplacées par le résultat de leur évaluation.(à la place d'une expression
<%=expressionJava%>)
● La syntaxe est la suivante : ${ expression }
<%= session.getAttribute("personne").getNom()%>
${sessionScope.personne.nom}
72
Expression Language
● EL possède par défaut les variables suivantes :
Variable Rôle
PageScope variable contenue dans la portée de la page (PageContext)
73
Expression Language
● EL ne permet pas l'accès aux variables locales.
● Pour pouvoir accéder à de telles variables, il faut obligatoirement en créer une copie dans
une des portées particulières : page, request, session ou application
74
Expression Language
● EL fournit les opérateurs de comparaison suivants:
75
Expression Language
● EL fournit les opérateurs de comparaison suivants:
égaux à (equals) == eq
Opérateur Description
Pas égaux (Not equals) != ne
&& Et
Moins que (Less than) < lt
|| Ou
Plus grand que(Greater than) > gt
Moins que ou égaux à
<= le ${(guess >= 10) && (guess <= 20)}
(Less than or equals)
${ guess >= 10 || guess <= 20 }
Plus grand ou égaux à
>= ge
(Greater than or equals)
76
JSTL
● La JSTL étend la spécification JSP en ajoutant de nombreuses balises pour des tâches courantes.
● Elle est composée de plusieurs bibliothèques :
− Core Tags (préfixe c) exposent tous les tags de base de la JSTL pour l’affichage, la gestion des
variables, les boucles, les conditionnelles, etc.,
<%@ taglib prefix="c " uri= "http://java.sun.com/jsp/jstl/core"%>
− Formatting Tags (préfixe fmt) exposent toutes les fonctionnalités d'affichage de données non triviales :
les dates formatées, les nombres formatés, les messages internationalisés, etc.
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix= "fmt"%>
− XML tags (préfixe x) pour l’analyse et la transformation (XSLT) des pages XML. Cette librairie permet
par exemple de lire des flux XML via HTTP, de les analyser, de les transformer par XSLT, puis de les
afficher sous différentes formes.
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x "%>
− SQL tags (préfixe sql) pour la connexion aux bases de données, les requêtes, les transactions, etc.,
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
− Functions Tags (préfixe fn) présentent des fonctions standards dont la majorité sont pour la
manipulation des chaine de caractères
<%@ tagl uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
77
Hello JSTL
● Télécharger les bibliothèques :
− taglibs-standard-impl-1.2.5.jar
− taglibs-standard-spec-1.2.5.jar
● https://tomcat.apache.org/download-taglibs.cgi
79
JSTL Core Tags
● <c:out> : permet d’afficher la valeur d’une variable, ce tag est équivalent à <%= ...%>
<c:out value='${montantHT}' />
● <c:set>: permet de stocker une variable dans une portée particulière (page, request,
session ou application)
80
JSTL Core Tags
● <c:if>:Traitement conditionnel
<c:set var="montantHT" scope="session" value="${1000}" />
<p>Montant HT:<c:out value="${montantHT}" /><p>
<c:if test="${montantHT >= 6000}">
<p>Montant TTC:<c:out value="${montantHT*1.2}" /><p>
</c:if>
<c:if test="${montantHT < 6000}">
<p>Montant TTC:<c:out value="${montantHT*1.1}" /><p>
</c:if>
81
JSTL Core Tags
● <c:forEach>: Itérer sur une collection
82
JSTL Core Tags
<!DOCTYPE html>
public class UserBeans { <html>
private String FirstName; <head>
private String LastName; <meta http-equiv="Content-Type" content="text/html;
private String Function; charset=UTF-8">
<title>Exemples de JSTL</title>
public UserBeans(String firstName, String </head>
lastName, String function) { <body>
super(); <%!List<UserBeans> users = new ArrayList<UserBeans>();%>
FirstName = firstName; <%
LastName = lastName; users.add(new UserBeans("Ahmed", "Ali", "Prof"));
Function = function; users.add(new UserBeans("mohammed", "Naimi", "Std"));
} users.add(new UserBeans("Rami", "Rafi", "Admin"));
request.setAttribute("users", users);
%>
<table style="border: 1px"solid; >
<tr bgcolor=#ccffcc>
<%@page import="org.exemples.beans.UserBeans"%> <td size=12>First Name</td><td>Last Name</td><td>Function</td>
<%@page import="java.util.ArrayList"%> </tr>
<%@page import="java.util.List"%> <c:forEach var="user" items="${users}" >
<%@ page language="java" contentType="text/html; <tr bgcolor=#e6ffff>
charset=UTF-8" <td>${user.firstName}</td>
pageEncoding="UTF-8"%> <td>${user.lastName}</td>
<%@ taglib prefix="c" <td>${user.function}</td>
uri="http://java.sun.com/jsp/jstl/core"%> </tr>
</c:forEach>
</table></body></html>
83
JSTL Core Tags
● <c:redirect>: permet de réaliser une redirection vers une nouvelle URL
<c:redirect url="hello.jsp"/>
● <c:import>: permet d’accéder à une ressource via son URL pour l’inclure ou l’utiliser
dans la page JSP
<c:import var="data" url= "hello.jsp" />
<c:out value="${data}"/>
84
JSTL Formatting Tags
<fmt:formatDate>
<%@ page import= "java.util.Date" %>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri= "http://java.sun.com/jsp/jstl/fmt" %>
<html><head><title>Format Date</title></head><body>
</body></html>
85
JSTL Formatting Tags
<fmt:formatNumber>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix= "fmt" uri= "http://java.sun.com/jsp/jstl/fmt" %>
<html> <head> <title>Format Number</title></head>
<body>
<c:set var="montant" value= "39800.34567" />
<p>Montant :<c:out value= "${montant}" ></c:out>
<p> Monétaire:
<fmt:formatNumber type= "number" pattern= "###.## DH " value= "${montant}" />
<p>Porcentage %:
<fmt:formatNumber type= "percent" maxIntegerDigits= "5" maxFractionDigits= "2" value= "${montant}" />
</body></html>
86
JSTL Function Tags
● <fn:>
<%@ taglib prefix= "c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix= "fn" uri= "http://java.sun.com/jsp/jstl/functions"%>
<html> <head> <title>Function Fromat</title></head>
<body>
<c:set var="ensa" value="Ecole Nationale des Sciences Appliquées" />
Longuer ENSA: ${fn:length(ensa)}<br>
ENSA en miniscule : ${fn:toLowerCase(ensa)}<br>
ENSA en majuscule : ${fn:toUpperCase(ensa)}<br>
</body>
</html>
87