Introduction à JavaServer Pages (JSP)
Introduction à JavaServer Pages (JSP)
Sommaire
1.1 PRÉSENTATION____________________________________________6
1.1.1 JSP (JavaServer Page)____________________________________6
1.1.2 Fonctionnement interne___________________________________6
1.1.3 Configuration du cours___________________________________7
1.1.4 Rappel sur le protocole HTTP______________________________8
[Link] Le protocole________________________________________8
[Link] Les requêtes________________________________________9
[Link] Les réponses_______________________________________10
[Link] La gestion de l'état__________________________________11
1.2 LES ÉLÉMENTS DE BASE DE JSP______________________________12
1.2.1 L'organisation d'une page JSP_____________________________12
[Link] Le modèle MVC (Model-View-Controller)_______________13
[Link] Le mélange de codes________________________________14
[Link] Le code JSP_______________________________________15
[Link] Les 2 versions de JSP________________________________16
1.2.2 La directive de page : <%@ page %>____________________17
1.2.3 Le commentaire : <%-- --%>___________________________18
1.2.4 La déclaration : <%! %>______________________________19
1.2.5 Le scriptlet : <% %>_________________________________20
1.2.6 L'expression : <%= %>_______________________________23
1.2.7 L'inclusion : <%@ include %>_________________________24
1.2.8 La directive de bibliothèque de balises (Taglib)_______________28
1.3 LES OBJETS IMPLICITES_____________________________________29
1.3.1 L'interface request (Correspond à la requête client)____________30
[Link] Définition et méthodes_______________________________30
[Link] Récupérer des informations provenant d'une autre page_____32
[Link] Récupérer des informations sur le client et le serveur_______34
[Link] Le navigateur du client_______________________________35
[Link] Récupérer toutes les en-têtes__________________________36
[Link] Récupérer toutes les variables d'une page html____________38
[Link] Faire du jspSelf en mode GET_________________________40
[Link] Faire du jspSelf en mode POST________________________43
1.3.2 L'interface response (Correspond à la réponse envoyée au client)_44
[Link] Définition et méthodes_______________________________44
1.3.3 Les cookies____________________________________________45
[Link] Définition et méthodes_______________________________45
[Link] Exemple__________________________________________46
1.3.4 L'interface session______________________________________50
[Link] Définition et méthodes_______________________________50
[Link] Exemple__________________________________________51
1.3.5 L'objet application (ServletContext)________________________53
[Link] Définition et méthodes_______________________________53
[Link] Exemple__________________________________________54
1.3.6 L'objet out_____________________________________________56
1.3.7 L'objet config__________________________________________57
1.3.8 L'objet page___________________________________________58
1.3.9 L'objet pageContext_____________________________________59
1.3.10 L'objet exception______________________________________60
1.4 LE PROBLÈME DU BLOCAGE DES COOKIES______________________64
1.4.1 Blocage des cookies et des sessions_________________________64
1.4.2 Réécriture d'URL_______________________________________65
1.5 LES JAVABEANS__________________________________________66
1.5.1 Présentation___________________________________________66
1.5.2 Structure syntaxique_____________________________________68
1.5.3 Stockage______________________________________________69
1.6 LES ÉLÉMENTS ACTION JSP_________________________________70
1.6.1 Présentation___________________________________________70
1.6.2 L'élément useBean : <jsp:useBean>________________________71
[Link] Description et syntaxe_______________________________71
[Link] Ecrans____________________________________________72
[Link] Scripts____________________________________________73
[Link] Passer toutes les valeurs en une seule fois________________75
1.6.3 Bean et scope__________________________________________76
1.6.4 L'élément setProperty : <jsp:setProperty>___________________77
[Link] Description et syntaxe_______________________________77
1.6.5 L'élément getProperty : <jsp:getProperty>__________________77
[Link] Description et syntaxe_______________________________77
1.6.6 L'élément d'inclusion : <jsp:include>_______________________78
[Link] Description et syntaxe_______________________________78
[Link] La page modèle du site_______________________________78
[Link] Inclure une page avec ou sans photo____________________80
1.6.7 L'élément de délégation : <jsp:forward>____________________84
[Link] Description et syntaxe_______________________________84
[Link] Exemple__________________________________________84
1.6.8 L'élément plugin : <jsp:plugin> (Applet)____________________86
[Link] Description et syntaxe_______________________________86
[Link] Exemple : le convertisseur Euros/Dollars________________87
1.6.9 L'élément texte : <jsp:text>_______________________________89
1.6.10 L'élément racine : <jsp:root>___________________________90
1.1 PRÉSENTATION
Il est possible de faire en JSP ce qui est fait avec des servlets.
L'écriture de code JSP est plus simple que l'écriture de servlets.
Une page JSP est un squelette de page html, donc avec du code html, qui
contient du code JSP et éventuellement du code Java (Scriptlet).
Les JSP prendront en charge la partie présentation dans une application WEB à
plusieurs niveaux.
La partie accès aux bases de données sera prise en compte des beans et des
EJB (Entreprise Java Beans).
La JSP, qui est stockée sur le serveur WEB – qui doit être aussi un serveur de
servlets (Jakarta-Tomcat est un serveur http de servlets) - est compilée et une
servlet est créée et chargée en mémoire. C'est elle qui exécute les traitements.
Tant que la JSP ne change pas, la servlet générée demeure chargée au sein du
conteneur jusqu'à l'arrêt du serveur, exactement comme pour une servlet.
Dans une configuration standard les codes sont stockés dans l'arborescence
suivante :
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\
NomDeLApplication\…
[Link] Le protocole
Requête
Réponse
GÉNÉRATION DU
CODE JAVA
COMPILATION
Génération
dynamique de
.
EN CLASS
la page HTML
Exemple : [Link]
La ligne de requête
Le corps de requête
Le corps de requête existe dans le cas de requêtes POST (Des données sont
transmises par ce biais).
Le message de réponse possède lui aussi une structure ternaire; il contient une
ligne d'état, des en-têtes de réponse et éventuellement un corps de réponse.
La ligne de réponse
Le corps de réponse
Mais le client peut désactiver dans son navigateur les cookies et rend ainsi la
gestion de cookies et de session impossible ou plus délicate à gérer.
Une page JSP peut être vue selon trois points de vue.
Control
View Model BD
<html>
<head>
<title>[Link]</title>
</head>
<body>
<%@page language="java" import="[Link]" errorPage =
"../html/[Link]" %>
</body>
</html>
Notes :
La page jsp est stockée dans le dossier /monApp/jsp
La page html est stockée dans le dossier /monApp/html
Une page JSP contient du code JSP et/ou du code Java et/ou du code HTML ….
Il existe huit éléments de base plus des éléments d'action :
La syntaxe JSP standard (JSP 1.x); les balises d'ouverture et de fermeture sont les
suivantes : <% … %>; Les pages sont d'extension .jsp.
La syntaxe XML (JSP 2.x); les balises auto-fermantes ont cette syntaxe :<jsp:
… />; les éléments pleins utilisent les balises à la syntaxe suivante : <jsp:…>
</jsp:…> ; les pages sont d'extension .jspx.
[Link]
<%--
Document : nom du document
Created on : date et heure de creation
Author : nom de l'auteur
--%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
[Link]
<jsp:element name="text">
<jsp:attribute name="lang">EN</jsp:attribute>
<jsp:body>Hello World!</jsp:body>
</jsp:element>
</jsp:root>
Syntaxe standard
<%@page
[language="java"]
[import="package1, package2, …"]
[errorPage="URLRelative"]
[extends="[Link]"]
[contentType="typeMime"]
[pageEncoding="encodage"]
…
%>
Syntaxe XML
<jsp:[Link]
[contentType="typeMime"]
[pageEncoding="encodage"]
[language="java"]
[errorPage="URLRelative"]
[import="package1, package2, …"]
/>
Pour une page .jspx il faut en premier lieu ajouter le prologue XML :
Syntaxe standard
Syntaxe XML
Exemple
<%-- Commentaire de type JSP alors que le précédent est de type html --%>
Syntaxe standard
<%!
déclaration1; déclaration2;
%>
Syntaxe XML
<jsp:declaration>
déclaration1; déclaration2;
</jsp:declaration>
Exemples
L'élément scriptlet permet d'ajouter dans une page JSP un bloc d'instructions. La
déclaration de variables locales au scriptlet est possible.
Une page JSP peut être composée de plusieurs scriptlets.
Syntaxe standard
<%
code1;
code2;
%>
Syntaxe XML
<jsp:scriptlet>
code1;
code2;
</jsp:scriptlet>
Exemples
<%
liResultat = liDividende / liDiviseur;
[Link]("a/b : " + liResultat);
<jsp:scriptlet>
liResultat = liDividende / liDiviseur;
[Link]("a/b : " + liResultat);
</jsp:scriptlet>
Note : la syntaxe XML n'autorise pas d'éléments XML dans un scriptlet. Donc pas
d'éléments XHTML (Des <br/> par exemple …).
Exemple de code
Cette première page JSP a pour objectif de montrer la structure d'une page JSP
avec les trois premiers éléments (Directive de page, déclaration, scriptlet).
Elle affiche du texte et le contenu d'une variable.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>declarationsJSP</title>
</head>
<body>
</body>
</html>
Version 2
</body>
</html>
</jsp:root>
Notes :
Comme un scriptlet n'admet pas d'éléments XML, il y a une possibilité en fermant la balise <jsp:scriptlet>, écrire un
<br/> et ouvrir une autre balise <jsp:scriptlet>.
Ou bien utiliser des entités XML. Quelques-unes sont reconnues en standard. La plupart doivent être déclarées.
Dans le cas de <br/> les entités standards suffisent.
Syntaxe standard
Syntaxe XML
<jsp:expression>
expression
</jsp:expression>
Exemples
<%!
int liCtr = 4;
%>
<jsp:declaration>
int liCtr = 4;
String libelle = "liCtr : ";
</jsp:declaration>
<jsp:expression>
[Link]([Link](liCtr))
</jsp:expression>
Notes :
Il n'y a pas de ; à la fin de l'expression.
Dans la syntaxe XML la concaténation avec + est impossible. Il faut passer par la fonction concat().
Syntaxe standard
Syntaxe XML
Exemple
L'écran
_enTete.html
<h3>Site du cinéma</h3>
_sommaire.html
<table>
<tr>
<td><a href="[Link]">Départements</a></td>
<td><a href="[Link]">Villes</a></td>
<td><a href="[Link]">Arrondissements</a></td>
</tr>
</table>
_pied.jsp
Note :
_enTete.jspx
_sommaire.jspx
_pied.jspx
<jsp:expression>
[Link](lsDate)
</jsp:expression>
</jsp:root>
Syntaxe standard
Objet Description
request La requête du client
response La réponse du serveur
pageContext Le contexte de la page en cours
session La session
application Gestion des éléments de niveau application
out Gestion des flux de sortie
config Contexte de configuration de la page JSP
page Gestion de l'instance de servlet générée
exception Gestion de l'exception en cours
Par définition, pour les objets implicites il n'est pas nécessaire qu'ils soient
instanciés pour que l'on puisse utiliser leurs méthodes.
Objet Bibliothèque
Request [Link]
Response [Link]. httpservletresponse
Out [Link]
Session [Link]
PageContext [Link]
Application [Link]
Config [Link]
Page [Link]
Méthodes Fonctions
setAttribute() Permet d'affecter une valeur à une variable de session ou
d'application
getAttribute("attribut") Permet de récupérer la valeur d'une variable de session ou
d'application
getParameter("attribut" Permet de récupérer la valeur d'un attribut d'une
) requête
getParameterNames() Liste des noms des attributs d'une requête (Une
Enumeration)
getParameterValues("attrib Liste des valeurs des attributs d'une requête lorsque
ut") plusieurs éléments HTML ont le même nom, par exemple des
boutons radio non exclusifs (un tableau de String[])
getCookies() Cf le paragraphe sur les cookies
getRemoteAddr() Ip du client
getRemoteHost() Host du client
getRemoteUser() User connecté
getServerName() Nom du serveur
getServerPort() Port d'écoute du serveur
getHeaderNames() Enumération des noms d'en-tête
getHeader("variable") Permet de récupérer des valeurs des en-têtes http ("User-
Agent", "host", "accept-language", …).
getHeader("referer") L'url de la page qui a requêté la page actuelle (La page
précédente)
getRequestURL() L'url de la JSP requêtée (La page actuelle)
getQueryString() Les attributs et valeurs de l'URL sous forme de chaîne
a=v&a=v…
getContextPath() La racine du site (Chemin relatif) … un peu plus haut !!!
[Link]("/") renvoie aussi la racine du site
(chemin absolu).
Pour les méthodes getAttribute(), setAttribute(), cf les paragraphes sur les objets
Session et Application.
Exemples de chemins :
[Link]() : /WebAppLibrairie
[Link]().getRealPath('/') : C:\___pascal\supports\java_supports\projetsJava\WebAppLibrairie\build\web\
[Link]('/') : C:\___pascal\supports\java_supports\projetsJava\WebAppLibrairie\build\web\
La page html
La page JSP
</jsp:root>
L'écran
Le script jsp
Le script jspx
</jsp:root>
Objectif
Syntaxe
[Link]("User-agent")
Script jsp
<%
// --- [Link]
if([Link]("User-agent").indexOf("Firefox") != -1)
[Link]("Navigateur Firefox");
if([Link]("User-agent").indexOf("MSIE") != -1)
[Link]("Navigateur IE");
%>
Script jspx
<jsp:scriptlet>
if([Link]("User-agent").indexOf("Firefox") != -1)
[Link]("Navigateur Firefox");
if([Link]("User-agent").indexOf("MSIE") != -1)
[Link]("Navigateur IE");
</jsp:scriptlet>
</jsp:root>
Exercice
Testez Chrome.
L'écran
Script jsp
<%
// --- [Link]
// --- Les attributs de l'objet REQUEST
Enumeration enumHeaders = [Link]();
while([Link]())
{
Object oEnTete = [Link]();
String lsNomEnTete = [Link]();
String lsValEnTete = [Link](lsNomEnTete);
[Link]("<br />En-tête : " + lsNomEnTete + " , Valeur : " + lsValEnTete);
}
%>
Script jspx
<jsp:scriptlet>
Enumeration enumHeaders = [Link]();
while([Link]())
{
Object oEnTete = [Link]();
String lsNomEnTete = [Link]();
String lsValEnTete = [Link](lsNomEnTete);
[Link]("<br/>En-tête : " + lsNomEnTete + " , Valeur : " +
lsValEnTete);
}
</jsp:scriptlet>
</jsp:root>
Exercice
Ajoutez dans une page JSP ou JSPX l'élément nécessaire pour retourner vers la
page précédente.
La page JSP qui récupère des informations provenant d'une page HTML.
Commentaires
Autre
<%
String[] attributsUrl = [Link]("rb_hobbie");
[Link]
rb_hobbie=livre&rb_hobbie=musique
La version JSPX
<jsp:scriptlet>
Enumeration attributsUrl = [Link]();
while([Link]())
{
String lsNomAttribut = (String)[Link]();
String lsValAttribut = [Link](lsNomAttribut);
[Link]("Paramètre : " + lsNomAttribut + " , Valeur : " + lsValAttribut);
</jsp:scriptlet>
<br/>
<jsp:scriptlet>
}
</jsp:scriptlet>
</jsp:root>
Objectif
Démarche
Script
[Link]
Note : plus simple. Soit avec <form action="" method="get"> ou encore <form>
mais pas très W3C la dernière!
<%
if([Link]() != null)
{
[Link]("Votre nom : " + [Link]("nom"));
}
%>
[Link]
<jsp:scriptlet>
if([Link]() != null)
{
[Link]("Votre nom : " + [Link]("nom"));
}
</jsp:scriptlet>
</jsp:root>
En mode POST il n'y a pas d'attributs dans l'url. La démarche consiste à savoir si
la requête vers la page provient de la page elle-même ou pas.
C'est avec [Link]("referer") que l'on teste la provenance de la
requête.
On compare ce dernier résultat avec [Link]() concaténé avec
http:// + [Link]() + ":" + [Link]().
[Link]
<%
if([Link]("referer") != null)
{
String lsSelf = "[Link] + [Link]() + ":" +
[Link]() + [Link]();
if([Link]("referer").equals(lsSelf))
{
[Link]("<br/>Votre nom : " + [Link]("nom") + "<br />");
}
}
%>
[Link]
<jsp:scriptlet>
if([Link]("referer") != null)
{
String lsSelf = "[Link] + [Link]() + ":" +
[Link]() + [Link]();
if([Link]("referer").equals(lsSelf))
{
[Link]("Votre nom : " + [Link]("nom"));
}
}
</jsp:scriptlet>
</jsp:root>
Principales méthodes :
Méthode Fonction
AddCookie(c) Cf le paragraphe suivant
sendRedirect("url absolue") Redirige vers une URL absolue (C'est son avantage et
inconvénient).
Cf plus loin [Link]("chemin") qui redirige
vers une url relative et permet la transmission de valeurs.
NB : cf l'objet out qui est surtout employé pour envoyer la réponse au client.
Exemple de redirection :
<%
String lsDestination = "[Link] + [Link]() + ":" +
[Link]() + [Link]() +
"/jsp/[Link]";
[Link](lsDestination);
%>
ou
<%
String lsDestination = "[Link]"; // --- Si dans le même
dossier
[Link](lsDestination);
%>
lsDestination contient :
[Link]
Parce que :
Méthode Fonction
Cookie cookie = new Cookie("NomDuCookie", Constructeur de la classe
"valeurDuCookie") cookie
[Link](cookie) Ajoute un cookie
[Link](secondes) Etablit la durée de vie d'un
cookie
[Link] Exemple
Objectif
Ecrans
Scripts
[Link]
[Link]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
Cookie lCookieNom, lCookiePrenom;
[Link]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
Cookie laCookie[];
Cookie lCookie;
String lsNomCook, lsValeurCook;
laCookie = [Link]();
if(laCookie != null)
{
for(int i=0; i<[Link]; i++)
{
lCookie = laCookie[i];
lsNomCook = [Link]();
if([Link]("nom") || [Link]("prenom"))
{
lsValeurCook = [Link]();
[Link](lsNomCook + ":" + lsValeurCook + "<br />");
}
}
}
%>
</body>
</html>
Exercices
Cette interface permet de créer une session entre un client et un serveur HTTP.
La session persiste pendant une période de temps déterminée, du début de la
connexion du client jusqu'à sa déconnexion. Une session correspond à un
utilisateur. Le serveur lors d'une session peut créer des variables de session (si
les cookies sont acceptés).
Méthode Fonction
setAttribute("nomDeVariable", Crée et/ou affecte une valeur à une variable de
"valeur") session
Var = getAttribute("nomDeVariable") Récupère une valeur d'une variable de session
removeAttribute("nomDeVariable") Supprime une variable de session
[Link] Exemple
Objectif
Ecrans
Scripts
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session_1.jsp</title>
</head>
<body>
<%
String lsLogin = "Pascal";
String lsMdp = "secret";
int liCtr = 0;
[Link]("login", lsLogin);
[Link]("mdp", lsMdp);
[Link]("Entier", [Link](liCtr));
%>
L'id de la session est : <%= (String)[Link]() %>
<br />La session est-elle nouvelle ? <%= [Link]() %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session_2.jsp</title>
</head>
<body>
Votre login : <%= (String)[Link]("login") %>
<br />Votre mot de passe : <%= (String)[Link]("mdp") %>
<br />L'id de la session est : <%= (String)[Link]() %>
<br />La session est-elle nouvelle ? <%= [Link]() %>
</body>
</html>
Exercice
Méthode Fonction
setAttribute("nomDeVariable", valeur) Crée une variable de niveau application
getAttribute("nomDeVariable") Renvoie la valeur d'une variable de niveau
application
getInitParameter("nom d'un Renvoie le paramètre d'initialisation
paramètre d'init de [Link]")
getMimeType("nomDeFichier") Renvoie le type mime d'un fichier
getRealPath("chemin") Renvoie le chemin absolu du site
getServerInfo() Renvoie des informations sur le serveur de
servlets
getMajorVersion() Version
getMinorVersion() Version
getResourceAsStream("/ressource") Lit un flux
Exemples
<%
[Link]([Link]() + ":" + [Link]() +
[Link]());
%>
renvoie : localhost:8085/WebAppJSP
alors que
<%
[Link]([Link]("/"));
%>
renvoie : C:\___pascal\supports\java_supports\projetsJava\WebAppJSP\build\web\
MimeType()
<%
String mimeType;
mimeType = [Link]("[Link]"); // --- renvoie image/gif
//mimeType = [Link]("[Link]"); // --- renvoie image/jpeg
//mimeType = [Link]("[Link]"); // --- renvoie text/plain
//mimeType = [Link]("[Link]"); // --- renvoie text/html
//mimeType = [Link]("jsp_02_07.jsp"); // --- renvoie null
[Link]("<br/>" + mimeType);
// etc
%>
[Link] Exemple
Objectif
Ecran
Script
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>application_2.jsp</title>
</head>
<body>
<%!
String isCompteur = null;
int iiCompteur = 0;
%>
<%
[Link]("Server information : " + [Link]());
}
[Link]("<br/>Compteur global : " + iiCompteur);
Définition
Nous avons plusieurs fois utilisé l'objet out et sa méthode print() pour afficher
des informations dans une page.
Méthodes Fonctions
print() Affiche une chaîne
println() Idem avec un saut de ligne dans le code
write() Idem
close() Ferme le canal
clear() Vide la sortie
clearBuffer() Vide le buffer
flush() Vide le buffer vers la destination
getBufferSize() Renvoie la taille du buffer
Définition et méthodes
Méthode Fonction
getInitParameter("paramè Renvoie la valeur d'un paramètre d'initialisation
tre")
getInitParameterNames() Renvoie les noms des paramètres d'initialisation
getServletContext() Renvoie un contexte de servlet
Quelque chose comme cela :
[Link]@5dc994
getServletName() Renvoie le nom de la servlet
Objectif
Ecran
Script
NB : il permet d'initialiser une page via [Link] comme c'est la cas avec une servlet. Cf les annexes dans le support sur les
servlets.
Définition et méthodes
<%
[Link]("<br />Page : " + [Link]());
[Link]("<br />This : " + [Link]());
[Link]("<br />Class : " + [Link]().toString());
%>
Définition
Méthode Fonction
forward("chemin") Renvoie la requête courante vers un autre composant actif de
l'application. Le chemin est relatif.
getAttribute() Renvoie un attribut
getAttributesNamesInSco Renvoie une liste d'attributs
pe()
getAttributesScope() Renvoie une liste d'attributs
getOut() Renvoie le JspWriter de la page courante
getPage() Renvoie l'instance de la page
getRequest() Renvoie la requête courante
getResponse() Revoie la réponse courante
getServletConfig() Renvoie la configuration de la JSP
getServletContext() Renvoie le contexte de la JSP
getSession() Renvoie la HttpSession courante
…
Exemples
Définition et méthodes
Principales méthodes :
Méthode Fonction
toString() Renvoie le message d'erreur (classe d'exception + erreur)
getMessage() Renvoie l'erreur
La page d'erreur doit avoir cette directive de page … si c'est une page jsp :
Ecran de saisie
Ecran standard
Ecran personnalisé
Scripts
<html>
<head><title>[Link]</title></head>
<body>
<form action="[Link]" method="get">
Dividende : <input name="dividende" type="text" value="12" />
Diviseur : <input name="diviseur" type="text" value="0" />
<input type="submit" />
</form>
</body>
<html>
<head><title>[Link]</title></head>
<body>
<%@page language="java" import="[Link]" errorPage="[Link]" %>
<%!
int liDividende;
int liDiviseur;
int liResultat;
%>
<%
liDividende = [Link]([Link]("dividende"));
liDiviseur = [Link]([Link]("diviseur"));
liResultat = liDividende / liDiviseur;
[Link]("<br />Résultat de la division : " + liResultat);
%>
</body>
</html>
<html>
<head><title>[Link]</title></head>
<body>
<%@page language="java" isErrorPage="true" %>
</html>
La réécriture d'URL.
La gestion de champs cachés (cf support sur les servlets).
Technique
Ecrans
Scripts
<body>
<%
String v1 = "10";
[Link]("sv1", v1);
[Link]("<br /><br />\n<a href='" +
[Link]("[Link]") + "'>"+ "[Link]"
+"</a>");
v1 = (String)[Link]("sv1");
[Link]("<br />Variable de session sv1 'envoyée' : " + v1);
%>
</body>
</html>
<body>
<%
[Link]("<br />Variable de session sv1 : " + [Link]("sv1"));
%>
</body>
</html>
1.5.1 Présentation
Les JavaBeans, tels qu'ils sont définis par SUN, s'appliquent en premier lieu aux
composants graphiques réutilisables.
Les définitions ici présentes s'appliquent au domaine des JSP.
Un JavaBean peut être un simple conteneur; il ne contient que des données; c'est
un bean de valeurs.
S'il implémente une logique métier, avec des actions, la partie modèle du MVC
c'est un bean utilitaire.
Dans une application basée sur les JSP, les JavaBeans structurent et réduisent la
quantité de code java (scriptlet) à insérer dans le code JSP.
Dans une application basée sur les JSP et les servlets les JavaBeans vont servir à
stocker et transporter des informations entre les "deux mondes" (Contrôleur et
Vue).
Bibliographie : [Link]
Les types peuvent être des types simples, des types indexés (tableaux), des
classes java.
Lorsque l'on passe des valeurs à un JavaBean, dans une JSP, à partir des données
saisies dans un formulaire HTML ou JSP, si la propriété [name] des éléments de
formulaire est identique au nom de la propriété du JavaBean, le passage se fait
de façon transparente et même en bloc.
1.5.3 Stockage
1.6.1 Présentation
Alors que les éléments de directive, qui sont examinés et fixés lors de la phase
de compilation, déterminent la nature de la page JSP, que les éléments de
déclaration et de script permettent d'ajouter du code java – ce qui doit toujours
être fait avec une extrême parcimonie pour faciliter la maintenance et rester
dans une logique JSP, et que les objets implicites permettent de gérer les
requêtes clients et l'état de l'application - via les cookies, la session et
l'application - les éléments action qui sont les éléments d'exécution, propres à
l'application que vous êtes en train de construire, sont évalués lors de
l'exécution.
</jsp:root>
Cet élément permet d'utiliser des composants JavaBeans (pas des EJB) dans des
pages JSP.
Ceci permet d'implémenter l'architecture n-tiers.
La page JSP implémentera la couche présentation de l'application, et le JavaBean
implémentera la couche métier et/ou une partie, la couche DAO complétera
éventuellement le schéma.
Syntaxe
Exemple
Dans un premier exemple nous allons utiliser un bean qui stocke et restitue des
valeurs et des résultats de calcul.
Nous utiliserons les éléments setProperty et getProperty dont les syntaxes sont
exposées dans les paragraphes suivants.
[Link] Ecrans
[Link] Scripts
Script du bean
package beans;
import [Link];
// ------------------------------------------------
public class BeanEuroDollar implements Serializable
{
// --- Propriétés private
private String cours;
private String euros;
private String dollars;
ldDollars = [Link]([Link]) /
[Link]([Link]);
DecimalFormat fmt = new DecimalFormat("#.00");
[Link] = [Link](ldDollars);
return [Link];
}
}
<title>beans_3.html</title>
<form action="../jsp/Beans_3.jsp" method="post">
<label>Cours du dollar : </label>
<input name="cours" type="text" value="0.90" size="5" />
<label>Montant Euros : </label>
<input name="euros" type="text" value="10.0" size="5" />
<input type="submit" />
</form>
Note : Les noms des éléments du formulaire sont identiques aux noms des propriétés du JavaBean.
Commentaires
La page HTML permet la saisie de valeurs. Notez que le nom de l'élément HTML
est [cours] et sera repris par le bean. Autrement il faudrait passer par l'attribut
value de la balise setProperty. C'est ce que nous verrons au paragraphe suivant.
Dans le script – du pur JSP – nous utilisons les trois balises pour les beans –
useBean, setProperty, getProperty.
Objectif
Montrer que deux (ou plusieurs) JSP accèdent aux mêmes valeurs d'un Bean.
Scripts
</body>
</html>
</body>
</html>
Etant donné le fonctionnement des variables de session (Si les cookies sont
bannis les variables de session sont bannies aussi et donc le passage par des
JavaBeans de niveau session ne passent pas).
Syntaxe
Exemple
Syntaxe
Exemple
Syntaxe
ou
Dans les deux cas vous pouvez passer une URL absolue ou relative ou le résultat
d'une expression.
Dans le deuxième cas il est possible de passer un ou plusieurs paramètres à la
page incluse. Les valeurs des paramètres peuvent être le résultat d'une
expression.
L'objectif est d'utiliser des pages statiques disponibles pour plusieurs pages JSP.
Ecran
Scripts
<div id="enTete">
<jsp:include page="../html/_enTete.html" flush="true" />
</div>
<div id="sommaire">
<jsp:include page="../html/_sommaire.html" flush="true" />
</div>
<div id="centre">
<p>CENTRE</p>
</div>
<div id="pied">
<jsp:include page="_pied.jsp" flush="true" />
</div>
_enTete.html
<h3>Site du cinéma</h3>
_sommaire.html
<table>
<tr>
<td><a href="[Link]">Départements</a></td>
<td><a href="[Link]">Villes</a></td>
<td><a href="[Link]">Arrondissements</a></td>
</tr>
</table>
_pied.jsp
Objectif
[Link],
[Link]
[Link],
[Link].
Ecrans
Scripts
[Link]
<title>[Link]</title>
<h3>Julia Roberts</h3>
<form action="../jsp/[Link]" method="post">
<label>Avec photo</label>
<input type="radio" name="rbPhoto" value="AvecPhoto" checked="checked" />
<label>Sans photo</label>
<input type="radio" name="rbPhoto" value="SansPhoto" />
<input type="Submit" />
</form>
[Link]
<%!
String lsParam;
String lsValeur;
%>
<%
// --- Obligation de passer par un intermediaire pour recuperer le parametre
lsParam = [Link]("rbPhoto");
lsValeur = "../html/jr" + lsParam + ".html";
%>
<jsp:include page="<%= lsValeur %>" flush="true" />
[Link]
[Link]
</body>
</html>
Commentaires
Les instructions pertinentes sont celles qui se trouvent dans le deuxième script.
Syntaxe
[Link] Exemple
[Link]
<title>[Link]</title>
<h3>Choix cinémas de ...</h3>
<form action="../jsp/[Link]" method="post">
<label>Paris</label>
<input type="radio" name="rbChoix" value="Paris" checked="checked" />
<label>Périphérie</label>
<input type="radio" name="rbChoix" value="Peripherie" />
<input type="Submit" />
</form>
[Link]
<%!
String lsParam;
String lsDestination;
%>
<%
// --- Obligation de passer par un intermediaire pour recuperer le parametre
lsParam = [Link]("rbChoix");
lsDestination = "../html/Cinemas" + lsParam + ".html";
%>
<jsp:forward page="<%= lsDestination %>" />
[Link]
[Link]
L'élément plugin permet d'exécuter une applet dans une page JSP.
Syntaxe
<jsp:plugin
type="bean | applet"
code="[Link]"
codebase="cheminClasse"
[ height="pixels" ]
[ width="pixels" ]
[ hspace="pixels" ]
[ vspace="pixels" ]
[ align="bottom | top | middle | left | right" ]
[ name="nomDInstance" ]
[ archive="nomDArchiveJAR" ]
[ jversion="versionJRE | 1.2" ]
….
>
[<jsp:params>
<jsp:param name="nomDuParamètre"
value="valeurDuParamètre" />
</jsp:params>]
[ <jsp:fallback>message d'erreur</jsp:fallback> ]
</jsp:plugin>
Objectifs
Afficher l'applet EurosDollars (cf le cours sur les applets), et en utilisant les
paramètres de l'applet, affecter aux JTextFields de l'applet des valeurs se
trouvant dans la page JSP.
Récupérer dans le JSP les valeurs de l'applet. L'applet possède 2 méthodes pour
cela : getEurosDollars() et getDollarsEuros()
Script
Applet_1.jsp
<script type="text/javascript">
// --- De l'applet vers la JSP
function getEuros()
{
var convertisseur = [Link]("convertisseur")[0];
[Link]("euros").innerHTML =
[Link]();
}
function getDollars()
{
var convertisseur = [Link]("convertisseur")[0];
[Link]("dollars").innerHTML =
[Link]();
}
</script>
Commentaires
Dans la page JSP nous insérons une référence vers l'applet avec la balise
<jsp:plugin….> en précisant :
Puis nous affectons aux paramètres définis dans l'applet, avec la méthode
getParameter(nomDuParamètre), des valeurs à l'intérieur de la balise
<jsp:params> qui va contenir elle-même la liste des paramètres selon le format
suivant :
<jsp:param name= "nomDuParamètre" value="valeur" />
Objectif
Syntaxe
<jsp:text>
données de type chaîne
</jsp:text>
Exemple
<jsp:text>
Les données de la table [villes]
</jsp:text>
Objectif
Syntaxe
<jsp:root
xmlns:jsp=[Link]
[ xmlns:taglibPrefix="URI"]
version="2.0"
>
Page jsp
</jsp:root>
Exemple
1.7.2 Ecrans
Objectif
Script
Exercice
Objectif
Scripts
La page HTML
La page JSP
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
Connection lcConnexion = null;
Statement lstSQL = null;
String lsCp = [Link]("cp");
String lsNomVille = [Link]("nomVille");
String lsIdPays = [Link]("idPays");
String lsSQL = "INSERT INTO villes(cp,nom_ville,id_pays) VALUES('" + lsCp +
"','" + lsNomVille + "','" + lsIdPays + "')";
try
{
[Link]("[Link]");
lcConnexion =
[Link]("jdbc:mysql://localhost/cours","root","");
lstSQL = [Link]();
[Link](lsSQL);
[Link]();
lcConnexion = null;
[Link]("Nouvelle ville ajoutée");
}
catch(ClassNotFoundException err) { [Link]([Link]()); }
catch(SQLException err) { [Link]([Link]()); }
%>
</body>
</html>
Exercice
1.9.1 Objectif
Connexion
Insertion
Déconnexion
1.9.2 Démarche
Afficher le menu.
Connexion à la BD.
Insertion de l'enregistrement.
Déconnexion.
Tout passe par la servlet contrôleur [[Link]] qui est le point d'entrée
de l'application.
[Link]
Pour se connecter des valeurs (ut, mdp, bd, serveur) sont saisies dans un
formulaire jsp [[Link]] puis repassées au contrôleur
qui sollicite la méthode seConnecter() de la classe [[Link]]. si la
connexion est OK on revient vers le menu autrement le formulaire de connexion
est affiché à nouveau avec un message d'erreur.
Pour insérer dans la table des valeurs (cp, nomVille, idPays) sont saisies dans un
formulaire jsp [[Link]] et affectées aux propriétés d'un bean
([Link]) via la servlet contrôleur pour l'insertion.
Schéma simplifié
1
2
Servlet JSP
Se 4 3
5
Ge
JavaBean
1.9.3 Scripts
La servlet : [Link]
package Cours;
// --- [Link]
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link];
import [Link];
// -------------------------------------------
public class VillesServlet extends HttpServlet
// -------------------------------------------
{
private Connection cn;
String url="";
private Villes beanVilles;
private ConnexionMysql cnMySQL;
// --------------- Initialisation
public void init() throws ServletException
{
cnMySQL = new ConnexionMysql();
beanVilles = new Villes();
// getServletContext().setAttribute("beanCnMySQL", beanCnMySQL);
// getServletContext().setAttribute("beanVilles", beanVilles);
}
}
if([Link]("action").equals("deconnexion"))
{
[Link](requete, reponse);
}
}
// ---------------------
private void seConnecter(HttpServletRequest requete, HttpServletResponse
reponse) throws ServletException, IOException
{
String serveur = [Link]("serveur");
String bd = [Link]("bd");
String ut = [Link]("ut");
String mdp = [Link]("mdp");
String lsMessage = [Link](serveur, bd, ut, mdp);
if([Link]("Connexion OK"))
{
[Link] = [Link]();
[Link] = "/jsp/[Link]?message=" + lsMessage;
}
else
{
[Link] = "/jsp/[Link]?message=" + lsMessage;
}
[Link](requete, reponse);
}
// ---------------------
private void seDeconnecter(HttpServletRequest requete, HttpServletResponse
reponse) throws ServletException, IOException
{
String lsMessage = "";
if([Link]()) lsMessage = "Déconnexion OK";
else lsMessage = "Déconnexion KO";
[Link] = "/jsp/[Link]?message=" + lsMessage;
[Link](requete, reponse);
}
// ----------------------
private void villesInsert(HttpServletRequest requete, HttpServletResponse
reponse) throws ServletException, IOException
{
String lsMessage = "";
String cp = [Link]("cp");
String nomVille = [Link]("nomVille");
String idPays = [Link]("idPays");
[Link](cp);
[Link](nomVille);
[Link](idPays);
lsMessage = [Link]([Link]);
//[Link](url);
}
// ------------------ "Garbaging"
public void destroy()
{
// --- La servlet s'assure de détruire les beans de portée d'application
instanciés au démarrage
// getServletContext().removeAttribute("beanVilles");
// getServletContext().removeAttribute("beanCnMySQL");
}
<%
if([Link]("message") != null)
{
[Link]("<br/><label>[Link]("message") + "</label>");
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
if([Link]("message") != null)
{
[Link]("<br/>" + [Link]("message"));
}
%>
</body>
</html>
La classe [Link]
package beans;
import [Link].*;
// ------------------------
public class ConnexionMysql
// ------------------------
{
Connection cn;
// --- Méthodes
// ------------------------------------------------------------------------
public String seConnecter(String serveur, String bd, String ut, String mdp)
{
String lsMessage = "Connexion OK";
try
{
// --- Connexion MySQL
[Link]("[Link]");
String lsConnexion = "jdbc:mysql://" + serveur + "/" + bd;
[Link] = [Link](lsConnexion,ut,mdp);
[Link](false);
}
catch(ClassNotFoundException err) { lsMessage = "Erreur pilote : " +
[Link](); }
catch(SQLException err) { lsMessage = "Erreur SQL : " + [Link](); }
return lsMessage;
}
// ---------------------------
public boolean seDeconnecter()
{
try
{
[Link]();
//[Link] = null;
return true;
}
catch(SQLException err) { return false; }
}
// ----------------------
public Connection getCn()
{
return [Link];
}
}
Le Bean : [Link]
package beans;
import [Link];
import [Link].*;
// ----------------------------------------
public class Villes implements Serializable
// ----------------------------------------
{
private static final long serialVersionUID = 1L;
private String cp;
private String nomVille;
private String idPays;
// -----------------------
public boolean getValide()
{
return [Link];
}
// --------------------------------------
public String insererVille(Connection cn)
{
// --- Déclarations
String lsMessage = "Insertion OK";
Statement lstInsert;
String lsInsert = "INSERT INTO villes(cp,nom_ville,id_pays) VALUES ('" + cp
+ "','" + nomVille + "','" + idPays + "')";
try
{
// --- Insertion
lstInsert = [Link]();
[Link](lsInsert);
[Link]();
}
catch(SQLException err) { lsMessage = [Link](); }
return lsMessage;
}
}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
if([Link]("message")!=null)
{
[Link]("<br/><label>" + [Link]("message") + "</label>");
}
%>
</body>
</html>
Pas de servlets. Les beans sont gérés directement dans les pages jsp.
Une interface pour se connecter à la base,
Une interface pour saisir et insérer dans la table [villes],
Un bean pour se connecter et se déconnecter,
Un bean pour insérer dans la base.
1.10.2 Ecrans
Les mêmes.
1.11 DIVERS
<%@ page
language="java"
import="[Link], [Link].*"
%>
<%-- Scriptlet JSP : Le code --%>
<%
String lsContenu =
[Link]([Link]("[Link]"));
[Link]("<br />Début");
[Link]("<br />Contenu du fichier : " + lsContenu);
[Link]("<br />Fin");
%>
NB : la classe utilisée :
package [Link];
import [Link].*;
// ------------------------
public class GestionFichier
{
// ----------------------------------
public static String lireFichierText(String asNomFichier)
// ----------------------------------
{
String lsContenu = "";
String lsLigne;
FileReader lfrFichier;
BufferedReader lbrBuffer;
try
{
lfrFichier = new FileReader(asNomFichier);
lbrBuffer = new BufferedReader(lfrFichier);
while((lsLigne = [Link]()) != null) lsContenu +=
lsLigne + "\n";
[Link]();
}
catch(FileNotFoundException err) { lsContenu = [Link](); }
catch(IOException err) { lsContenu = [Link]();}
return lsContenu;
}
// ----------------------------------
public static String lireFichierByte(String asNomFichier)
// ----------------------------------
{
// --- Codez
}
}
1.11.2 Internationalisation
[Link] Objectif
Firefox IE 6
Firefox en Fr IE en EN
locale = [Link]();
[Link]("<br />" + [Link]());
Firefox en Fr IE en EN
Cf le support Java et XML pour une lecture d'un document XML via une page JSP
standard.
1.12 ANNEXES
package PackageApplets;
// --- Ligne 1
JLabel lblCoursDollar = new JLabel("Cours du dollar?");
JTextField tfCoursDollar = new JTextField("1.5",10);
JLabel lblVide1 = new JLabel("");
JLabel lblVide2 = new JLabel("");
// --- Ligne 2
JLabel lblEuro = new JLabel("Euros?");
JTextField tfEuros = new JTextField("10.0",10);
JButton cbDollars = new JButton("$");
JLabel lblEuros = new JLabel("");
// --- Ligne 3
JLabel lblDollar = new JLabel("Dollars?");
JTextField tfDollars = new JTextField("10.0",10);
JButton cbEuros = new JButton("€");
JLabel lblDollars = new JLabel("");
// --- Le constructeur
public EurosDollars()
{
[Link]([Link]);
{
lfCoursDollar = [Link]([Link]());
lfDollars = [Link]([Link]());
lfInter = lfDollars / lfCoursDollar;
[Link]([Link](lfInter));
}
else [Link]("Bécile!");
}
}
};
[Link](al);
[Link](al);
[Link](lblCoursDollar);
[Link](tfCoursDollar);
[Link](lblVide1);
[Link](lblVide2);
[Link](lblEuro);
[Link](tfEuros);
[Link](cbDollars);
[Link](lblDollars);
[Link](lblDollar);
[Link](tfDollars);
[Link](cbEuros);
[Link](lblEuros);
getContentPane().add(panneau);
}
// ---------------
@Override
public void init()
{
[Link](getParameter("coursDollar"));
[Link](getParameter("euros"));
[Link](getParameter("dollars"));
// [Link]("1.5");
// [Link]("10");
// [Link]("");
}
<%
if([Link]("User-agent").indexOf("Chrome") >= 0)
[Link]("Navigateur Chrome");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<%
Cookie laCookie[];
Cookie lCookie;
String lsNomCook;
laCookie = [Link]();
if(laCookie != null)
{
for(int i=0; i<[Link]; i++)
{
lCookie = laCookie[i];
lsNomCook = [Link]();
[Link]("<br/>"+lsNomCook);
if([Link]("nom") || [Link]("prenom"))
{
[Link](0);
[Link](lCookie);
}
}
}
%>
Cookies détruits !!!
</body>
</html>
4 scripts :
[Link]
[Link]
[Link]
[Link]
[Link]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PanierCatalogue</title>
<style type="text/css">
*{margin:0; padding:5px;}
#centre{float:left; border:1px dotted silver; width:200px; margin-
right:20px;}
iframe{float:left;}
</style>
</head>
<body>
<div id="centre">
<h5>PanierCatalogue</h5>
Coca<a href="[Link]?idProduit=1" target="cadre"><img
src="../images/[Link]" alt="Panier"/></a><br/>
Fanta<a href="[Link]?idProduit=2" target="cadre"><img
src="../images/[Link]" alt="Panier"/></a><br/>
Badoit<a href="[Link]?idProduit=3" target="cadre"><img
src="../images/[Link]" alt="Panier"/></a><br/>
<br/><br/>
<a href="[Link]" target="cadre">Voir le panier</a>
<br/>
<a href="[Link]" target="cadre">Vider le panier</a>
</div>
<iframe src="" name="cadre"></iframe>
</body>
</html>
[Link]
<body>
<%
Cookie laCookie[];
Cookie lCookie;
Cookie lCookiePanier;
String lsNomCook;
String lsPanier = "";
boolean lbPanierExiste = false;
laCookie = [Link]();
if(laCookie != null)
{
for(int i=0; i<[Link]; i++)
{
lCookie = laCookie[i];
lsNomCook = [Link]();
if([Link]("panier"))
{
lsPanier = [Link]() + "-" +
[Link]("idProduit");
lbPanierExiste = true;
}
}
if(!lbPanierExiste)
{
lsPanier = [Link]("idProduit");
}
}
// --- Si aucun n'existe mais il y a toujours JSESSIONID
else lsPanier = [Link]("idProduit");
[Link]
<body>
<%
Cookie laCookie[];
Cookie lCookie;
String lsNomCook, lsValeurCook;
boolean lbPanierExiste = false;
laCookie = [Link]();
if(laCookie != null)
{
for(int i=0; i<[Link]; i++)
{
lCookie = laCookie[i];
lsNomCook = [Link]();
if([Link]("panier"))
{
lsValeurCook = [Link]();
[Link]("Panier :" + lsValeurCook + "<br />");
lbPanierExiste = true;
}
}
if(!lbPanierExiste)
{
[Link]("Le panier est vide<br />");
}
}
else [Link]("Aucun cookie");
%>
</body>
[Link]
<body>
<%
Cookie lCookiePanier;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session_3.jsp</title>
</head>
<body>
<% [Link]("mdp"); %>
Votre login : <%= (String)[Link]("login") %>
<br />Votre mot de passe : <%= (String)[Link]("mdp") %>
</body>
</html>
Bandeau [Link]
[Link] Accueil
[Link]
<%@include file="[Link]" %>
<form action="[Link]" method="POST">
<label>Nom</label>
<input type="text" name="nom" value="Pascal" />
<label>Mot de passe</label><input type="text" name="mdp" value="mdp" />
<input type="submit" />
</form>
[Link]
<hr/>Bureau de change direct Euros en Dollars<hr/>
[Link]
[Link]("clientConnecte", lsNom);
if((String)[Link]("connectes") != null)
{
liConnectes = [Link](lsConnectes);
liConnectes++;
lsConnectes = [Link](liConnectes);
}
[Link]("connectes", lsConnectes);
%>
if(laCookie != null)
{
for(int i=0; i<[Link]; i++)
{
lCookie = laCookie[i];
lsNomCookie = [Link]();
lsValeurCookie = [Link]();
if([Link]("compteur"))
{
liFois = [Link](lsValeurCookie);
liFois++;
[Link]("fois", [Link](liFois));
lbTrouveCompteur = true;
}
}
if(!lbTrouveCompteur) [Link]("fois", "1");
}
else [Link]("fois", "1");
%>
[Link] Calcul
[Link]
%>
<br/><a href="[Link]">Se déconnecter</a>
[Link] Déconnexion
[Link]
Le menu : [Link]
Le même.
Le bean Villes
Le même.
<%
try
{
if([Link]()) [Link]("Connexion OK");
else [Link]("Connexion KO");
}
catch(Exception e) { [Link]("Erreur:" + [Link]()); }
%>
<%
try
{
if([Link]()) [Link]("Déconnexion OK");
else [Link]("Déconnexion KO");
}
catch(Exception e) { [Link]("Erreur:" + [Link]()); }
%>
<%
Connection cn = [Link]();
boolean lbOk = true;
try
{
lbOk = [Link](cn);
}
catch(Exception e) { [Link]([Link]()); }
if(lbOk) [Link]("<br/>Insertion OK");
else [Link]("<br/>Insertion KO");
%>
Script
<%
if([Link]("referer") != null)
{
String lsSelf = "[Link] + [Link]() + ":" +
[Link]() + [Link]() + "/jsp/[Link]";
if([Link]("referer").equals(lsSelf))
{
Villes ville = new Villes();
[Link]([Link]("cp"));
[Link]([Link]("nomVille"));
[Link]([Link]("site"));
[Link]([Link]("photo"));
[Link]([Link]("idPays"));
if([Link]("cbAjouter") != null)
{
[Link]("<br/>" + [Link]());
}
if([Link]("cbSupprimer") != null)
{
[Link]("<br/>" + [Link]());
}
}
}
%>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<h4>villesSelectUnViaDAO</h4>
<form action="" method="get">
Cp ? <input type="text" name="cp" value="75021" size="5" />
<input type="submit" />
</form>
<%
if([Link]() != null)
{
Villes ville = new Villes();
VillesDAO villeDao = new VillesDAO();
ville = [Link]([Link]("cp"));
[Link]([Link]());
}
%>
</body>
</html>
1.15 EN ATTENTE
JavaBeans et BD.
Deux JavaBeans utilitaires : ConnexionMysql et Villes.
Une page HTML pour se connecter.
Une page JSP pour se connecter.
Une page JSP pour récupérer une ville via son CP.
ConnexionMysql
Cn
Serveur
Bd
Ut
Mdp
ConnexionMysql()
Setters et getters
seConnecter()
seConnecter(serveur, bd, ut, mdp)
seDeconnecter()
Villes
Cp
nomVille
idPays
Villes()
Setters et getters
inserer(cn)
getOne(cn, cp)
getOne(cn)
getAll(cn)
package beans;
import [Link].*;
// ------------------------
public class ConnexionMysql
// ------------------------
{
Connection cn;
String serveur;
String bd;
String ut;
String mdp;
try
{
// --- Connexion MySQL
[Link]("[Link]");
String lsConnexion = "jdbc:mysql://" + [Link] + "/" + [Link];
[Link] = [Link](lsConnexion,[Link],[Link]);
[Link](false);
}
catch(ClassNotFoundException err) { lsMessage = "Erreur pilote : " +
[Link](); }
catch(SQLException err) { lsMessage = "Erreur SQL : " + [Link](); }
return lsMessage;
}
// ------------------------------------------------------------------------
public String seConnecter(String serveur, String bd, String ut, String mdp)
{
String lsMessage = "Connexion OK";
try
{
[Link] = serveur;
[Link] = bd;
[Link] = ut;
[Link] = mdp;
// --- Connexion MySQL
[Link]("[Link]");
String lsConnexion = "jdbc:mysql://" + serveur + "/" + bd;
[Link] = [Link](lsConnexion,ut,mdp);
[Link](false);
}
catch(ClassNotFoundException err) { lsMessage = "Erreur pilote : " +
[Link](); }
catch(SQLException err) { lsMessage = "Erreur SQL : " + [Link](); }
return lsMessage;
}
// ---------------------------
public boolean seDeconnecter()
{
try
{
[Link]();
return true;
}
catch(SQLException err) { return false; }
}
// ----------------------
public Connection getCn()
{
return [Link];
}
// -------------------------
public void setUt(String ut)
{
[Link] = ut;
}
// ------------------
public String getUt()
{
return [Link];
}
// ---------------------------
public void setMdp(String mdp)
{
[Link] = mdp;
}
// -------------------
public String getMdp()
{
return [Link];
}
// ------------------
public String getBd() {
return bd;
}
// -------------------------
public void setBd(String bd) {
[Link] = bd;
}
// -----------------------
public String getServeur() {
return serveur;
}
// -----------------------------------
public void setServeur(String serveur) {
[Link] = serveur;
}
}
package beans;
import [Link];
import [Link].*;
import [Link];
// ----------------------------------------
public class Villes implements Serializable
// ----------------------------------------
{
private static final long serialVersionUID = 1L;
private String cp;
private String nomVille;
private String idPays;
private ArrayList listeVilles;
// -----------------------
public boolean getValide()
{
return [Link];
}
// ---------------------------------
public String inserer(Connection cn)
{
// --- Déclarations
String lsMessage = "Insertion OK";
PreparedStatement lpstInsert = null;
String lsInsert = "INSERT INTO villes(cp,nom_ville,id_pays) VALUES(?,?,?)";
try
{
// --- Insertion
lpstInsert = [Link](lsInsert);
[Link](1, cp);
[Link](2, nomVille);
[Link](3, idPays);
[Link](lsInsert);
[Link]();
}
catch(SQLException e) { lsMessage = [Link](); }
return lsMessage;
}
// ------------------------------------------------
public String selectOne(Connection cn, String asCP)
{
// --- Déclarations
//String lsMessage = "Selection OK";
String lsNomVille = "";
PreparedStatement lpstSelect = null;
ResultSet lrs = null;
String lsSelect = "SELECT nom_ville FROM villes WHERE cp=?";
try
{
// --- Extraction
lpstSelect = [Link](lsSelect);
[Link](1, asCP);
lrs = [Link]();
[Link]();
lsNomVille = [Link](1);
}
catch(SQLException e) { lsNomVille = [Link](); }
[Link] = lsNomVille;
return lsNomVille;
}
// --------------------------------------
public ArrayList selectAll(Connection cn)
{
// --- Déclarations
ArrayList alVilles = new ArrayList();
Statement lstSelect = null;
ResultSet lrs = null;
String lsSelect = "SELECT nom_ville FROM villes";
try
{
// --- Extraction
lstSelect = [Link]();
lrs = [Link](lsSelect);
while([Link]())
{
[Link]([Link](1));
}
}
catch(SQLException e) { }
[Link] = alVilles;
return alVilles;
}
// ------------------------------
<%
[Link]();
Connection cn = [Link]();
%>
<%
[Link](cn);
[Link](cn);
%>
<%
[Link]("<br/>Une ville de la liste : " + [Link]().get(0));
%>
[Link]
[Link]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<jsp:useBean id="connexion" scope="application"
class="[Link]" >
<jsp:setProperty name="connexion" property="*"/>
</jsp:useBean>
<%
try
{
String lsOk = [Link]();
[Link]
[Link]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Link]</title>
</head>
<body>
<jsp:useBean id="villes" scope="application" class="[Link]" >
<jsp:setProperty name="villes" property="*"/>
</jsp:useBean>
<jsp:useBean id="connexion" scope="application"
class="[Link]" />
<%
[Link]([Link](), [Link]("cp"));
%>
<br/>La ville ... <jsp:getProperty name="villes" property="nomVille"/>
</body>
</html>