Servlets
1. Introduction
Une servlet est une application java qui s’exécute côté serveur en tant qu'extension du serveur; elle transmet des informations au serveur ou répond à des requêtes clientes. Toute application client/serveur peut mettre en œuvre une servlet en s'appuyant, soit sur le protocole http, soit sur d'autres protocoles comme ftp, smtp, etc. Dans les anciens serveurs Web, on a besoin d'un mécanisme particulier pour prendre en charge les Servlets; ce mécanisme s'appelle conteneurs ou moteur de servlets; le plus célèbre d'entre eux est Tomcat le moteur de Servlets développé par Apache Foundation.
Une Servlet peut être invoquée plusieurs fois par plusieurs requêtes simultanées. Écrite en java, une Servlet en retire toutes les avantages notamment, la portabilité, l'accès à toutes les API de Java comme JDBC (API qui permet l'accès aux bases de données).
2. L'interface javax.servlet.Servlet
L'API Servlet est rajoutée à JAVA à partir de J2EE 1.4; elle est repartie dans deux packages, le package "java.servlet" et le package "javax.servlet.http". L’appellation javax au lieu de java au sein du nom du package indique que l'API Servlet fait partie de java J2EE. L'interface de base de cet API est javax.servlet.Servlet.
2.1 Le package javax.servlet
Ce package contient des classes génériques, des interfaces qui ne dépendent pas d'un protocole particulier (protocol-independent)
2.2 Le package javax.servlet.http
Ce package contient des classes et des interfaces spécifiques pour des fonctionnalités relatives au protocole HTTP.
L'interface javax.servlet.Servlet définit toutes les méthodes gérant le cycle de vie de toute Servlet. Comme cette interface est l'interface de base de toute Servlet, chaque Servlet doit implémenter toutes ses méthodes à savoir:
- public abstract void init(ServletConfig) throws ServletException : C'est la méthode déterminant le cycle de vie pour une Servlet; elle est invoquée une seule fois lorsque le cycle de vie d'une Servlet particulière est traitée. cette méthode est utilisée pour initialiser une Servlet.
- public abstract void service(ServletRequest , ServletResponse ) throws ServletException, IOException : C'est la méthode principale responsable de la logique métier d'une Servlet; si une nouvelle requête arrive au niveau de la Servlet, le conteneur web génère une nouvelle Thread; cette Thread exécute la méthode service() et traite la logique métier ou la tâche particulière attendue par la requête.
- public abstract void destroy(): La méthode destroy() est appelée uniquement à le fin du cycle de vie d'une Servlet; cela permet à la Servlet de fermer toutes les opérations restées en suspens comme, l'accès à des bases de données ou la fermeture de tous les fichiers ouverts.
- public abstract ServletConfig getServletConfig(): Cette méthode retourne l'objet Configuration de la Servlet; cet Objet Configuration contient tous les paramètres de configuration et d’initialisation de la Servlet.
- public abstract String getServletInfo(): Cette méthode retourne une chaîne caractères qui contient des informations relatives à la Servlet; par exemple, on peut l'utiliser pour avoir le nom de l'auteur de la Servlet.
3. L'interface Javax.servlet.ServletConfig
Au sein d'une Servlet on se sert de cette interface pour récupérer les paramètres d'initialisation et de configuration qui sont définis dans le fichier de configuration "web.xml". Chaque Servlet a ses propres paramètres et pour y avoir accès, on fait appel à la méthode "getServletConfig()" qui retourne un objet ServletConfig. Les méthodes les plus importantes de l'interface ServeltConfig sont:
- public abstract ServletContext getServletContext():
Cette méthode retourne un objet "ServletContext" au sein de la Servlet. - public abstract Enumeration getInitParameterNames():
Cette méthode retourne une Enumeration des noms des paramètres de "init" définis pour la Servlet. - public abstract String getInitParameter(String ):
Cette méthode retourne la valeur d'un paramètre d'initialisation dont le nom est donné comme paramètre d'appel; si ce nom ne référence pas un paramètre présent dans "web.xml", elle retourne "null".
4. La classe abstraite Javax.servlet.GenericServlet
Cette classe abstraite implémente les deux interfaces "javax.servlet.Servlet" et "javax.servlet.ServletConfig". Comme son nom l'indique, cette classe est générique, donc elle ne nécessite pas de protocole particulier. Dans les classes qui dérivent de cette classe, on a part défaut l'implémentation de toutes les méthodes disponibles dans les interfaces javax.servlet.Servlet et javax.servlet.ServletConfig. Nous pouvons donc simplement étendre cette classe pour avoir toutes les fonctionnalités disponibles par défaut et les utiliser. Comme la méthode service() est une méthode abstraite, si on utilise la classe GenericServlet on doit implémenter soit même la méthode service().
5. La classe abstraite javax.servlet.http.HttpServlet
La classe abstraite "javax.servlet.http.HttpServlet" dispose de beaucoup de méthodes entre autre les méthodes :
- doGet(), pour les requêtes HTTP GET
- doPost(), pour les requêtes HTTP POST
- doPut(), pour les requêtes HTTP PUT
- doDelete() pour les requêtes HTTP DELETE
Ces méthodes facilitent le travail avec le protocole HTTP en permettant aux clients du serveur web de dialoguer avec les Servlets HTTP présentes au sein du serveur web. La classe javax.servlet.http.HttpServlet implément l'interface javax.servlet.Servlet définie ci-dessus; donc elle définit les 5 méthodes init(), service(), destroy(), getServletConfig() et getServletInfo() qui assurent le cycle de vie d'une quelconque Servlet HTTP en étant respectivement appelée lors de la création d'une Servlet, lors de l'appel d'une Servlet pour le traitement d'une requête et lors de la destruction d'une instance de la Servlet.
La méthode public abstract void init(ServletConfig) throws ServletException: Elle est appelée par le serveur juste après l'instanciation de la Servlet. Lors de l'instanciation, le conteneur de Servlets passe en argument à la méthode init() un objet ServletConfig permettant de charger des paramètres de configuration propres à la Servlet. En cas d'anomalie lors de l'appel de la méthode init(), celle-ci renvoie une exception de type ServletException et la Servlet n'est pas initialisée.
La méthode public abstract void service(ServletRequest , ServletResponse ) throws ServletException, IOException: Elle ne peut pas être invoquée tant que la méthode init() n'est pas terminée; elle reçoit et répond aux requêtes des clients
La méthode public abstractvoid destroy(): Elle est appelée juste avant que le serveur ne détruise la Servlet: cela permet de libérer des ressources allouées dans la méthode init() tel qu'un fichier ou une connexion à une base de données.
public abstract ServletConfig getServletConfig(): Cette méthode retourne un objet qui représente la configuration de la Servlet; cet objet contient chaque paramètre d'initialisation et de démarrage de la Servlet.
public abstract String getServletInfo(): Cette méthode retourne une chaîne de caractères contenant des informations relatives à la Servlet.
(à suivre)..