JEE_JSP_JSTL (S3)

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 33

Java Server Pages

Rappel d’une Servlet


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class FirstServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
// Récupérer les données de la requête
String n=request.getParameter("nom");
// Traitement
…….
//Affichage des résultats
out.println("<html><body>");
out.println("<h1>Votre nom est:"+n+"</h1>");
out.printlnout.println("<body></html>");
…….
out.close();
}
}

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)

RequestScope variable contenue dans la portée de la requête (HttpServletRequest)

SessionScope variable contenue dans la portée de la session (HttpSession)

ApplicationScope variable contenue dans la portée de l'application (ServletContext)


Param paramètre de la requête http
ParamValues paramètres de la requête sous la forme d'une collection
Header en-tête de la requête
HeaderValues en-têtes de la requête sous la forme d'une collection
InitParam paramètre d'initialisation
Cookie cookie
PageContext objet PageContext de la page

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

<% String lib="G.INF 2"; %>


Welcome : ${libelle}

<% String lib="G.INF 2";


pageContext.setAttribute("libelle", lib);%>
Welcome : ${libelle}

74
Expression Language
● EL fournit les opérateurs de comparaison suivants:

Concept Condition EL Résultat


Numérique inférieur à ${1 < 2} vrai
Numérique inférieur à (Less than) ${1 lt 2} vrai
Numérique supérieur à (Greater than) ${1 gt 2} faux
Numérique supérieur ou égal à ${1 >= 1} vrai
Numérique inférieur ou égal à (Less equals) ${1 le 1} vrai
Numérique égal à ${1 == 1} vrai
Numérique égal à (equal) ${1 eq 1} vrai
Numérique non égal à ${1 != 2} vrai
Numérique non égal à (not equal) ${1 ne 2} vrai
Alphabétique supérieur que ${'abe' > 'ade'} faux
Alphabétique égal à (Equals) ${'abe' eq 'abe'} vrai
Alphabétique non égal à (Not equals) ${'abe' ne 'ade'} vrai

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)

Operateur Rôle Exemple


. Obtenir une propriété d'un objet ${param.nom}
${param[" nom "]}
[] Obtenir une propriété par son nom ou son indice
${row[1]}
Teste si un objet est null ou vide si c'est une chaîne de
Empty ${empty param.nom}
caractère. Renvoie un booléen

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

<%@ 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>
<html>
<head>
<title>Exemples de JSTL</title>
</head>
<body>
<c:out value="Hello" /><br/>
</body>
</html>
78
 JSTL &
JSTL EL Tags
Core
● Le tag set permet de stocker une variable dans une portée particulière (page, request,
session ou application).
● Le tag out permet d’afficher la valeur d’une variable, ce tag est équivalent à <%= ...%>.
● Le tag remove permet de supprimer une variable.
● Le tag catch permet de gérer les exceptions.
● Le tag if est utilisé pour réaliser une condition.
● Le tag choose est utilisé pour des cas mutuellement exclusifs (équivalent du switch).
● Le tag foreach est utilisé pour réaliser des itérations.
● Le tag forTokens est utilisé pour découper une chaîne selon un ou plusieurs
séparateurs.
● Le tag import permet d’accéder à une ressource via son URL pour l’inclure ou l’utiliser
dans la page JSP.
● Le tag redirect permet de réaliser une redirection vers une nouvelle URL

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)

<c:set var= "montantHT" scope="session" value=‘${8900}' />


<c:set var="TVA" scope="session" value='${0.20}' />
<p>Montant HT: <c:out value='${montantHT}' /><p>
<p>Montant TTC: <c:out value= '${montantHT*(1+TVA)}' /><p>

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>

● <c:choose>:Traitement conditionnel exclusif


<c:set var="note" scope="session" value="${16.75}" />
<p> Votre note est :<c:out value="${note}" /></p>
<c:choose>
<c:when test="${note>= 0 && note < 10}">Ajourné.</c:when>
<c:when test="${note>= 10 && note <12}">Mention Passable.</c:when>
<c:when test="${note>= 12 && note <14}">Mention Assez-Bien.</c:when>
<c:when test="${note>= 14 && note <16}">Mention Bien.</c:when>
<c:when test="${note>= 16 && note <=20}">Mention Très Bien.</c:when>
<c:otherwise>Note invalide ...</c:otherwise>
</c:choose>

81
JSTL Core Tags
● <c:forEach>: Itérer sur une collection

<c:forEach var="i" begin="1" end ="5" >


Item <c:out value ="${i}" /><p>
</c:forEach>

● <c:forTokens>:Itérer sur des éléments d'une String

<c:forTokens items="GInf-GInd-GElec" delims="-" var="opt">


<c:out value="${opt}"/><p>
</c:forTokens>

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>

<c:set var="date" value= "<%= new Date() %>" />


<p> Objet Date : <c:out value= "${date}" />

<p> Format Date :


<fmt:formatDate type="date" value="${date}"/>

<p> Format Date :


<fmt:formatDate type="time" value="${date}"/>

<p> Format Date et Temps style(short) :


<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${date}"/>

<p> Format Date et Temps style(medium) :


<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${date}" />

<p> Format Date et Temps style(long) :


<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${date}" />

</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

Vous aimerez peut-être aussi