:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Applications réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
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.
-
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.
-
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.
-
Utilisez les méthodes decode(ByteBuffer, CharBuffer, boolean)
et encode(CharBuffer, ByteBuffer, boolean)
dans une boucle de décodage - encodage.
-
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
$.
© Université de Marne-la-Vallée