cours j2ee -présentation
TRANSCRIPT
4
Construction d'une application Web
Préparer une arborescence par exemple dans le répertoire SiteWebTP. A partir de la racine de
cette arborescence placer correctement :
le répertoire WEB-INF
le répertoire classes où seront placées les servlets compilés
le fichier web.xml
5
Le déploiement est une étape essentielle de la mise en place d’une application web. En effet,
le serveur doit être capable de localiser les servlets et les JSP invoquées par le navigateur.
9
Application JSP/Servlet
Lorsque l'utilisateur soumet ce formulaire, son nom est envoyé au servlet Hello parce nous
avons mis l'attribut ACTION pointer vers le servlet. Le formulaire utilise la méthode Get,
de sorte que toutes les données sont ajoutées (appended) à la requête URL comme une requête
de chaîne.
Par exemple, si l'utilisateur entre le nom "Inigo Montoya," la requête URL est
http: //serveur: 8080 / servlet / Hello ? name = Inigo +Montoya .
10
L'espace dans le nom est spécialement codé comme un signe plus par le navigateur (browser),
car les URL ne peuvent pas contenir d'espaces
Une servlet qui sait à qui dit Hello
La méthode getServletInfo( ) donne des informations descriptives sur le servlet.
11
JSP
Traducteur sous forme Servlet (méthode Get)
Import java.io.* ;
Import javax.servlet.* ;
Import javax.servlet.http.* ;
public class traduire extends HttpServlet(
// traiter la requête avec doGet( )
Public void doGet (HttpServletRequest req, HttpServletResponse rep)
Throws IOException, ServletException(
12
//Initialisation du type de la réponse
rep.setContentType (text/html)
// Ouverture du flux de la réponse http
PrintWriter pw=rep.getWriter ( ) ;
// Envoyer le code HTML sur le flux http
pw.println (<html>) ;
pw.println (<head>) ;
pw.println (<title>Une servlet pour traduire </title> ) ;
pw.println (</head>) ;
pw.println (<body bgcolor=’white’>) ;
// Vérifier si une phrase est transmise avec la requête
If (req.getParameter (phrase) == null) {
pw.println (<font size=+1>) ;
pw.println (Je n’ai pas de phrase à traduire</font>) ;
}
else {
//traiter la phrase fournie en paramètre
String phrase = req.getParameter (phrase) ;
phrase = phrase.replace (‘a’,’*’) ;
phrase = phrase.replace (‘o’,’ !’) ;
phrase = phrase.replace (‘e’,’%’) ;
}
pw.println (</body>) ;
pw.println (</html>) ;
}
}
Traducteur sous la forme d’un JSP
<html>
<head>
<title> Un JSP pour traduire une phrase </title>
</head>
13
<%--debut de scriplet --%>
<%
<%--rechercher le paramètre phrase transmis avec la requête --%>
String p= request.getParameter (phrase) ;
if (p !=null) {
<%-- si p ne vaut pas null, un paramètre est transmis le traiter --%>
p = p.replace (‘a’,’*’) ;
p = p.replace (‘o’,’ !’) ;
p = p.replace (‘e’,’%’) ;
%>
<%-- fin du if, affichage à l’aide de balises HTML --%>
<%-- affichage du contenu de p --%>
<p> J’ai compris : <%=p%> </p>
<%-- debut du else --%>
<%-- si il n’y a pas de paramètre transmis p vaut null --%>
} else {
%>
<%-- affichage à l’aide de balises HTML --%>
<p> Erreur : vous avez oublié la phrase à traduire <BR>
Exemple : http://localhost:8080/jsp/traduire.jsp?phrase=cours JSP LST IGI </p>
<%-- fin de else, fin de la scriplet --%>
<%
}
14
%>
</body>
</html>
Traducteur avec javaBean
// Un javabean doit être sérialisable pour être envoyer sur un flux
Import java.io.Serializable
public class phrase implements java.io.Serializable (
// Définition de la propriété de javaBean
private string phrase ;
// Définition de la méthode d’accès à la propriété, en modification
// Cette méthode remplace les caractères de la propriété de l’objet
Public void setphrase (string p) {
Phrase=p ;
phrase = phrase.replace (‘a’,’*’) ;
phrase = phrase.replace (‘o’,’ !’) ;
phrase = phrase.replace (‘e’,’%’) ;
}
// Définition de la méthode d’accès à la propriété, en consultation
Public void getphrase ( ) {
Return phrase ;
}
}
Un JSP qui appelle le javaBean phrase
<html>
15
<head>
<title> Java Bean pour traduire une phrase </title>
</head>
<body>
<%--Utiliser phrase.class, comme JavaBean avec comme nom d’objet p --%>
<jsp :useBean id=p class= phrase/>
<%--Placer dans la propriété phrase de l’objet p --%>
<%--la valeur du paramètre transmis avec la requête --%>
<jsp :setProperty name=p property= phrase param= param />
<%--récupérer la valeur de la propriété de l’objet p --%>
<BR> J’ai compris : <jsp :getProperty name=p property= phrase />
</body>
</html>
16
Application : Résultat d’une enquête
Le servlet stocke les résultats d’une enquête concernant vos animaux de compagnie préférés
sur le serveur. Lorsqu’un utilisateur répond à l’enquête, le servlet HTTPPostServlet envoie
un document HTML au client qui résume les résultats de l’enquête jusqu’à ce stade.
L’utilisateur choisit son animal préféré dans un bouton radio de la page Web de la figure puis
appuie sur Soumettre. Le navigateur envoie une requête POST en HTTP au servlet; celui-ci
réagit en lisant les résultats précédents de l’enquête dans un fichier sur le serveur, il met les
résultats du sondage à jour, les réinscrit sur le fichier du serveur, et il envoie enfin une page
Web au client qui lui indique les résultats cumulés de l’enquête.
19
La méthode doPost commence par déterminer si le fichier sondage.txt existe sur le serveur.
La ligne 18 définit un objet File nommé f dans ce but. Le programme ne fournit pas
d’emplacement pour le fichier. Par défaut, les fichiers créés par un servlet exécuté par le
WebServer JSDK sont stockés dans le répertoire d’installation du JSDK (jsdk2.1). Vous
pouvez imposer l’emplacement de stockage du fichier au moment de la création de l’objet
File.
À la ligne 20, si le fichier existe, son contenu est lu par le servlet, de sorte que les résultats du
sondage seront mis à jour et renvoyés au client en cours. Si le fichier n’existe pas, c’est-à-dire
si la requête actuelle est la toute première réponse au sondage, la méthode doPost crée le
fichier un peu plus loin dans le code.
20
Le tableau d’entiers animaux stocke le nombre de réponses pour chaque type d’animal. Si le
fichier qui contient les résultats précédents au sondage existe, alors les lignes 23 à 30 ouvrent
un ObjectInputStream pour lire le tableau d’entiers animaux et totaliser le nombre de
réponses qui ont été reçues jusqu’à cette étape. Lorsque le servlet crée le fichier et stocke le
tableau d’entiers, il utilise un ObjectOutputStream pour écrire le fichier.
La ligne 42 incrémente le total pour indiquer qu’il y a une réponse de plus au sondage.
Les lignes 45 à 47 déterminent l’animal sélectionné par le client et mettent à jour le total de
l’animal adéquat. Les lignes 50 à 55 ouvrent un ObjectOutputStream pour stocker les
résultats mis à jour de l’enquête dans le fichier sondage.txt. Ce fichier garantit que, même si
le servlet est interrompu et redémarré, les résultats du sondage demeurent sur disque.
Les lignes 58 à 61 préparent le pourcentage du total des votes qui représentent chaque animal.
Ces résultats sont renvoyés à l’utilisateur dans une partie de la HttpServletResponse.
Nous préparons la réponse à partir de la ligne 64, où la méthode setContentType de
ServletResponse spécifie que le contenu sera du texte d’un document HTML (text/html).
La ligne 66 utilise la méthode getWriter de ServletResponse pour obtenir une référence à un
objet PrintWriter et affecte celle-ci à sortieReponse. Cette référence sert à envoyer la
réponse au client. Le StringBuffer tamp de la ligne 67 stocke le contenu de la réponse
pendant que le servlet prépare le document HTML. Les lignes 68 à 86 préparent son contenu
par une suite d’appels à la méthode append de StringBuffer.