Programmation des réseaux avec Java

Master 2 TTT - Examen d'Option

Lundi 26 Mars 2007


Principe de l'examen : le principe du TP noté est de vous faire réaliser des exercices, en les corrigeant au fur et à mesure de leur réalisation. Dès que vous avez réalisé une partie d'un exercice (typiquement la réponse à une question indiquée par le symbole ), vous appelez le correcteur qui viendra vérifier la validité de votre travail. Si vous faites fausse route, vous n'aurez pas les points correspondant à cette question, mais le correcteur vous le signalera et vous pourrez continuer à traiter le sujet.
Important : les deux exercices sont indépendants et peuvent être réalisés dans n'importe quel ordre.


Exercice 1 - Serveur HTTP et formulaires

Pour cet exercice, vous devez récupérer l'archive BaseHttp.jar. Téléchargez et décompressez cette archive dans le répertoire de votre choix avec la commande
jar xvf BaseHttp.jar
Les fichiers seront tous installés dans un répertoire de nom BaseHttp.

Plusieurs fichiers se trouvent dans ce répertoire. Tel qu'il est, le programme HttpServer.java doit compiler (javac HttpServer.java) et peut s'exécuter (java HttpServer 8888). Lancez-le et vérifiez qu'il est capable de "servir" les fichiers qui sont accessibles relativement au répertoire de lancement. Par exemple, l'accès à http://localhost:8888/accueil.html depuis un navigateur ou via une connexion TCP par telnet ou netcat (nc) vous permet de visualiser le contenu du fichier correspondant.

Appelez le correcteur quand cela fonctionne (1 point).

Dans les questions qui suivent, vous devrez modifier le programme HttpServer.java afin d'obtenir le fonctionnement attendu. En général, les modifications sont assez simples; il s'agit d'avantage de tester votre connaissance du protocole HTTP que de vous faire coder en Java.

En modifiant légèrement le serveur et de manière spécifique à cette question, faites en sorte que les navigateurs présentent les fichiers dont le nom commence par "result-" comme du texte "à plat", en particulier sans interpréter les balises HTML lorsque ces fichiers en contiennent. Par exemple, l'accès via le serveur au fichier http://localhost:8888/result-fin.html doit être visualisé par un navigateur comme ceci:

</b>  
    </p>
    <hr>
    <p>
      Vous pouvez <a href="accueil.html">retourner à l'accueil</a> ou
      <a href="form.html">retourner au formulaire</a>. 
    </p>

    <hr>
  </body>
</html>

Appelez le correcteur quand cela fonctionne (3 points).

Pour faire ce qu'on attend de lui, c'est-à-dire offrir un service de calcul via le serveur HTTP, le formulaire contenu dans le fichier form.html manque d'informations. À partir du serveur, qui lui dispose déjà des informations nécessaires, modifier le formulaire pour que le service fonctionne.

Appelez le correcteur quand cela fonctionne (1 point).

Si la syntaxe de la requête n'est pas bonne ou que la requête est différente de GET, le serveur ferme la connexion avec le client. En revanche, actuellement, lorsque le nom de la ressource ne correspond pas à un fichier (ni à "compute") ou que les arguments ne permettent pas de le réaliser un calcul, le serveur renvoie un message d'erreur en gardant la connexion persistante. Faire en sorte que, dans tous les cas d'erreurs, y compris les derniers cités, le serveur "mette fin" à la connexion persistante, c'est-à-dire provoque proprement la fermeture de la connexion avec le client. Afin de tester cette modification, vous pourrez utiliser telnet ou netcat (nc) en guise de client.

Appelez le correcteur quand cela fonctionne (3 points).


Exercice 2 - Servlets pour opérations arithmétiques

En utilisant le serveur de servlets Tomcat, on souhaite écrire un service permettant de réaliser des opérations arithmétiques simples sur des entiers.

À la racine de votre répertoire, télécharger l'archive BaseTPnote.jar et la décompresser avec la commande
jar xvf BaseTPnote.jar
Le répertoire créé contient normalement tout ce qu'il faut pour développer et installer la webapp TPnote.

Avant de démarrer Tomcat, penser à mettre à jour la variable d'environnement JRE_HOME par la commande
export JRE_HOME=/usr/lib/j2sdk1.6-sun/
puis démarrer Tomcat par la commande
tomcat start

En vous placant dans le répertoire TPnote, installer la webapp TPnote par la commande
ant install

Depuis un navigateur, à partir de l'URL http://localhost:8080/, vérifiez en accédant au manager que vous avez bien accès à la page d'accueil et que la servlet Bonjour, accessible par un lien, fonctionne correctement.

Appelez le correcteur quand cela fonctionne (1 point).

Les questions suivantes sont à réaliser dans le répertoire TPnote, et vous devrez utiliser les tâches ant pour compiler les sources et pour gérer le déploiement de la webapp sur le serveur de servlets (par les commandes ant remove, ant clean et ant install).

  1. Le fichier TPnote/web/formCalcul.html décrit un formulaire permettant de réaliser des calculs simples sur des entiers. Modifier ce fichier de sorte que, lorsque le bouton Calculer du formulaire est pressé, les données soient envoyées au serveur par une requête POST à l'url de nom calcul.
  2. Modifier le fichier TPnote/web/WEB-INF/web.xml pour spécifier que l'url de nom calcul correspond à une servlet associée à la classe fr.umlv.servlet.Compute.
  3. Développer cette servlet fr.umlv.servlet.Compute et sa méthode doPost() de sorte que, dans un premier temps, elle renvoie simplement au client une page HTML contenant le message "Formulaire soumis", ainsi qu'un lien permettant de retourner au formulaire de calcul. Par exemple, quelque chose du genre:


    Appelez le correcteur quand cela fonctionne (4 points).
  4. Modifier la méthode doPost() de la servlet fr.umlv.servlet.Compute pour qu'elle réalise le traitement attendu, c'est à dire affiche le résultat de l'opération. Par exemple:



    donne


    Appelez le correcteur quand cela fonctionne (3 points).
  5. Affiner un peu le code pour que, si l'opération ou les arguments sont incorrects, la servlet renvoie un message d'erreur. Par exemple:



    donne


    Appelez le correcteur quand cela fonctionne (2 points).
  6. Modifier la servlet fr.umlv.servlet.Compute de sorte que le lien permettant de revenir au formulaire ne pointe plus vers le fichier statique formCalcul.html, mais vers l'url calcul. Écrivez une méthode doGet() dans la servlet qui permet d'obtenir le même comportement que précédemment.
    Appelez le correcteur quand cela fonctionne (2 points).
  7. On souhaite maintenant que le formulaire "dynamique" renvoyé par la méthode doGet() de la servlet fr.umlv.servlet.Compute offre la possibilité à chaque utilisateur de mémoriser une valeur (indépendante de la valeur mémorisée par d'autres utilisateurs éventuels). Typiquement, il s'agit d'une mémoire comme sur les calculatrices simples, qui permet

Etienne.Duris@univ-mlv.fr - © Université de Marne-La-Vallée - Mars 2007