Cours Java Server Page
Cours Java Server Page
La servlet est sauvegardée puis elle est exécutée. Les • la séparation des traitements et de la
appels suivants de la JSP sont beaucoup plus rapides présentation : la page web peut être écrite par
car la servlet, conservée par le serveur, est directement un designer et les tags Java peuvent être
exécutée. ajoutés ensuite par le développeur. Les
traitements peuvent être réalisés par des
JSP a donc un fonctionnement lourd qui se déroule composants réutilisables (des Java beans).
en 4 temps : alors que dans une servlet, les traitements et la
présentation sont regroupés
• La requete est recu par le serveur
• les JSP sont basées sur les servlets : tout ce qui
• La page demandé est traduite en servlets est fait par une servlet pour la génération de
pages dynamiques peut être fait avec une JSP.
• Puis elle est compilée
Les JSP et les technologies concurrentes
Enfin elle est exécutée et la page html est transmise
au client Il existe plusieurs technologies dont le but est similaire
aux JSP notamment ASP, PHP et [Link]. Chacune de
Modèles d'accès à JSP ces technologies possèdent des avantages et des
inconvénients dont voici une liste non exhaustive.
Il est possible d'accèder aux fichiers JSP de de la
manière suivante :
Repose sur la plate- Open source Facile à mettre en Repose sur la plate-
forme Java dont elle Nombreuses oeuvre forme .Net dont elle
hérite des avantages bibliothèques et hérite des avantages
sources d'applications Wysiwyg et
principaux avantages
libres disponibles événementiel
Facile à mettre en Code behind pour
oeuvre séparation affichage /
traitements
Ces produits sont librement téléchargeables sur le site Attention : Les tags sont sensibles à la casse.
de Sun à l'adresse suivante :
[Link]
ENI Initiation à JSP Dr RV p.3
3.1. Les tags de directives <%@ … %> Les options définies par cette directive sont de la forme
option=valeur.
Les spécifications des JSP définissent trois directives :
Valeur par Autre valeur
Option Valeur
• page : permet de définir des options de défaut possible
configuration autoFlush Une chaine «true» «false»
«none» ou
• include : permet d'inclure des fichiers statiques «nnnkb» (nnn
dans la JSP avant la génération de la servlet buffer Une chaine «8kb»
indiquant la
valeur)
• taglib : permet de définir des tags personnalisés
Une chaîne
Leur syntaxe est la suivante : contentType contenant le
type mime
<%@ directive attribut="valeur" ... %> Une chaîne
errorPage contenant
une URL
3.2. La directive page extends Une classe
Une classe
Cette directive doit être utilisée dans toutes les pages import ou un
JSP : elle permet de définir des options qui s'applique à package.*
toute la JSP. info Une chaîne
Elle peut être placée n'importe ou dans le source mais il isErrorPage Une chaîne «false» «true»
est préférable de la mettre en début de fichier, avant isThreadSafe Une chaîne «true» «false»
même le tag <HTML>. Elle peut être utilisée plusieurs langage Une chaîne «java»
fois dans une même page mais elle ne doit définir la session Une chaîne «true» «false»
valeur d'une option qu'une seule fois, sauf pour l'option
import.
Exemple : • errorPage="relativeURL"
descriptif de la JSP. Le texte fourni sera renvoyé <title>Page de test de la directive page</title>
par la méthode getServletInfo() de la servlet </head>
générée. <body>
<h1> Page de test de la directive page</h1>
Bla bla bla...
• isErrorPage="true|false"
</body>
</html>
Cette option permet de préciser si la JSP génère
un page d'erreur. La valeur true permet d'utiliser
l'objet Exception dans la JSP 3.3. La directive include
Il est possible d'utiliser dans ces tags plusieurs objets Exemple : Insertion de la date dans la page
définis par les JSP. HTML
3.4.1. Le tag de déclarations <%! … %>
<%@ page import="[Link].*" %>
Ce tag permet de déclarer des variables ou des <HTML>
méthodes qui pourront être utilisées dans la JSP. Il ne <HEAD>
génère aucun caractère dans le fichier HTML de sortie. <TITLE>Essai de page JSP</TITLE>
</HEAD>
La syntaxe est la suivante : <BODY>
<p align="center">Date du jour :
<%! declarations %> <%= new Date() %>
</p>
Exemple : </BODY>
</HTML>
<%! int i = 0; %>
<%! dateDuJour = new [Link](); %>
Résultat :
Les variables ainsi déclarées peuvent être utilisées dans Date du jour : Thu Feb 15 11:15:24 CET 2001
les tags d'expressions et de scriptlets.
Il est possible de déclarer plusieurs variables dans le L'expression est évaluée et convertie en chaîne avec un
même tag en les séparant avec des ‘ ;'. appel à la méthode toString(). Cette chaîne est insérée
dans la page HTML en remplacement du tag. Il est ainsi
Ce tag permet aussi d'insérer des méthodes dans le possible que le résultat soit une partie ou la totalité d'un
corps de la servlet. tag HTML ou même JSP.
Exemple :
<HTML>
<HEAD><TITLE>Test</TITLE>
</HEAD>
<BODY> Exemple :
<%!
ENI Initiation à JSP Dr RV p.6
Exemple :
Par défaut, le code inclus dans le tag est inséré dans la
méthode service de la servlet générée à partir de la
JSP. <%@ page import="[Link].*" %>
ENI Initiation à JSP Dr RV p.7
<HTML>
<HEAD> EXEMPLE FINAL
<TITLE>Essai de page JSP</TITLE> <%@ page import = “[Link], [Link].* “%>
</HEAD> <HTML>
<BODY> <BODY>
<!-- Cette page a ete generee le <%= new Date() %> --> <%
<p>Bonjour</p> // Déclaration
</BODY> ! int a, b,s ;
</HTML> Date d ;
int produit (int a, int b)
{ return a*b ;}
Résultat : %>
<%
<HTML> / /Scripplet
<HEAD> a=2;
<TITLE>Essai de page JSP</TITLE> b=5;
</HEAD> s=a+b;
<BODY> d=new Date();
<!-- Cette page a ete generee le Thu Feb 15 int p = produit (a,b);
11:44:25 CET 2001 --> [Link](“<B> Produit = ”+ p+ “</B>”);
<p>Bonjour</p> %>
</BODY> < !-- Tage d’expression -->
</HTML> Somme = <% = s %> <BR>
Nous sommes le <%=d%>
</BODY>
Le contenu d'une expression incluse dans des
</HTML>
commentaires est dynamique : sa valeur peut changer à
chaque génération de la page en fonction de son
contenu.
Exemple : ou bien
<HTML>
<HEAD> <a href = “[Link]” ? nom=”rabe”& prenom =”koto” >
<TITLE>Essai de page JSP</TITLE> Envoyer </a>
</HEAD>
<BODY> [Link]
<%-- Commentaires de la page JSP --%>
<p>Bonjour</p> <HTML>
</BODY> <BODY>
</HTML> <% String nom = [Link](“nom”);
String prenom = [Link](“prenom”);
[Link](“<B> Anarana= ”+ nom+ “</B><BR>”);
Résultat : [Link](“<B> Fanampin’anarana= ”+ prenom+
<HTML> “</B>”);%>
<HEAD><TITLE>Essai de page JSP</TITLE> <H2>Bonjour <%= nom %></H2>
</HEAD> </BODY>
<BODY> </HTML
<p>Bonjour</p>
</BODY>
</HTML>
Exemple 2 : Formulaire HTML
<form action="[Link]"
Ce tag peut être utile pour éviter l'exécution de code lors method=post>
de la phase de débuggage.
ENI Initiation à JSP Dr RV p.8
3.6. Les tags d'actions L'attribut class permet d'indiquer la classe du bean
l'instance créée. Le bean est accessible durant toute la Comme les paramètres de la requête sont toujours
session. fournis sous forme de String, une conversion est
réalisée en utilisant la méthode valueOf() du wrapper du
Le tag <jsp:useBean> recherche si une instance du type de la propriété.
bean existe avec le nom et la portée précisée. Si elle
n'existe pas, alors une instance est créée. Si il y a Exemple :
instanciation du bean, alors les tags <jsp:setProperty>
inclus dans le tag sont utilisés pour initialiser les <jsp:setProperty name="monBean"
propriétés du bean sinon ils sont ignorés. Les tags inclus property="*" />
entre les tags <jsp:useBean> et </jsp:useBean> ne sont
exécutés que si le bean est instancié.
L'attribut property="propertyName"
Exemple : [ param="parameterName"] permet de mettre à jour un
attribut du bean. Par défaut, l'alimentation est faite
<jsp:useBean id="monBean" scope="session" automatiquement avec le paramètre correspondant dans
class="[Link]" > la requête. Si le nom de la propriété et du paramètre
<jsp:setProperty name="monBean" property="*" /> sont différents, il faut préciser l'attribut property et
</jsp:useBean> l'attribut param qui doit contenir le nom du paramètre qui
va alimenter la propriété du bean.
Cet exemple a le même effet que le précédent avec une
initialisation des propriétés du bean lors de son Exemple :
instanciation avec les valeur des paramètres
correspondants. <jsp:setProperty name="monBean"
property="nom"/>
3.6.2 . Le tag <jsp:setProperty >
Il existe trois façon de mettre à jour les propriétés soit à <jsp:setProperty name="monBean"
partir des paramètres de la requête soit avec une property="nom" value="toto" />
valeur :
• alimenter automatiquement toutes les propriétés Il n'est pas possible d'utiliser param et value dans le
avec les paramètres correspondants de la même tag.
requête
Ce tag peut être utilisé entre les tags <jsp:useBean> et
• alimenter automatiquement une propriété avec </jsp:useBean> pour initialiser les propriétés du bean
le paramètre de la requête correspondant lors de son instanciation.
• alimenter une propriété avec la valeur précisée
// AUTRES METHODES L'attribut name indique le nom du bean tel qu'il a été
public void connectBase() {……….} déclaré dans le tag <jsp:useBean>.
} L'attribut property indique le nom de la propriété dont on
veut la valeur.
[Link]
Remarque : avec Tomcat 3.1, l'utilisation du tag
<a href = “[Link]” ? login=”rabe”& password =”rabe” <jsp:getProperty> sur un attribut dont la valeur est null
> Cliquer ici </a> n'affiche rien alors que l'utilisation d'un tag d'expression
retourne « null ».
ou bien
Exemple :
<FORM METHOD = « POST» ACTION [Link]
= « [Link] » >
Nom : <input type=text name=”login”> <br> <html>
Mot de passe : <input type=password <HEAD>
name=”password”> <br> <TITLE>Essai d'instanciation d'un bean dans une
<input type=submit value=”Valider”> JSP</TITLE>
</FORM> </HEAD>
<body><p>Test d'utilisation d'un Bean dans une JSP
[Link] </p>
<jsp:useBean id="personne" scope="request"
<jsp :useBean id = « Bean » class = »[Link] » /> class="[Link]" />
<!-- Les noms des parameters de la requête sont <p>nom initial = <%=[Link]() %></p>
identiques à ceux des propriétés du bean -- > <p>nom initial = <jsp:getProperty name="personne"
<jsp:seProperty name=”Bean” property =”*” /> property="nom" /></p>
<jsp:setProperty name="personne" property="nom"
<jsp:seProperty name=”Bean” property =”login” /> value="mon nom est DUPONT" />
<jsp:seProperty name=”Bean” property =”password” /> <p>nom mise à jour = <jsp:getProperty
name="personne" property="nom" /></p>
<% [Link](); %> <%[Link]("mon nom est RABE");%>
<p>nom mise à jour = <%= [Link]() %></p>
<!-- Initialisation des propriétés du bean --> <% [Link](null);%>
<p>nom mis à jour = <jsp:getProperty name="personne"
<jsp:seProperty name=”Bean” property =”login” property="nom" /></p>
value=”koto” /> <p>nom mis à jour = <%= [Link]() %></p>
<jsp:seProperty name=”Bean” property =”password” </
value=”koto” /> </body>
</html>
<!-- Les noms des parameters de la requête sont
différents de ceux des propriétés du bean --> [Link]
< !-- <a href = “[Link]” ? nom=”rabe”& motdepass
=”rabe” > Cliquer ici </a> --> package test;
public class Personne {
<jsp:seProperty name=”Bean” property =”login” private String nom;
param=”nom” /> private String prenom;
public Personne() {
<jsp:seProperty name=”Bean” property =”password” [Link] = "nom par defaut";
param=”motdepass” /> [Link] = "prenom par defaut";
}
public void setNom (String nom) {
[Link] = nom;
3.6.3. Le tag <jsp:getProperty>
}
Le tag <jsp:getProperty> permet d'obtenir la valeur d'un public String getNom() { return ([Link]);
attribut d'un Bean. Le tag utilise le getter (méthode }
getXXX() ou XXX est le nom de la propriété) pour public void setPrenom (String prenom) {
obtenir la valeur et l'insérer dans la page HTML généré. [Link] = prenom;
Le bean doit exister grâce à un appel au tag }
<jsp:useBean>.
public String getPrenom () {
La syntaxe est la suivante : return ([Link]);
}
<jsp:getProperty name="beanInstanceName" }
property=" propertyName" />
ENI Initiation à JSP Dr RV p.11
L'attribut flush permet d'indiquer si le tampon doit être Name précise le nom de l'applet
envoyé au client et vidé. Si la valeur de ce paramètre est
true, il n'est pas possible d'utiliser certaines précise le nombre de pixels insérés en haut et
vspace
fonctionnalités dans la servlet ou la JSP appelée : il n'est en bas de l'applet
pas possible de modifier l'entête de la réponse (header,
précise la longueur de l'applet en pixel ou en
cookies) ou renvoyer ou faire suivre vers une autre Width
pourcentage
page.
type les valeurs possibles sont applet ou bean • sans page d'erreur associée, la pile d'exécution
de l'exception est affichée
Il possède aussi plusieurs autres attributs optionnels • avec une page d'erreur associée, une
dont les plus utilisés sont : redirection est effectuée vers cette JSP
La valeur de l'attribut errorPage de la directive page doit Le navigateur retourne cette information
contenir l'URL de la page d'erreur. Le plus simple est de (inchangée) lorsqu'il visite de nouveau le même
définir cette page à la racine de l'application web et de site (URL).
faire précéder le nom de la page par un caractère '/' Ayant lu cette information, le serveur peut
dans l'url. identifier le client et lui fournir un certain nombre
Exemple : de facilités :
achat en ligne
<%@ page errorPage="/[Link]" %> authentification
personnalisation de portail
5. La définition d'une page d'erreur diriger les recherches d'un moteur
Une page d'erreur est une JSP dont l'attribut Identification des utilisateurs (e-
isErrorPage est égal à true dans la directive page. Il commerce
est possible dans une telle page d'afficher un message
d'erreur personnalisé mais aussi d'inclure des Durée de vie réglable
traitements liés à la gestion de l'exception : ajouter
l'exception dans un journal, envoie d'un mail pour son Pas de menace sécuritaire ( Jamais interprété
traitement, ... ou exécuté : pas de virus)
Un cookie est limité à 4KB et les navigateurs se
limitent à 300 cookies (20 par site) : pas de
Exemple :
surcharge de disque
<%@ page language="java"
Bien pour rendre privées des données non
contentType="text/html" %>
sensibles
%@ page isErrorPage="true" %>
- nom, adresse,
<html>
<body>
<h1>Une erreur est survenue lors des ■ Eviter la saisie d’informations à répétition
traitements</h1> – login, password, adresse, téléphone…
<p><%= [Link]() %></p>
</body> Utilisation de cookies en JSP
</html>
En JSP, un cookie est un objet de la classe
[Link] utilisée pour créer un cookie
ayant pour Constructeur :
Exemple final : public Cookie(String name,String value)
getValue () Retourne la valeur du cookie. Voici le code du fichier de [Link] qui permet
de créer le cookie:
Si un navigateur Web présente ce
<% @ Page language = "java" import = "[Link].
cookie à un utilisateur, le but de
setComment (String) *"%>
l'cookie sera décrit en utilisant ce
<%
commentaire.
String username = [Link]
("username");
Définit l'âge maximum du cookie if (username == null) username = "";
(durée de vie dans le disque) . Le
cookie expirera après que plusieurs Date now = new Date ();
secondes se sont écoulées. Les String timestamp = [Link] ();
valeurs négatives indiquent le Cookie cookie = new Cookie ("username",
setMaxAge (int)
comportement par défaut: le cookie username);
n'est pas stocké persistante, et sera [Link] (365 * 24 * 60 * 60);
supprimé lorsque le navigateur Web [Link] (cookie);
de l'utilisateur sort. Une valeur de %>
zéro provoque le cookie à supprimer
<html>
- définit le chemin dans le domaine
setPath (String uri) <head>
pour lequel le cookie est valide
<title> Cookie enregistré </ title>
- par défaut, le cookie est valide pour
</ Head>
la page qui le définit et toutes les
<body>
pages du répertoire du dessous
ENI Initiation à JSP Dr RV p.15
</html> </font>
</body>
Exemple3 : </html>
[Link] :
package essai;
T ACTION="page2jsp"> import [Link];
import [Link].*;
AME="nom">
public class Bean1 {
AME="solde"> Calendar calendar = null;
VALUE="SUBMIT">
public Bean1() {
calendar = [Link]();
g) Date daty = new Date();
omme"); [Link](daty);
tSolde=”0” ; }
return [Link]([Link]);
} public void setNom(String nom) { [Link]=nom; }
public int getSecond() {
return [Link]([Link]); public boolean getSuccess() {
} if (note<10) return false;
} else return true;
}
Vous avez une note comprise entre 10 et 20<p> <b>Nom :</b><input type="text" name="nom"
Vous êtes admis en classe supérieure<p> value="" /> <br>
<% } %>
<b>Adresse:</b><input type="text" name="adresse"
<form method=get> value="" /> <br>
Votre nom <input type=text name=nom> <br>
Votre note<input type=text name=note> <b>Solde :</b><input type="text" name="solde"
<input type=submit value="Submit"> value="" >
</form> <br>
</font> <p> </p>
</body>
</html> <input type="submit" name="BT" value="Ajouter" >
[Link] <input type="submit" name="BT" value="Supprimer" >
<input type="submit" name="BT" value="Modifier" >
package Bean2; <input type="submit" name="BT" value="Consulter" >
<input type="submit" name="BT" value="Lister" >
import [Link].*;
<br>
public class Bean2 { </form>
int note; </body>
String nom; </html>
public Bean2() {
note=0;
} MODELE : Fichier JavaBeans : [Link]
double s ; [Link]();
Connection con=null; [Link]();
Statement statement = null; }
ResultSet res =null; catch(Exception e) {
ResultSet rescom =null; [Link]("ERROR DELETE");
String requete ; }
}
String mcodecli = (String) else
[Link]("codecli"); if ([Link]("Modifier"))
String mnom = (String) [Link]("nom"); {
String madresse = (String) // MODIFIER
[Link]("adresse"); try {
String msolde = (String) nb =[Link]("UPDATE client set nom
[Link]("solde"); =' " +mnom+"' , " +" adresse= ' " +madresse+" ',"+
if ([Link]("") || msolde==null) "solde= "+ s + " WHERE codecli= ' " +mcodecli+ " ' ");
s=0; [Link]("<h3> ENREGISTREMENT MODIFIE </h3>
else ");
s= [Link](msolde); [Link]();
if ([Link]("") || mcodecli==null) [Link]();
[Link]("LE CODE DU CLIENT EST NUL "); }
else catch(Exception e) {
{ [Link]("ERROR UPDATE");
}
String url ="jdbc:odbc:veno"; }
try { else
[Link]("[Link]");
con =[Link](url,"",""); if ([Link]("Consulter"))
statement=[Link](); {
} // CONSULTER
catch(Exception e) { if ([Link]("") || mcodecli==null)
[Link]("ERROR CONNEXION"); return: } [Link]("Selectionnez un client svp ");
else{
String bt = [Link]("BT"); try {
if ([Link]("Ajouter")) res =[Link]("select * from client where
{ codecli=' "+mcodecli+" ' ");
// AJOUTER if (res==null)
try { [Link]("<h3> CODE INCORRECT </h3> ") ;
requete ="INSERT INTO else
client(codecli,nom,adresse,solde) VALUES( "+" ' {
"+mcodecli +" ',' " +mnom +" ' ,' "+madresse+ [Link]();
" ',"+s+")"; mnom= [Link]("nom");
nb =[Link](requete); madresse =[Link]("adresse");
[Link]("<h3> ENREGISTREMENT AJOUTE </h3> msolde= (new
"); Double([Link]("solde"))).toString();
[Link](); [Link]("<h3> CODECLI : " + mcodecli+"</h3>
[Link](); <BR>");
} [Link]("<h3> NOM : " + mnom+"</h3> <BR>");
catch(Exception e) { [Link]("<h3> ADRESSE : " +
[Link]("<h3> ENREGISTREMENT DEJA madresse+"</h3><BR>");
EXISTANT </h3> "); [Link]("<H3>SOLDE : " + msolde+"</h3> <BR>");
} }
} [Link]();
else [Link]();
if ([Link]("Supprimer")) [Link]();
{ }
// SUPPRIMER
try { catch(Exception e) {
nb =[Link]("DELETE FROM [Link]("<h3> CODE CLIENT INCORRECT </h3> ");
commande where codecli = ' " + mcodecli + " ' " ); }
nb =[Link]("DELETE FROM cLIENT }
where codecli = ' " + mcodecli + " ' "); }
[Link]("<h3> ENREGISTREMENT SUPPRIME else
</h3> "); // LISTER
ENI Initiation à JSP Dr RV p.22
try {
res =[Link]("select codecli,nom from rescom =[Link]("select
Client order by nom "); [Link],Nom,Adresse,Libelle,Pu,Qte,qte*Pu as
while ([Link]()){ %> Montant from client,commande,produit where
<option value="<%=[Link]("codecli")%>"> [Link]=[Link] and
<%= [Link]("nom")%> [Link]=[Link] Order by nom");
</option> QteTot=0;
<% while ([Link]()){
} if ([Link]([Link]("codecli")))
%> {QteTot+=[Link]("Qte");
</select> }
<% [Link](); %> }
<% } [Link]();
catch(Exception e) %>
{ message="Error LISTE" ; }
%> <tr>
<th><b><i>NOM</i></b></th>
<br><br> <th><b><i>LIBELLE</i></b></th>
<th><b><i>PU</i></b></th>
<b>Codecli:</b> <input type="text" name="codecli" <th><b><i>QTE</i></b></th>
onKeypress="if ([Link]==13 && <th><b><i>MONTANT</i></b></th>
[Link]==13) [Link]();" </tr>
value="<%= codecli%>" /> <br>
<%
<b>Nom :</b><input type="text" name="nom" rescom =[Link]("select
value="<%= nom %>" /> <br> [Link],Nom,Adresse,Libelle,Pu,Qte,qte*Pu as
Montant from client,commande,produit where
<b>Adresse:</b><input type="text" name="adresse" [Link]=[Link] and
value="<%= adresse %>" /> <br> [Link]=[Link] Order by nom");
<b>Solde :</b><input type="text" name="solde" while ([Link]()){
value="<%=solde%>" /> if ([Link]([Link]("codecli")))
<br> {
<p> </p> %>
<input type="reset" name="nouveau" <tr>
value="Nouveau" /> <td><b><i><%=[Link]("nom")%></i></b>
<input type="submit" name="BT" value="Ajouter" /> </td><td><b><i><%=[Link]("Libelle")
<input type="submit" name="BT" value="Supprimer" /> %></i></b></td>
<input type="submit" name="BT" value="Modifier" /> <td><b><i><%=[Link]("Pu")%></i></b></td>
<input type="submit" name="BT" value="Consulter" /> <td><b><i><%=[Link]("qte")%></i></b></td>
<br> <td><b><i><%=[Link]("Montant")%></i>
<b>Message :</b><input type="text" size="40" </b></td>
name="message" value="<%=message%>" /> <br> </tr>
</form> <%
<table border="2">
<% }
%>
// Parcours de la requete Commande <%
try { }
%>
rescom =[Link]("select
[Link],Nom,Adresse,Libelle,Pu,Qte,qte*Pu as <%
Montant from client,commande,produit where [Link]();
[Link]=[Link] and [Link]();
[Link]=[Link] Order by libelle"); [Link]();
MontantTot=0; }
QteTot=0;
while ([Link]()){ catch(Exception e)
if ([Link]([Link]("codecli"))) { message="Error de lecture Commande" ; }
{MontantTot+=[Link]("Pu")*[Link]("Qte"); %>
// QteTot+=[Link]("Qte");
} <br>
} <tr>
[Link](); <td> </td>
ENI Initiation à JSP Dr RV p.24
<td> </td> try {
<td>MONTANT TOTAL </td> requete ="INSERT INTO
<td> </td> client(codecli,nom,adresse,solde) VALUES("+
<td><%= MontantTot+" Fmg" %></td> "'"+mcodecli +"','" +mnom +"','"+madresse+" ',"+s+")";
</tr> nb =[Link](requete);
messages="ENREGISTREMENT AJOUTE";
<tr> [Link]();
<td> </td> [Link]();
<td> </td> }
<td>QTE TOTAL </td> catch(Exception e) {
<td><%= QteTot%></td> messages="ENREGISTREMENT DEJA EXISTANT";
<td> </td> }
}
</tr> else
</TABLE> if ([Link]("Supprimer"))
</body> {
</html> try {
nb =[Link]("DELETE FROM
commande where codecli = '" + mcodecli + "'");
FICHIER [Link]
nb =[Link]("DELETE FROM cLIENT
<%@ page import="[Link].*" %> where codecli = '" + mcodecli + "'");
<%@ page import="[Link].*" %> messages="ENREGISTREMENT SUPPRIME";
<%@ page import="[Link].*" %> [Link]();
<%@ page session="true" %> [Link]();
}
<html> catch(Exception e) { messages="ERROR DELETE";}
<head> }
<title> Validation au serveur </title> else
</head> if ([Link]("Modifier")){
<body> try {
<% nb =[Link]("UPDATE client set nom
int nb ; double s ; =' " +mnom+" '," +" adresse=' " +madresse+" ',"+ "solde=
Connection con=null; Statement statement = null; "+ s + " WHERE codecli=' " +mcodecli+ " ' " );
ResultSet res =null; messages="ENREGISTREMENT MODIFIE";
String requete ; [Link]();
[Link]();
String mliste = (String) [Link]("liste"); }
String mcodecli =(String) catch(Exception e) {
[Link]("codecli"); messages="ERROR UPDATE";
String mnom = (String) [Link]("nom"); }
String madresse = (String) }
[Link]("adresse"); else
String msolde = (String) [Link]("solde"); if ([Link]("Consulter"))
String messages ="OPERATION REUSSIE" ; {
if ([Link]("") || msolde==null) if ([Link]("") || mliste==null)
s=0; { messages="Selectionnez un client svp ";
else }
s= [Link](msolde); else
if ([Link]("") || mcodecli==null) {
messages="LE CODE DU CLIENT EST NUL "; try {
else res =[Link]("select * from client where
{ codecli='"+mliste+"'");
String url ="jdbc:odbc:DsnEssai"; [Link]();
try { mcodecli= [Link]("codecli");
[Link]("[Link]"); mnom= [Link]("nom");
con =[Link](url,"",""); madresse =[Link]("adresse");
statement=[Link](); msolde= (new
} Double([Link]("solde"))).toString();
catch(Exception e) { [Link]();
messages="ERROR CONNEXION"; [Link]();
} [Link]();
String bt = [Link]("BT"); }
if ([Link]("Ajouter")){ catch(Exception e) {
ENI Initiation à JSP Dr RV p.25
messages="ERROR CONSULTER";
}
}
}
}
// data is OK
// dispatch to thanks
[Link]("codecli", mcodecli);
[Link]("nom", mnom);
[Link]("adresse", madresse);
[Link]("solde",msolde );
[Link]("message",messages );
%>
<jsp:forward page="[Link]" />
</BODY>
</HTML>
L'archive web peut être créée avec l'outil jar fourni avec
le JDK ou avec un outil commercial. Avec l'outil jar, il
suffit de créer l'arborescence de l'application, de se
placer dans le répertoire racine de cette arborescence et
d'exécuter la commande :
conteneur qui respecte les spécifications 1.1 des JSP développement de l'application car il n'est alors pas
sait utiliser un fichier .war, leur exploitation par chaque obligatoire de générer l'archive web à chaque
conteneur est légèrement différente. modification pour réaliser des tests. Attention, si
l'application est redéployée sous la forme d'une
Par exemple avec Tomcat, il est possible de travailler archive .war, il faut obligatoirement supprimer le
directement dans le répertoire webapps avec le contenu répertoire qui contient l'ancienne version de l'application.
de l'archive web décompressé. Cette fonctionnalité est
particulièrement intéressante lors de la phase de
Ce tutorial a pour objet de présenter la configuration d'Eclipse pour développer des applications web sous Tomcat. Il
commence par l'installation du plugin Tomcat dans Eclipse, puis la prise en charge pas Eclipse d'un serveur Tocmat.
Enfin, on montre comment créer un premier projet Web sous Eclipse, et sa mise au point sous Tomcat.
Avant de créer ce serveur, on doit s'assurer que le plugin Tomcat est bien installé dans Eclipse. Cela se passe dans la
fenêtre des Preferences d'Eclipse, à laquelle on peut accéder dans le menu Windows.
Cette fenêtre comporte énormément d'options, que l'on peut filtrer. La capture d'écran suivante montre celle qui nous
intéresse : les Server Runtime Environments.
ENI Initiation à JSP Dr RV p.27
Pour le moment aucun serveur n'est disponible, ce qui est normal, puisque l'on en n'a déclaré aucun.
Cliquer sur le bouton Add... ouvre la liste des plugins qu'Eclipse possède déjà. Si Tomcat n'apparaît pas dans cette liste,
on peut la compléter par téléchargement en clique sur le lien Download additional server adapters, en haut droite de ce
panneau.
Dans notre cas, les plugins pour les différentes versions de Tomcat sont déjà présents, on sélectionne celui qui
correspond à la version 6 de Tomcat.
ENI Initiation à JSP Dr RV p.28
L'étape suivante consiste à indiquer à Eclipse où se trouve le répertoire d'installation de Tomcat. On peut le préciser en
cliquant sur le bouton Browse... et en allant sélectionner le bon répertoire.
Une fois le répertoire validé, l'installation de Tomcat que l'on a spécifiée apparaît dans la liste des Server Runtime
Environments.
ENI Initiation à JSP Dr RV p.29
Notre installation est validée, nous allons pouvoir passer à l'étape suivante.
Un projet Web est un type de projet spécial sous Eclipse. Spécial, en ce sens qu'il est attaché à un serveur d'applications
(ici Tomcat, ce pourrait être un autre serveur), et qu'il expose des fonctionnalités particulières pour créer des servlets, des
pages, ou des services web (que nous ne présenterons pas ici).
La création d'un projet Web débute comme un projet Eclipse normal. Comme il ne s'agit pas d'un projet Java classique,
on sélectionne la rubrique Project... du sous-menu New.
ENI Initiation à JSP Dr RV p.30
Dans le panneau qui s'ouvre, on sélectionne alors Dynamic Web Project, sous le nœud Web.
ENI Initiation à JSP Dr RV p.31
Le panneau qui s'ouvre alors est un peu plus compliqué que celui d'un projet Java classique. En particulier, il nous
demande de choisir le serveur que ce projet va utiliser pour fonctionner. Dans notre exemple, on sélectionne le serveur
Tomcat que l'on vient de créer. La version de l'API Servlet est sélectionnée automatiquement : 2.5, version la plus
récente supportée par Tomcat v6.
ENI Initiation à JSP Dr RV p.32
Le panneau suivant nous demande dans quel répertoire on souhaite ranger nos fichier source. On conserve le choix par
défaut : le répertoire src.
ENI Initiation à JSP Dr RV p.33
Le dernier panneau nous demande dans quel répertoire on souhaite ranger les ressources de ce projet web : le répertoire
WebContent. C'est dans ce répertoire que l'on pourra ranger les différentes ressources de notre projet : pages HTML,
tout fichier multimedia, fichier Javascript, etc...
On peut également générer automatiquement le fichier [Link] de notre application web, ce qui une commodité offerte
par Eclipse. Ce fichier sera rangé automatiquement dans WebContent/WEB-INF.
ENI Initiation à JSP Dr RV p.34
Une fois notre projet créé, Eclipse nous demande si l'on souhaite utiliser la perspective Java EE. Cette perspective est
bien adaptée au développement des projets Java EE (elle est même faite pour ça !), on accepte donc cette proposition.
Sur la partie gauche de cette perspective, se trouve la vue Project Explorer (qui ressemble beaucoup à Package
Explorer), dans laquelle notre nouveau projet apparaît.
Notre projet est maintenant créé, et l'on va pouvoir passer à l'étape suivante : créer une première servlet.
La perspective Java EE nous montre une frise d'icône qui nous permet de créer directement des classes Java de servlet.
C'est que nous allons utiliser pour notre première servlet.
La première rubrique du menu qui s'ouvre est celle qui nous permet de créer une servlet.
Un panneau s'ouvre alors, qui nous permet de spécifier la classe de cette servlet : son nom, et le nom du package dans
lequel cette classe sera placée. Une servlet étend nécessairement HttpServlet, on ne doit donc prendre garde à ce point
si l'on modifie la classe qu'étend notre servlet.
ENI Initiation à JSP Dr RV p.36
Le panneau suivant nous permet de fixer les informations sur cette servlet, qui seront écrites dans le fichier [Link] de
notre application.
• Le nom de notre servlet, utilisé pour s'y référer dans le fichier [Link].
• Le (ou les) paramètres URL mappings, qui fixeront l'URL à laquelle notre servlet sera disponible.
ENI Initiation à JSP Dr RV p.37
Le dernier panneau de création précise le contenu de la classe qu'Eclipse va nous générer. Par commodité, Eclipse peut
créer pour nous différentes méthodes standard de notre servlet, telles que init(), doGet() ou doPost().
ENI Initiation à JSP Dr RV p.38
Une fois ces étapes déroulées, notre classe de servlet est créée, et apparaît dans la structure de notre projet.
Le fichier [Link] a bien été modifié, et prend bien en compte la servlet qui vient d'être créée.
ENI Initiation à JSP Dr RV p.39
PrintWriter pw = [Link]() ;
[Link]("Hello world !") ;
}
doGet(request, response) ;
}
}
Une fois cette classe créée, il nous reste à la faire fonctionner dans Tomcat, ce qui est l'objet de la prochaine étape.
Une servlet doit être exécutée dans un serveur d'applications, dans notre exemple il s'agit de Tomcat. La première étape
consiste à créer une instance de serveur Tomcat, associée à notre espace de travail.
La création d'une instance de Tomcat (comme de tout autre serveur d'application) peut se faire directement dans la vue
Servers, présente dans le bas de la perspective Java EE. Le menu contextuel de cette vue permet de créer cette
nouvelle instance.
ENI Initiation à JSP Dr RV p.40
Le panneau qui s'ouvre alors permet de sélectionner le serveur qui va être créé. Pour cela, il faut renseigner les différents
éléments du panneau.
• Le Server name : ici Tomcat v6.0 Server at localhost. Ce nom est un nom logique utilisé par Eclipse. Il peut être
utile de modifier sa valeur par défaut lorsque l'on fait fonctionner plusieurs serveurs de même type sur une même
machine.
• Le Server runtime environment : c'est ici que l'on sélectionne le Tomcat que l'on a installé précédemment. On
peut aussi installé de nouveaux serveur en cliquant sur le lien Add... qui se trouve à côté de ce sélecteur.
ENI Initiation à JSP Dr RV p.41
Une fois l'instance de serveur créé, il faut lui ajouter des projets. Ici nous avons créé un serveur Tomcat, capable
d'exécuter des servlets, on peut donc lui ajouter des projets qui contiennent des servlets. Eclipse ne nous propose ici que
les projets web. Si nous avions d'autres projets Java dans notre espace de travail, ils n'apparaitraient pas dans cette liste.
ENI Initiation à JSP Dr RV p.42
Cette étape était la dernière : notre serveur est maintenant créé, et notre projet web lui a été ajouté. Notons que l'on peut
aussi ajouter des projets à un serveur en les glissant / déposant à partir de la vue Project explorer.
Lorsque toute la configuration précédente a été effectuée, l'exécution d'une servlet devient assez simple. Il suffit de
sélectionner la traditionnelle option Run as... du menu contextuel de la classe que l'on veut exécuter. Comme cette
classe ne comporte pas de méthode main(), la rubrique Java Application n'est pas présente. En revanche, nous avons la
rubrique Run on Server, que nous allons sélectionner.
Eclipse nous demande alors quel serveur va exécuter cette servlet. Ici nous n'en avons qu'un, dans une configuration
complexe, il pourrait y en avoir plusieurs.
ENI Initiation à JSP Dr RV p.44
Ici encore, il est possible d'ajouter des ressources de notre espace de travail au serveur. On peut sauter cette étape en
cliquant directement sur le bouton Finish du panneau précédent.
ENI Initiation à JSP Dr RV p.45
Eclipse nous ouvre enfin une vue Navigateur, sur l'URL associée à notre servlet. Cette URL est composée de deux
éléments principaux : l'hôte sur lequel on a installé notre serveur, et l'élément d'URL auquel est associée notre servlet. Le
port choisi par Eclipse est le port 8080, par défaut. Nous verrons dans la suite comment le changer.
ENI Initiation à JSP Dr RV p.46
On peut également copier cette URL et la coller dans un navigateur lancé localement.
Créer et exécuter une page JSP suit le même processus qu'une servlet. Le menu contextuel du projet nous permet
d'ouvrir le panneau de création d'une JSP.
Le premier panneau qui s'ouvre alors permet de fixer dans quel répertoire notre JSP va être créée. Ce répertoire doit se
trouver sous celui que nous avons déclaré comme étant celui qui contient nos ressources web, au niveau de notre projet.
Par défaut, il s'agit du répertoire WebContent.
Le second panneau est plus technique. Il nous demande le type de la JSP que nous voulons créer. Il y a sept possibilités,
et l'objet de ce tutorial n'est pas de présenter les différences qui existent entre chacune. On sélectionne donc la
quatrième : JSP with html markup.
ENI Initiation à JSP Dr RV p.48
Il ne nous reste plus qu'à valider la création de notre JSP. Elle apparaît sous le nœud WebContent de notre projet dans la
vue Project Explorer sous la forme suivante.
ENI Initiation à JSP Dr RV p.49
Bien que n'étant pas (encore !) une classe Java, une JSP s'exécute de la même manière qu'une servlet, en allant
chercher la rubrique Run on Server qui se trouve dans le sous-menu Run as... du menu contextuel de cette JSP.
ENI Initiation à JSP Dr RV p.50
Eclipse nous demande alors quel serveur il doit utiliser pour cette exécution. Dans notre exemple nous n'en avons créé
qu'un seul, le choix est donc facile.
ENI Initiation à JSP Dr RV p.51
De même que pour l'exécution d'une servlet, on peut alors changer les ressources connues de ce serveur.
ENI Initiation à JSP Dr RV p.52
Tout comme pour une servlet, notre exécution se fait dans le navigateur intégré à Eclipse. Eclipse nous l'affiche dans sa
vue, comme sur la capture suivante.
On peut bien sûr copier l'URL affichée par ce navigateur, et la coller dans un autre navigateur.
Lorsque l'on dit "exécuter une JSP" (ou une servlet) dans un navigateur, il ne faut pas se méprendre sur le sens des
choses. La servlet, ou la JSP est exécutée dans une JVM, dans Tomcat, et ce que l'on observe dans la navigateur, ce
n'est que l'affichage de la page contenant le code HTML généré par cette servet ou cette JSP.
Notons que la vue Servers présente des boutons qui nous permetttent d'arrêter, et de relancer tomcat. Le lancement de
Tomcat peut se faire en mode normal ou en mode debug, ce qui permet d'exécuter pas à pas nos servlets, nos JSPs, et
nos services web si l'on en avait.
On peut aussi "rafraîchir" Tomcat. Cela signifie que l'on force le rechargement de toute ressource (servlet ou JSP
notamment) qui aurait été modifiée dans Eclipse, alors que Tomcat était en cours d'exécution.
Enfin on peut accéder à un panneau de configuration de Tomcat, simplement en double-cliquant dessus dans la vue
Servers. Ce panneau s'affiche dans une vue spéciale, qui porte le nom que l'on a donné à l'instance. Elle permet de
configurer de nombreux paramètres, dont le port d'écoute HTTP de Tomcat, ce qui est utile en cas d'instances multiples
par exemple.