Info 2ième année
  W eb      et     S ervlets  
décembre 2004
♦ Répondre aux questions sur une feuille séparée que vous rendrez à la fin de la séance.
♦ Les fichiers mentionnés sont disponibles à www.iut-orsay.fr/~astier/app_java/tpServlet.zip
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 :

• 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).

nom  
Appuyer sur Lancer pour activer Salut

• 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:
Message envoyé par XXX

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.

Exprimez-vous  
 
Appuyer sur Allez-y ! pour participer à la conversation
 

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 ...'.

Votre pseudo:  
 

• 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).

Exprimez-vous  
 
Appuyer sur Allez-y ! pour participer        

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