Typage des ressources
Dans cette première version du serveur, on suppose que les documents renvoyés sont tous du type HTML
(ce qui est indiqué dans les headers des réponses par Content-type: text/html). Or les
documents peuvent être de nature variée (images GIF, JPEG, texte non-formaté, vidéo AVI, …). C'est au
serveur HTTP d'indiquer le type du document renvoyé.
Pour cela, il se base sur l'extension du nom du fichier pour établir le MIME type correspondant. Les mime
type sont des chaînes de caractères de la forme :
type/sous-type
Exemples :
Mime type
Type
text/html
Fichier HTML
text/plain
Fichier texte
image/gif
Image GIF
image/jpeg
Image JPEG
Modifiez le serveur pour qu'il effectue le typage des ressources. Pour cela, on utilisera le fichier
MIME Types (lisible comme le fichier de configuration par java.io.Properties.load())
contenant la liste des extensions possibles et les mime type associés. Le nom de ce fichier sera indiqué
dans le fichier de configuration (champ MimeTypeFile).
Si l'extension du fichierdemandé n'est pas connue, le serveur renverra un mime type par défaut (e.g.:
text/plain) indiqué dans le fichier de configuration (champ DefaultMimeType).
Traitement multi-thread
Actuellement, le serveur ne peut traiter qu'une requête à la fois. Pour pourvoir traiter plusieurs requêtes
simultanément, nous allons créer des objets capables de prendre en charge les requêtes et qui
s'exécuteront dans différentes threads . Ces objets seront des instances d'une nouvelle classe :
httpd.HttpConnection. Pour que ces instances soient threadables, cette classe doit implémenter
l'interface java.lang.Runnable. Une grande partie du code de la classe Httpd sera délocalisée
dans cette nouvelle classes (au sein de la méthode run()).
La boucle de traitement des requêtes (située dans la classe Httpd) devient alors :
Ouvrir une socket sur le port indiqué
Boucle infinie
Attendre une requête
Récuperer la socket de travail
Créer une instance de HttpConnection avec en parametre la socket
et la configuration
Fin de boucle