Pages dynamiques: JSP
Une page HTML est une page JSP valide, c'est une page statique. Il suffit de renommer un fichier .html en .jsp. Par exemple, renommez votre fichier index.html en index.jsp.
L’inverse est faux, une page JSP contient souvent des passages incompréhensibles tels quels pour un navigateur. Ces passages sont des traitements à effectuer par le serveur Java. Ce sont ces traitements qui rendent une page dynamique.
L'élément de base est un scriplet. Un scriptlet est délimitée par <% et %>. Entre les deux, vous pouvez écrire du code Java classique. Surtout vous pouvez inclure un “out.println()” qui va écrire dans la page.
Voici un exemple minimal, le code Java est en rouge:
<html>
<head>
<title>JSP Page</title>
</head>
<body>
<h1>
<%
out.println("Hello World "+(99*8));
%>
</h1>
</body>
</html>
<head>
<title>JSP Page</title>
</head>
<body>
<h1>
<%
out.println("Hello World "+(99*8));
%>
</h1>
</body>
</html>
Dans votre page, essayez d'inclure la scriplet suivante:
<% out.println(new Date()); %>
Cette instruction devrait permettre d'inclure la date d'aujourd'hui. Cependant, Eclipse vous mentionnera qu’il manque un import pour la classe Date.
La solution rapide est de remplacer:
<% out.println(new Date()); %>
par
<% out.println(new java.util.Date()); %>
Vous verrez alors la date s'afficher dans la page.
Note: "out" désigne la page web produite, "System.out" permet d'écrire dans la console du serveur Java.
Imbrication dans les JSP
Un usage très courant des JSP est de générer un élément HTML pour une liste Java. L'exemple suivant permet par exemple de créer un morceau de code pour i allant de 0 à 4.
<body>
<%
for (int i = 0 ; i<5 ; i++){
%>
<p>
un exemple pour taper du HTML facile dans une boucle
avec un index <%= i %>
</p>
<%
}
%>
</body>
On peut inclure un passage de HTML dans une scriplet et rouvrir une scriplet et ainsi de suite. Il n'y a pas de limite à l'imbrication dans une page. Attention quand même à bien indenter votre code, la lisibilité du code imbriquée devient vite difficile.
Import dans des pages JSP
Un import permet de ne pas avoir à taper le nom complet d'une classe. En tout début de fichier JSP, vous pouvez ajouter:
<%@ page import="java.util.Date" %>
Une fois la classe importée, vous pourrez utiliser le nom simple de la classe soit "Date" au lieu java.util.Date. Attention, l'import de rend pas Date accessible, elle est toujours accessible; il facilite juste l'écriture du nom de la classe en rendant le nom de package (java.util dans mon exemple) implicite.
Différentes balises JSP
Il existe plusieurs couples de balises utilisées par JSP, voici les principales:
<%java code %>
permet d'exécuter le code Java (scriptlet)
<%= expression %>
affiche directement la valeur de l'expression. Ne nécessite pas de ;
<%-- commentaire --%>
commentaires multi-lignes
<%! int x = 10; %>
déclare un champ ou méthode pour l'ensemble de la page
<%@ page import="java.util.Date" %>
permet les importations, souvent en début de page
Objets implicites JSP
Une page JSP permet un accès à certains objets créés implicitement pour le développeur. Par exemple l'instruction "out.println();" utilisait l'objet out de la classe javax.servlet.jsp.JspWriter et qui permet d'écrire la page produite.
Un autre objet intéressant est request qui permet d'accéder à la requête HTTP et en particulier ses paramètres. Par exemple, la page suivante:
<html>
<body>
<h1>
<%
out.println("Bonjour" + request.getParameter("id"));
%>
</h1>
</body>
</html>
<body>
<h1>
<%
out.println("Bonjour" + request.getParameter("id"));
%>
</h1>
</body>
</html>
Affichera le paramètre id. Pour l'URL http://localhost:7070/fichier.jsp?id=75, la page affichera "Bonjour 15".
Finalement, l'objet session permet de stocker des informations dans la session utilisateur (ces informations sont partagées entre les pages) à travers ses méthodes getAttribute et setAttribute. Par exemple, si une première page contient le code suivant:
<html>
<body>
<h1>
<%
session.setAttribute("count",4);
%>
</h1>
</body>
</html>
Une deuxième page pourra accéder à cette information ainsi
<html>
<body>
<h1>
<%
out.println("Le compteur vaut " + session.getAttribute("count"));
%>
</h1>
</body>
</html>
Finalement, l'objet session permet de stocker des informations dans la session utilisateur (ces informations sont partagées entre les pages) à travers ses méthodes getAttribute et setAttribute. Par exemple, si une première page contient le code suivant:
<html>
<body>
<h1>
<%
session.setAttribute("count",4);
%>
</h1>
</body>
</html>
Une deuxième page pourra accéder à cette information ainsi
<html>
<body>
<h1>
<%
out.println("Le compteur vaut " + session.getAttribute("count"));
%>
</h1>
</body>
</html>
Nous reviendrons plus tard sur le fonctionnement de la session.
Fragments
La plupart des pages d'un site vont partager de grandes portions de code. Vous souhaiterez sans doute mettre en commun ses portions afin de faciliter le changement d'un menu (par exemple) à travers toutes vos pages.La norme JSP offre cette possibilité à travers les fragments JSP. Il suffit de créer un fichier d'extension jspf contenant la portion de page JSP en question. Ensuite pour insérer ce fragment dans une page (et souvent dans plusieurs pages) il suffit de répéter le passage suivant:
<%@ include file="chemin/vers/fichier.jspf" %>
La plupart du temps, on placera les fragments dans un répertoire à l'intérieur du répertoire WEB-INF dans webapp. Cela permet de cacher les fragments et de les ranger dans un répertoire dédié.
Dans votre projet, identifier les parties communes à toutes vos pages et créer un fichier jspf pour chacune d'elles. remplacer le code par le include nécessaire.
Lecture
Une description plus en détails des JSP:
http://fr.wikipedia.org/wiki/JavaServer_Pages
Aucun commentaire:
Enregistrer un commentaire