Servlets - Cycle de vie
Un cycle de vie de servlet peut être défini comme l'ensemble du processus depuis sa création jusqu'à sa destruction. Voici les chemins suivis par un servlet.
Le servlet est initialisé en appelant le init() méthode.
Le servlet appelle service() méthode pour traiter la demande d'un client.
Le servlet se termine en appelant le destroy() méthode.
Enfin, le servlet est récupéré par le garbage collector de la JVM.
Parlons maintenant des méthodes du cycle de vie en détail.
La méthode init ()
La méthode init n'est appelée qu'une seule fois. Il n'est appelé que lorsque le servlet est créé, et n'est appelé par la suite pour aucune demande utilisateur. Ainsi, il est utilisé pour les initialisations ponctuelles, tout comme avec la méthode init des applets.
Le servlet est normalement créé lorsqu'un utilisateur appelle pour la première fois une URL correspondant au servlet, mais vous pouvez également spécifier que le servlet doit être chargé lors du premier démarrage du serveur.
Lorsqu'un utilisateur appelle un servlet, une seule instance de chaque servlet est créée, chaque requête utilisateur entraînant un nouveau thread qui est transféré à doGet ou doPost selon le cas. La méthode init () crée ou charge simplement des données qui seront utilisées tout au long de la vie du servlet.
La définition de la méthode init ressemble à ceci -
public void init() throws ServletException {
// Initialization code...
}
La méthode service ()
La méthode service () est la principale méthode pour effectuer la tâche réelle. Le conteneur de servlet (c'est-à-dire le serveur Web) appelle la méthode service () pour gérer les demandes provenant du client (navigateurs) et pour écrire la réponse formatée au client.
Chaque fois que le serveur reçoit une demande de servlet, le serveur génère un nouveau thread et appelle le service. La méthode service () vérifie le type de requête HTTP (GET, POST, PUT, DELETE, etc.) et appelle les méthodes doGet, doPost, doPut, doDelete, etc. selon le cas.
Voici la signature de cette méthode -
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
}
La méthode service () est appelée par le conteneur et la méthode de service appelle les méthodes doGet, doPost, doPut, doDelete, etc. selon le cas. Vous n'avez donc rien à voir avec la méthode service () mais vous remplacez doGet () ou doPost () selon le type de requête que vous recevez du client.
DoGet () et doPost () sont les méthodes les plus fréquemment utilisées dans chaque demande de service. Voici la signature de ces deux méthodes.
La méthode doGet ()
Une requête GET résulte d'une requête normale pour une URL ou d'un formulaire HTML pour lequel aucune METHODE n'est spécifiée et elle doit être gérée par la méthode doGet ().
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
La méthode doPost ()
Une requête POST résulte d'un formulaire HTML qui répertorie spécifiquement POST comme METHODE et doit être gérée par la méthode doPost ().
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
La méthode destroy ()
La méthode destroy () n'est appelée qu'une seule fois à la fin du cycle de vie d'un servlet. Cette méthode donne à votre servlet une chance de fermer les connexions à la base de données, d'arrêter les threads d'arrière-plan, d'écrire des listes de cookies ou de décomptes de succès sur le disque et d'effectuer d'autres activités de nettoyage.
Une fois la méthode destroy () appelée, l'objet servlet est marqué pour le garbage collection. La définition de la méthode destroy ressemble à ceci -
public void destroy() {
// Finalization code...
}
Diagramme d'architecture
La figure suivante illustre un scénario de cycle de vie de servlet typique.
Tout d'abord, les requêtes HTTP arrivant sur le serveur sont déléguées au conteneur de servlet.
Le conteneur de servlet charge le servlet avant d'appeler la méthode service ().
Ensuite, le conteneur de servlet gère plusieurs demandes en générant plusieurs threads, chaque thread exécutant la méthode service () d'une seule instance du servlet.