Notion de servlet

Comme il a déjà été dit, l'interface Servlet est l'interface centrale de cette API. Toutes les instances de servlets implémentent cette interface, en général indirectement. Cette interface ne définit que cinq méthodes :

L'interface Servlet modélise un objet servlet encore très abstrait, et complètement détaché de ce que fait une servlet HTTP. En toute rigueur, une instance de Servlet est juste un objet qui vit dans un serveur, soumis à un cycle de vie très simple (création / service / destruction), qui a accès à des information de configuration et des méta-données sur lui-même.

La classe GenericServlet précise les choses : outre les implémentations des méthodes de l'interface Servlet, elle propose les méthodes suivantes.

Enfin la classe HttpServlet nous fait réellement entrer dans les servlets pour le web. Elle propose un jeu de méthodes pour chaque requête HTTP qui existe : doDelete(), doGet(), doHead(), doOption(), doPost(), doPut(), doGet() doTrace() et doLastModified(). Les implémentations de ces méthodes sont vides : elles ne remplissent aucune fonction. Simplement, elles sont appelées par le container de servlets sur requête d'un client, avec les bons paramètres, de type HttpServletRequest et HttpServletResponse. Pour programmer une servlet, il faut donc étendre cette classe, et fournir une implémentation qui convient à toute ou partie de ces méthodes. En général, ce sont les méthodes doGet() et doPost() qui sont étendues.

Le cycle de vie d'une servlet est entièrement contrôlé par le serveur d'application dans lequel vit cette servlet. Lorsqu'une requête arrive, qui doit être traitée par une servlet donnée, le serveur examine s'il possède déjà une instance de cette servlet.

Si ce n'est pas le cas, il en crée une, après avoir chargé la classe de cette servlet s'il ne l'a pas déjà fait. Une fois cette instance créée, il appelle la méthode init() de cette servlet, pour lui signaler qu'elle doit se préparer à traiter des requêtes. Une fois cette méthode exécutée, la servlet peut traiter des requêtes.

Cette méthode init() est appelée par le serveur d'application avec un objet de type ServletConfig en paramètre. C'est par cet objet qu'une servlet peut accéder à ses paramètres d'initialisation.

Les paramètres d'initialisation sont déclarés dans l'élément servlet du fichier web.xml, et sont lus dans la méthodes init(), via l'objet ServletConfig.

Si une servlet ne peut pas traiter de requête, alors elle doit jeter l'exception UnavailableException lors de l'exécution de sa méthode init().

On peut y accéder via la méthode getInitParameter(String), qui prend en paramètre le nom du paramètre considéré, max-retry dans notre exemple. Cette méthode retourne une String, qu'il va nous falloir convertir en int dans notre exemple.

On peut également accéder à la liste de tous les paramètres d'initialisation par appel à la méthode getInitParameterNames(), qui retourne un Enumeration.