Dans ce sujet, nous vous demandons de réaliser deux versions d'un serveur HTTP en utilisant la bibliothèque Java NIO.
Commencez par créer un nouveau projet Java dans votre environnement Eclipse que vous appellez tpnote-VotreNom. Créez aussi dans cette arborescence du projet un fichier readme.txt dans lequel vous mettez vos notes et les réponses aux questions.
Le barème est donné à titre d'indication.
Les exercices sont assortis de questions de compréhension auxquelles vous devez répondre par écrit dans le fichier readme.txt.
En fin de TP :
Objectif : complétez des classes qui permettent de réaliser un serveur HTTP simple.
Notre serveur HTTP est très simple. Il est capable de décoder
une requête de type GET
. Une requête de
type GET
est constituée d'un ligne contenant le
mot GET
suivi d'un chemin (URI) correspondant au
nom du fichier. Pour faire simple, les noms de fichiers sont traités à
partir du répertoire /mci/inf/chris/public_html/.
La première version du protocole traite les requêtes une par une et clôt le canal de connexion après chaque traitement. Elle correspond au protocole 1.0 de HTTP.
Créez un paquetage www dans votre project Eclipse.
Récupérez les classes suivantes et mettez-les dans le paquetage www :
Récupérez la classe Httpd10Base.java et mettez-la dans le paquetage par défaut.
Vous devez modifier le Worker en complétant les TODOs et répondre aux questions.
rwChan
;
rwChan
.
Vous devez modifier le serveur en complétant les TODOs et répondre aux premières questions qui suivent.
ServerSocketChannel
et
un SocketChannel
;
ServerSocketChannel
que l'on ne peut pas faire sur un SocketChannel
?
SocketChannel
que
l'on ne peut pas faire sur un ServeurSocketChannel
?
Vous pouvez tester votre serveur soit en utilisant votre navigateur
habituel, soit en utilisant telnet
comme dans l'exemple
suivant :
telnet localhost 2020 GET /index.html HTTP/1.0
Vous devez obtenir une réponse contenant du code HTML, dont l'entête ressemble à ceci :
HTTP/1.0 200 OK Content-Type: text/html Content-length: 2741 Connection: close
Si vous essayez avec un fichier qui n'existe pas, par exemple test.htm, vous devez obtenir un résultat ressemblant à :
HTTP/1.0 404 File Not Found
Une fois que vous avez testé le serveur réalisé à la section précédente, répondez aux questions suivantes :
/mci/inf/chris/public_html
?
Le serveur précédent ferme les connexions à chaque requête, ce qui pour une page faisant référence à des images sur le même site implique des ouvertures successives de canaux TCP de manière inutile.
Vous allez maintenant réaliser une version de serveur qui accepte de fournir plusieurs contenus sur le même canal ouvert.
Récupérez le squelette de la classe Http11WorkerBase.java et mettez-la dans le paquetage www.
Récupérez la classe Httpd11Base.java et mettez-la dans le paquetage par défaut.
Répondez aux questions suivantes puis réalisez les modifications au niveau des classes :