| Info 2ième année |
W
eb
et
S
ervlets
|
décembre 2004 |
Préliminaires, en dehors de netbeans: créer un répertoire
mod_web dans votre espace de travail; configurer le navigateur Web,
afin qu'il n'utilise pas de "serveur proxy" pour les adresses locales.
I. Création d'une première servlet avec Netbeans
Créer un module web, une servlet,
puis lancer un serveur http et démarrer un moteur de servlets.
• a) création du module Web
→
Dans Netbeans "monter" le répertoire mod_web, afin qu'il apparaisse dans la
fenêtre 'Filesystems' (dans la suite du texte ♦ FFS est
un raccourci, pour fenêtre fichier/structure, ).
→
Indiquer à netbeans que vous voulez en faire un module web:
sélectionner ce répertoire dans FFS, puis:
BDS | New |Web Module.
(ou BDS | New |All templates ... | Module Web )
Une deuxième ligne concernant mod_web apparait dans FFS.
(♦ BDS est un raccourci pour bouton droit de la souris)
q.1
trouvez les sous-répertoires et fichiers créés par netbeans;
indiquez leur rôle.
• b) ajouter une servlet
La servlet ServletCoucou va être créée dans le paquet pq du
sous-répertoire classes.
→
sélectionner ce répertoire dans FFS, puis créer la servlet:
BDS | New | Servlet | Name:pq.ServletCoucou | Next,
UrlPattern: /coucou | Finish
→
après qq secondes d'attente la classe ServletCoucou apparait dans
l'éditeur.
q.2
comment est modifié le sous-répertoire classes?
q.3
Décrire le rôle de chaque méthode de la classe générée
ServletCoucou.
→
personnaliser la servlet :-
changer le nom de la méthode processRequest en jeReponds
-
enlever dans cette méthode, les marques de commentaire qui empèchent
l'envoie du code HTML.
-
ajouter le code:
out.println("<h2 style=' color:red;'>Coucou vous
salue</h2>");
• c) lancer un serveur Http, démarrer un moteur de servlets,
exécuter la servlet
Ces opérations sont automatiques, quand on "exécute" la servlet.
Examiner la fenêtre 'Runtime'.
q.4
quels sont les exécutables qui ont été lancés ?
q.5
quelle url active la servlet ? quel est le port d'écoute utilisé par le serveur ?
Modifier la servlet en choisisssant une autre couleur (black, green,
yellow, purple, cyan, magenta ...).
Pour arrêter/relancer un module web, utiliser:
la fenêtre 'Runtime'|développer 'Server
Registry'|sélectionner mod_web+BDS|Stop/Start
q.6
que faut-il faire pour que ce changement apparaisse dans le navigateur ?
• d) utilisation de Tomcat (serveur http+moteur de servlets)
Créer, dans le répertoire mod_web, deux sous-répertoires html
et gif, puis y placer les fichiers logo-iut.gif et
formul.html.
→
Récupérer l'adresse IP de votre machine (commande ipconfig), ou son nom
(ex:pcj07) que vous donnez à un camarade pour qu'il utilise votre
servlet.
q.7
comment a-t-il procédé ?
→
Dans formul.html s'assurer que, pour le lien et chaque
formulaire, la valeur de l'attribut action est correcte et
activer la servlet.
q.8
quelles sont les différences entre les trois
méthodes d'activation,
• quant à la communication des paramètres
• quant à la méthode utilisée dans ServletCoucou
• e) arrêt de Tomcat
Dans la fenêtre 'OutPut Window'(netbeans 3.5) ou fenêtre
'Runtime'(netbeans 3.6) utiliser BDS pour
arrêter le processus 'Internal Tomcat'.
q.9
Comment vérifiez-vous que ce serveur est effectivement arrêté?
II. Utiliser une servlet de test
La servlet ServletRepond fournit des informations sur la requête
qu'elle a reçue; on va l'utiliser pour "voir" les informations
transmises par un navigateur quand l'utilisateur soumet un
questionnaire.
• a) mise en place de la nouvelle servlet
Créer une nouvelle servlet de nom ServletRepond (paquet pq),
placée dans le sous-répertoire classes/pq, accessible par l'url
/echo(voir 1.b); remplacer le code par celui du fichier
ServletRepond.java qui vous est fourni. Attention à 'package pq'.
• b) activation par un questionnaire
Placer le fichier testRepond.html dans le
répertoire html; un questionnaire du fichier utilise
plusieurs champs.
Définir le lien et l'attribut action des formulaires
pour que ServletRepond soit appelée.
Soumettre l'un ou l'autre des deux formulaires.
q.1
Dans quel cas le corps du message issu du formulaire est vide ?
sinon, que contient-il?
q.2
Donnez un objet du formulaire fournissant un tableau
de chaînes.
• c) examen du code de la servlet
q.3
»
par quelle méthode, et de quelle classe, l'objet
PrintWriter associé à la page renvoyée
par la servlet est obtenu ?
»
l'adresse du client est obtenue par quelle méthode, de quelle classe?
»
quelles sont les méthodes permettant d'avoir respectivement le nom
et la valeur des paramètres, ou champs, reçus du formulaire?
»
donner deux exemples de champ reçu: un associé à une
seule valeur, et un autre pouvant associé à un tableau de
chaînes ?
»
comment modifier testRepond.html ou ServletRepond,
pour faire apparaître le logo de l'IUT, sur un largeur de 150 pixels,
en haut de page.
III. Un peu de programmation
• a) le fichier html du client
|
D'après formul.html, créer salut.html
(dans le répertoire html) qui
contient un formulaire (méthode GET) demandant un nom (voir ci-contre).
Précisez que le champ action contient: ../salut (voir ci-après la
servlet qui traitera ce formulaire).
|
|
• b) la servlet sur le site Web
Créer une servlet de nom Salut, placée dans classes/pq, accessible
par l'url /salut.
En vous inspirant du code de ServletRepond, créer les méthodes
enTetePage, finPage et remplirPage. Puis écrire le
code qui crée la page ci-dessous, où XXX est le nom transmis par le
formulaire reçu de salut.html:
IV. Conversation entre clients ou partage de servlet
Cet exemple montre que tous les clients d'une servlet se partagent
cette servlet, et donc aussi les champs qui y sont définis.
On veut créer une servlet qui permette à ses clients de converser.
Chaque client donne une phrase (en
utilisant le formulaire ci-après) qui sera ajoutée à celles
des autres clients. Après avoir appuyé sur
'Allez-y !', chaque client récupère la totalité des phrases données.
Voir ci-dessous.
Vivement les vacances pour faire du surf
Allez les bleus !!!
|
• a) le fichier html du client
Dans le répertoire html, créer
conversons.html, quasi identique à salut.html,
qui active, par méthode GET, la servlet Conversation (
url ../conversons).
Ce fichier sera étoffé dans
la partie suivante.
• b) la servlet Conversation sur le site Web
Créer la servlet Conversation, dans le répertoire classes/pq,
accessible par l'url /conversons (voir 1.b), qui affiche, comme
ci-dessus, un
formulaire, puis les phrases envoyées par ses divers clients.
→
Utiliser un objet phrases de la
classe Vector pour enregistrer les différentes phrases.
→
Programmez doGet et doPost en utilisant les
méthodes privées définies ligne suivante.
→ La méthode afficheForm crée
le formulaire; la méthode miseAJourPhrases récupère une
nouvelle phrase pour l'ajouter à l'objet phrases; la méthode
affichePhrases affiche toutes les phrases.
V. Notion de session ou identification automatique du client
On voit ici, comment un client est reconnu par une servlet,
malgré l'aspect déconnecté du protocole http:
après réception de la requête, la connexion
client-serveur est coupée.
• a) le formulaire du fichier conversons.html (coté client)
|
Modifier conversons.html pour demander le pseudonyme du client; dans
le formulaire (méthode GET), activer Conversation, quand on
appuie sur le bouton 'En route ...'.
|
|
• b) la servlet Conversation
Modifier la servlet pour identifier le client (en utilisant la
classe HttpSession) et refléter cette identification dans
l'affichage des phrases.
Ci-dessous un exemple de page attendue (le numéro de phrase démontre
qu'on a gardé une information propre à un client).
Roger(1) → Vivement les vacances pour faire du surf
Martine(1) → Je veux participer
Roger(2) → Allez les bleus !!!
Martine(2) → et dire ce que je pense
Martine(3) → c'est à dire tout ce que je pense
|
• c) quelques informations et suggestions
-
dans doGet, récupèrer le pseudonyme et créer une
session (si elle n'existe pas déjà), puis:
-
associer à cet objet HttpSession le pseudonyme du client et un
compteur de phrases
-
appeler afficheForm et affichePhrases, qui ne changent
pas;
-
la méthode doPost doit permettre:
-
d'identifier le client (sans créer de session: si le client est
inconnu cela veut dire qu'il n'est pas 'passé' par doGet et
n'a pas donné de pseudonyme);
-
par miseAjourPhrases, de récupérer sa phrase, d'y associer
pseudo et compteur (trouvés dans l'objet HttpSession), puis de
mémoriser une seule chaîne contenant le tout, dans phrases.
-
et d'appeler afficheForm et affichePhrases.