Cycle de vie des servlets
Le cycle de vie du Servlet peut être défini comme l'ensemble du processus, de la création à la destruction. Voici le processus suivi par une Servlet :
Une Servlet s'initialise en appelant la méthode init().
Servlet appelle la méthode service() pour gérer la demande du client.
La servlet est terminée (terminée) en appelant la méthode destroy().
Enfin, le Servlet est récupéré par le garbage collector de la JVM.
Parlons maintenant en détail des méthodes de cycle de vie.
Méthode init()
La méthode init est conçue pour être appelée une seule fois. Il est appelé lors de la première création du servlet et n'est plus appelé à chaque demande utilisateur ultérieure. Par conséquent, il est utilisé pour une initialisation unique, tout comme la méthode init de l'applet.
Une Servlet est créée lorsqu'un utilisateur appelle pour la première fois l'URL correspondant à la Servlet, mais vous pouvez également spécifier que la Servlet est chargée au premier démarrage du serveur.
Lorsqu'un utilisateur appelle un Servlet, une instance de Servlet sera créée. Chaque requête utilisateur générera un nouveau thread et le transmettra à la méthode doGet ou doPost le cas échéant. La méthode init() crée ou charge simplement des données qui seront utilisées tout au long du cycle de vie du servlet. La méthode
init est définie comme suit : Méthode
public void init() throws ServletException { // 初始化代码... }
service() La méthode
service() est la méthode principale pour effectuer des tâches réelles. Le conteneur Servlet (c'est-à-dire le serveur Web) appelle la méthode service() pour gérer la demande du client (navigateur) et réécrit la réponse formatée au client.
Chaque fois que le serveur reçoit une requête 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. le cas échéant.
Voici les caractéristiques 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 service appelle doGet, doPost, doPut, doDelete et d'autres méthodes le cas échéant . Ainsi, vous n'avez rien à faire avec la méthode service(), il vous suffit de surcharger doGet() ou doPost() selon le type de requête du client.
Les méthodes doGet() et doPost() sont les méthodes les plus couramment utilisées dans chaque demande de service. Vous trouverez ci-dessous les caractéristiques des deux méthodes.
Méthode doGet()
Les requêtes GET provenant d'une requête normale vers une URL, ou d'un formulaire HTML sans METHOD spécifiée, sont gérées par la méthode doGet().
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
Méthode doPost()
La requête POST provient d'un formulaire HTML qui spécifie spécifiquement METHOD comme POST, qui est traitée par la méthode doPost().
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
méthode destroy()
la méthode destroy() ne sera appelée qu'une seule fois, à la fin du cycle de vie du servlet. La méthode destroy() permet à votre servlet de fermer la connexion à la base de données, d'arrêter le thread d'arrière-plan, d'écrire la liste des cookies ou de cliquer sur le compteur sur le disque et d'effectuer d'autres activités de nettoyage similaires.
Après avoir appelé la méthode destroy(), l'objet servlet est marqué pour le garbage collection. La méthode de destruction est définie comme suit :
public void destroy() { // 终止化代码... }
Schéma d'architecture
La figure suivante montre un schéma typique du cycle de vie d'un servlet.
La première requête HTTP qui atteint le serveur est déléguée au conteneur Servlet.
Le conteneur Servlet charge le Servlet avant d'appeler la méthode service().
Ensuite, le conteneur Servlet gère plusieurs requêtes générées par plusieurs threads, chaque thread exécutant la méthode service() d'une seule instance de Servlet.