cours j2ee -présentation

20
1 Développement WEB avec Java JSP/ Servlet /javaBean Fonctionnement du Web

Transcript of cours j2ee -présentation

1

Développement WEB avec Java

JSP/ Servlet /javaBean

Fonctionnement du Web

2

3

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.

6

7

8

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.

17

18

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.