:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Applications réseaux ::
[LOGO]

HTTP simple, buffers et encodage.


Exercice 1 - Un simple serveur de fichier HTTP

Écrire un petit programme Java qui permet d'émuler un serveur HTTP 1.0 très simple en ré-utilisant le serveur TCP avec un nombre de thread borné.
Voici les fonctionnalités qui doivent être implantées par ce petit serveur:
  • répondre aux requêtes GET des clients sur des noms de fichiers réguliers (pas les répertoires);
  • attribuer le type MIME application/octet-stream aux ressources retournées. On pourra également faire des essais, plus visuels, avec les types text/plain ou text/html. Ensuite, on pourra tenter de déterminer le Content-Type à partir de l'extension du fichier à renvoyer;
  • pour simplifier la gestion de la connexion avec le client, on pourra fermer la connexion après l'envoi de la ressource. En revanche, il est nécessaire de lire l'intégralité de la requête du client avant de fermer la connexion.

Exercice 2 - Transcode moi

On souhaite écrire la classe FileTranscoder qui effectue la conversion de fichier d'un charset à un autre :

java FileTranscoder srcFile.txt UTF-8 dstFile.txt ISO-8859-1

Dans cet exemple, le transcoder lit le fichier srcFile.txt qui est écrit en UTF-8 et transforme celui-ci en ISO-8859-1 dans le fichier créé de nom dstFile.txt.

  1. Vous utiliserez des FileChannel pour lire et écrire dans les fichiers. Utiliser la classe java.nio.charset.Charset pour obtenir les charsets puis créer l'encodeur ou le décodeur correspondant.
  2. En supposant que les fichiers sont suffisament petits pour "tenir" dans un ByteBuffer, utilisez les méthodes decode(ByteBuffer) et encode(CharBuffer). Que se passe t il si le fichier est trop gros ? Testez avec de petits buffers.
  3. Utilisez les méthodes decode(ByteBuffer, CharBuffer, boolean) et encode(CharBuffer, ByteBuffer, boolean) dans une boucle de décodage - encodage.
  4. Ajoutez des caractères "unmappable" dans le fichier d'entrée. Que se passe t-il par defaut ? Faites une version où une exception est levée, puis une version où le caractère non valide est remplacé par un $.