Parler du cycle de vie des objets Servlet

Qu'est-ce que le cycle de vie d'un objet servlet ?

  1. Quand l'objet Servlet est-il créé ?
  2. Quand l'objet Servlet est-il détruit ?
  3. Combien d'objets Servlet sont créés ?
  4. La représentation du cycle de vie d'un objet Servlet, c'est-à-dire quel est l'ensemble du processus d'un objet Servlet, de sa création à sa destruction finale ?

        

A travers les questions ci-dessus, parlons du cycle de vie des objets Servlet

        L'ensemble du cycle de vie du Servlet est géré par le conteneur Servlet, qui utilise l'interface jakarta.servlet.Servlet pour comprendre et gérer l'objet Servlet. Le cycle de vie du Servlet peut être divisé en quatre étapes : étape de chargement, étape d'initialisation , Phase de traitement et de destruction de la demande

                

Qui maintient l'objet Servlet ?

        La création de l'objet Servlet, l'invocation de la méthode sur l'objet, et la destruction finale de l'objet, les programmeurs JavaWeb n'ont pas le droit d'intervenir, et le cycle de vie de l'objet Servlet est seul responsable par le Serveur Web. Le serveur Tomcat est généralement appelé conteneur Web (Web Container) et gère la création et la destruction d'objets Servlet via le conteneur Web.

        

Les objets Servlet que nous créons nous-mêmes sont-ils gérés par le conteneur Web ?

        Les objets servlet créés par nous-mêmes ne sont pas gérés par le conteneur Web. Les objets servlet créés par le conteneur Web seront placés dans une collection (HashMap). Seuls les servlets placés dans cette collection peuvent être gérés par le conteneur Web. Les objets servlet sont pas dans cette collection, ils ne seront donc pas gérés par le conteneur Web.
        
    L'implémentation sous-jacente du conteneur Web est une collection de HashMaps, dans laquelle la relation entre l'objet Servlet et le chemin de la requête est stockée.

        
Au démarrage du serveur, l'objet Servlet est-il créé (par défaut) ?

        Fournissez une méthode de construction sans paramètre dans le servlet, affichez une information d'invite dans la méthode de construction et observez si la méthode de construction est exécutée au démarrage du serveur.

        Classe AServlet

public class AServlet implements Servlet {
    public AServlet() {
        System.out.println("AServlet无参构造方法被执行了");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("AServlet's init method execute!");
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("AServlet's service method execute!");
    }
    @Override
    public void destroy() {
        System.out.println("AServlet's destroy method execute!");
    }
    
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

        configuration web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>servlet.lxy.AServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/servlet/test</url-pattern>
    </servlet-mapping>
</web-app>

        Par défaut, après le démarrage du serveur Tomcat, la console ne génère pas les informations de construction pertinentes d'AServlet, indiquant que l'objet AServlet n'a pas été instancié à ce moment.

        

Lorsque l'utilisateur envoie la première requête, la console affiche ce qui suit :

        La méthode de construction sans paramètre d'AServlet est exécutée
        La méthode d'initialisation d'AServlet exécute !
        La méthode de service d'AServlet exécute !

Selon le contenu de sortie ci-dessus, il est conclu que
        l'objet Servlet est instancié lorsque l'utilisateur envoie la première demande, c'est-à-dire que la méthode de construction d'AServlet est exécutée et que la méthode de construction sans paramètres est exécutée.
        Une fois l'objet AServlet créé, le serveur Tomcat appelle immédiatement la méthode init de l'objet AServlet (l'objet Aservlet existe déjà lors de l'exécution de la méthode init). Une fois la méthode init exécutée, le serveur Tomcat appelle immédiatement la méthode service de l'objet AServlet.

        

L'utilisateur continue d'envoyer une deuxième requête multiple et la console affiche ce qui suit :

        La méthode de service d'AServlet s'exécute !

        La méthode de service d'AServlet s'exécute !

        La méthode de service d'AServlet s'exécute !

Selon les résultats de sortie ci-dessus, on peut conclure que :

        Lorsque l'utilisateur envoie la deuxième ou plusieurs requêtes, l'objet Servlet n'est pas nouvellement créé, et l'objet Servlet créé précédemment est toujours utilisé, et la méthode de service de l'objet est directement appelée sans passer par la méthode init de l'objet Servlet. Ces phénomènes peuvent expliquer :

        Tout d'abord, l'objet Servlet est un singleton (instance unique, bien que l'objet Servlet soit une instance unique, mais le Servlet n'est pas conforme au mode singleton, nous l'appelons un faux singleton. La raison pour laquelle l'objet Servlet est un singleton est parce que l'objet Servlet La création des programmeurs web Java ne peut pas percevoir la création de cet objet, qui ne peut être géré que par Tomcat (ou d'autres serveurs d'applications web).Tomcat ne crée qu'un objet Servlet, ce qui conduit à un singleton, mais c'est un faux singleton, et un vrai singleton en mode Exemple, sa méthode de construction est privatisée.
        Deuxièmement, la méthode de construction sans argument, la méthode init n'est exécutée que lorsque l'utilisateur envoie une requête pour la première fois, c'est-à-dire la méthode sans argument la méthode de construction n'est exécutée qu'une seule fois, et la méthode init n'est exécutée que par Tomcat Le serveur appelle une fois
        Troisièmement, tant que l'utilisateur envoie une requête, la méthode de service sera certainement appelée une fois par le serveur Tomcat, et si elle est envoyée plusieurs fois fois, la méthode de service sera également appelée plusieurs fois.

        

Lors de l'arrêt du serveur, la console affiche ce qui suit :

        La méthode de destory d'AService s'exécute !

 Selon les résultats de sortie ci-dessus, on peut conclure que :

        La méthode destroy de la Servlet n'est appelée qu'une seule fois par le serveur Tomcat. Lorsque le serveur Web est fermé, Tomcat doit détruire la mémoire de l'objet Servlet. Avant de détruire l'objet Servlet, le serveur Tomcat appellera une fois la méthode destroy. Lorsque la méthode destroy est appelée, l'objet Servlet survit toujours. Après la destruction est exécutée, l'objet Servlet est détruit. .

        

       Ce qui précède est une introduction au processus de cycle de vie des objets Servlet. Ce n'est qu'en étant familiarisé avec le cycle de vie des Servlets que nous pourrons gérer correctement les objets Servlet au moment correspondant. Si vous avez des questions, n'hésitez pas à échanger et discuter dans l'espace commentaire !

Je suppose que tu aimes

Origine blog.csdn.net/qq_43500084/article/details/127794289
conseillé
Classement