Cours Java Server Pages - Tutorial JSP - Exercices JSP
JavaServer Pages
Le
JavaServer Pages ou JSP est une technologie basée sur Java
qui permet aux développeurs de générer dynamiquement du code HTML, XML ou tout autre type de page web.
La
technologie permet au code Java et à certaines actions prédéfinies d'être
ajoutés dans un contenu statique.
La
syntaxe du JSP ajoute des balises XML, appelées actions JSP, qui
peuvent être utilisées pour appeler des fonctions. De plus, la technologie permet
la création de bibliothèques de balises JSP (taglib)
qui agissent comme des extensions au HTML ou au XML. Les bibliothèques de
balises offrent une méthode indépendante de la plate-forme
pour étendre les fonctionnalités d'un serveur
HTTP.
Les
JSP sont compilées par un compilateur JSP pour devenir des servlets Java. Un
compilateur JSP peut générer un servlet Java en code source Java qui peut à son
tour être compilé par le compilateur Java, ou peut générer le pseudo-code
Java interprétable directement. Dans les deux cas, il est bon de comprendre
comment le compilateur JSP transforme la page en servlet Java. Voir l' exemple
de page JSP fourni en fin d'article, avec le servlet généré et la page HTML
résultante.
Syntaxe JSP
Une
JSP peut être séparée en plusieurs parties :
- les données
statiques comme le HTML
- les directives
- les scripts et
variables
- les actions
- les balises
personnalisées
Les
données statiques sont écrites dans la réponse HTTP exactement comme elles
apparaissent dans le fichier source. Un fichier JSP sans code Java et sans
action serait donc un fichier valide. Dans ce cas, les mêmes données seraient
envoyées à chaque fois que la page serait demandée par le serveur HTTP. Bien
sûr, l'intérêt des JSP est d'insérer des données dynamiques à l'intérieur de ce
contenu statique.
Les
directives contrôlent comment le compilateur doit générer le servlet. Elles
sont placées entre les symboles « <%@ » et « %> ».
Les directives suivantes sont disponibles :
Directive
|
Description et
exemple d'utilisation
|
||||||||||
include
|
Cette
directive indique au compilateur d'inclure un autre fichier dans la page.
C'est comme si le contenu du fichier à inclure était directement copié dans
le fichier courant. Cette fonctionnalité est similaire à celle offerte par le
préprocesseur C.
<%@ include file="unAutreFichier" %>
|
||||||||||
page
|
Il y a
plusieurs options à cette directive :
<%@ page contentType="text/html" %> // contentType <%@ page isErrorPage=false %> // pas une page d'erreur <%@ page isThreadSafe=true %> //JSP sécuritaire aux threads |
||||||||||
taglib
|
Directive
qui indique qu'une bibliothèque de balises doit être utilisée. Elle requiert
qu'un préfixe soit utilisé (comme un namespace en C++)
et l'URI de la description de la
bibliothèque.
<%@
taglib prefix="myprefix"
uri="taglib/mytag.tld" %> |
Les
variables suivantes sont toujours disponibles dans une page JSP :
- out : le JSPWriter utilisé pour envoyer la
réponse HTTP au client.
- page : le
servlet lui-même.
- pageContext :
une instance PageContext qui
contient les données associées à la page entière. Une page HTML donnée
peut être passée entre plusieurs JSP.
- request :
objet représentant la requête HTTP.
- response :
objet représentant la réponse HTTP.
- session :
la session HTTP, qui peut être utilisée pour conserver de l'information à
propos d'un utilisateur d'une requête à une autre.
Il
y a 3 types basiques d'éléments qui permettent d'insérer du code Java dans le
servlet.
Élément
|
Description et
exemple
|
Déclaration (!)
|
Une
déclaration permet d'insérer du code directement dans la classe du servlet.
Elle peut être utilisée pour définir une variable globale à la classe ou pour
créer des méthodes Java.
<%! int variableDeClasse = 0; %>
Ou<jsp:declaration>
int variableDeClasse = 0;
</jsp:declaration>
|
Scriptlet
|
Un
Scriptlet est utilisé pour placer du code dans la méthode _jspService()
du Servlet. C'est généralement l'élément utilisé pour placer tout code Java,
sauf les méthodes et les variables de classe.
<% int variable = 0;
out.println("On peut aussi écrire des variables : " + variable); %>
Ou<jsp:scriptlet>
int variable = 0;
out.println("On peut aussi écrire des variables : " + variable);
</jsp:scriptlet>
|
Expression (=)
|
Cet
élément sert à afficher une expression. Ce code est donc ajouté à la méthode _jspService(),
comme paramètre à un appel out.print().
Voici une variable : <%= variable %>
OuVoici une variable : <jsp:expression> variable </jsp:expression>
|
Commentaire (--)
|
Utilisé
pour faire un commentaire dans le code JSP. Le texte dans un commentaire JSP
ne sera pas envoyé au client ni compilé dans le servlet.
<%-- Voici un commentaire JSP --%>
|
Les
actions JSP sont des balises XML qui appellent des fonctions sur serveur HTTP.
Les actions suivantes sont disponibles.
Action
|
Description et
exemple
|
jsp:include
|
Agit
de façon similaire à l'appel d'une sous-routine. Le contrôle est
temporairement donné à une autre page, soit un autre fichier JSP, soit un
fichier statique. Après le traitement de l'autre page, le contrôle est
redonné à
<jsp:include page="pageÀInclure.jsp" >
<jsp:param name="paramètre" value="valeur" />
</jsp:include>
|
jsp:param
|
Peut
être utilisé dans un bloc jsp:include, jsp:forward ou jsp:params. Il indique
un paramètre à être ajouté aux paramètres actuels de la requête. Pour un
exemple, voir celui de jsp:include et jsp:forward.
|
jsp:forward
|
Donne
le contrôle de la requête et de la réponse à une autre page JSP ou à un
servlet. Le contrôle est définitivement donné. Pour être appelée, aucune
ecriture ne doit avoir eu lieu sur la sortie (out) de la servlet.
<jsp:forward page="pagePrenantContrôle.jsp" >
<jsp:param name="paramètre" value="valeur" />
</jsp:forward>
|
jsp:plugin
|
Les
versions plus vieilles de Netscape et de Internet Explorer utilisaient différents types
de balises pour ajouter une applet. Cette action génère le code nécessaire
pour le navigateur utilisé par le client.
<jsp:plugin type="applet" height="100%" width="100%"
codebase="/applets"
code="MonApplet" >
<jsp:params>
<jsp:param name="enableDebug" value="true" />
</jsp:params>
<jsp:fallback>
Votre navigateur ne supporte pas les applets Java.
</jsp:fallback>
</jsp:plugin>
|
jsp:fallback
|
Le
contenu à montrer si le client ne supporte pas l'affichage d'applet (utilisé
avec jsp:plugin). Pour un exemple, voir celui de jsp:plugin.
|
jsp:getProperty
|
Retrouve
la valeur d'une propriété provenant d'un Java bean.
<jsp:getProperty name="nomDeBean" property="derniereModif" /> |
jsp:setProperty
|
Règle
la valeur d'une propriété d'un Java bean.
<jsp:setProperty name="nomDeBean" property="derniereModif" value="<%= new Date()%>" />
|
jsp:useBean
|
Crée
ou réutilise un Java bean déjà existant pour pouvoir l'utiliser dans la page.
<jsp:useBean id="nomDeBean" class="package.Bean" scope="request" /> |
En
plus des actions JSP pré-définies, les développeurs peuvent ajouter leurs
propres actions personnalisées en utilisant l'API d'extension de balises
JSP (JSP Tag Extension API). Pour ce faire, il faut écrire une classe
Java qui implémente une des interfaces de balises et écrire le fichier XML de
description de balise qui donne les caractéristiques du marqueur et les classes
qui l'implémentent.
Exemple
Voici
un exemple de code source JSP,
suivi du code source du Servlet Java qui pourrait être généré par un serveur (par exemple Apache Tomcat) et de la
page HTML qui en résultera. Le code Java et
HTML de cette page est celui généré par Apache
Tomcat 4.
<%-- Ceci est un commentaire JSP --%>
<%@page contentType="text/html"%>
<%@page errorPage="erreur.jsp"%>
<%-- Importation d'un paquetage (package) --%>
<%@page import="java.util.*"%>
<html>
<head><title>Page JSP</title></head>
<body>
<%-- Déclaration d'une variable globale à la classe --%>
<%! int nombreVisites = 0; %>
<%-- Définition de code Java --%>
<% //Il est possible d'écrire du code Java ici
Date date = new Date();
// On peut incrémenter une variable globale pour compter le nombre
// d'affichage, par exemple.
nombreVisites++;
%>
<h1>Exemple de page JSP</h1>
<%-- Impression de variables --%>
<p>Au moment de l'exécution de ce script, nous sommes le <%= date %>.</p>
<p>Cette page a été affichée <%= nombreVisites %> fois!</p>
</body>
</html>
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*;
import java.util.*;
public class example_jsp extends HttpJspBase {
int nombreVisites = 0;
private static java.util.Vector _jspx_includes;
public java.util.List getIncludes() {
return _jspx_includes;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
javax.servlet.jsp.PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=ISO-8859-1");
pageContext = _jspxFactory.getPageContext(this, request, response,
"erreur.jsp", true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("<body>\n\n");
out.write("\n");
out.write("\n\n");
out.write("\n");
//Il est possible d'écrire du code Java ici
Date date = new Date();
// On peut incrémenter une variable globale pour compter le nombre
// d'affichage, par exemple.
nombreVisites++;
out.write("\n");
out.write("<h1>Exemple de page JSP");
out.write("</h1>\n");
out.write("\n");
out.write("<p>Au moment de l'exécution de ce script, nous sommes le ");
out.print( date );
out.write(".");
out.write("</p>\n");
out.write("<p>Cette page a été affichée ");
out.print( nombreVisites );
out.write(" fois!");
out.write("</p>\n");
out.write("</body>\n");
out.write("</html>\n");
} catch (Throwable t) {
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (pageContext != null) pageContext.handlePageException(t);
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
}
}
}
<html>
<head><title>Page JSP</title></head>
<body>
<h1>Exemple de page JSP</h1>
<p>Au moment de l'exécution de ce script, nous sommes le Mon Dec 16 19:31:28 EST 2002.</p>
<p>Cette page a été affichée 5 fois!</p>
</body>
</html>
Article plus récent Article plus ancien