Hablar sobre el ciclo de vida de los objetos Servlet.

¿Qué es el ciclo de vida del objeto Servlet?

  1. ¿Cuándo se crea el objeto Servlet?
  2. ¿Cuándo se destruye el objeto Servlet?
  3. ¿Cuántos objetos Servlet se crean?
  4. La representación del ciclo de vida de un objeto Servlet, es decir, ¿cuál es todo el proceso de un objeto Servlet desde la creación hasta la destrucción final?

        

A través de las preguntas anteriores, hablemos sobre el ciclo de vida de los objetos Servlet.

        El ciclo de vida completo del Servlet es administrado por el contenedor Servlet, que utiliza la interfaz jakarta.servlet.Servlet para comprender y administrar el objeto Servlet. El ciclo de vida del Servlet se puede dividir en cuatro etapas: etapa de carga, etapa de inicialización , Fase de procesamiento y destrucción de solicitudes

                

¿Quién mantiene el objeto Servlet?

        La creación del objeto Servlet, la invocación del método en el objeto y la destrucción final del objeto, los programadores de JavaWeb no tienen derecho a intervenir, y el ciclo de vida del objeto Servlet es el único responsable del servidor web. El servidor Tomcat generalmente se denomina contenedor web (Web Container), y administra la creación y destrucción de objetos Servlet a través del contenedor web.

        

¿Los objetos Servlet que creamos nosotros mismos son administrados por el contenedor Web?

        Los objetos Servlet creados por nosotros mismos no son administrados por el contenedor Web. Los objetos Servlet creados por el contenedor Web se colocarán en una colección (HashMap). Solo los Servlets colocados en esta colección pueden ser administrados por el contenedor Web. Los objetos Servlet son no en esta colección, por lo que no serán administrados por el contenedor web.
        
    La implementación subyacente del contenedor web es una colección de HashMaps, en la que se almacena la relación entre el objeto Servlet y la ruta de la solicitud.

        
Cuando se inicia el servidor, ¿se crea el objeto Servlet (por defecto)?

        Proporcione un método de construcción sin parámetros en el Servlet, genere una información de solicitud en el método de construcción y observe si el método de construcción se ejecuta al iniciar el servidor.

        Clase 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;
    }
}

        configuración 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>

        De forma predeterminada, después de iniciar el servidor Tomcat, la consola no muestra la información de construcción relevante de AServlet, lo que indica que el objeto AServlet no se ha instanciado en este momento.

        

Cuando el usuario envía la primera solicitud, la consola genera lo siguiente:

        El método de construcción sin parámetros de AServlet se ejecuta
        El método init de AServlet ejecuta
        el método de servicio de AServlet ejecuta!

De acuerdo con el contenido de salida anterior, se concluye que
        el objeto Servlet se instancia cuando el usuario envía la primera solicitud, es decir, se ejecuta el método de construcción de AServlet y se ejecuta el método de construcción sin parámetros.
        Después de que se crea el objeto AServlet, el servidor Tomcat llama inmediatamente al método init del objeto AServlet (el objeto Aservlet ya existe durante la ejecución del método init). Después de ejecutar el método init, el servidor Tomcat llama inmediatamente al método de servicio de el objeto AServlet.

        

El usuario continúa enviando una segunda solicitud múltiple y la consola genera lo siguiente:

        ¡El método de servicio de AServlet se ejecuta!

        ¡El método de servicio de AServlet se ejecuta!

        ¡El método de servicio de AServlet se ejecuta!

De acuerdo con los resultados de salida anteriores, se puede concluir que:

        Cuando el usuario envía la segunda o varias solicitudes, el objeto Servlet no se crea nuevamente, y el objeto Servlet creado anteriormente todavía se usa, y el método de servicio del objeto se llama directamente sin pasar por el método init del objeto Servlet. Estos fenómenos pueden explicar:

        Primero, el objeto Servlet es un singleton (instancia única, aunque el objeto Servlet es una instancia única, pero el Servlet no se ajusta al patrón singleton, lo llamamos un singleton falso. La razón por la cual el objeto Servlet es un singleton es porque el objeto Servlet La creación de Java Los programadores web no pueden percibir la creación de este objeto, que solo puede ser administrado por Tomcat (u otros servidores de aplicaciones web).Tomcat solo crea un objeto Servlet, lo que conduce a un singleton, pero es falso. singleton, y un modo de ejemplo de singleton verdadero, su método de construcción está privatizado.En
        segundo lugar, el método de construcción sin argumentos, el método init solo se ejecuta cuando el usuario envía una solicitud por primera vez, es decir, el método sin argumentos. El método de construcción solo se ejecuta una vez, y el método init solo lo ejecuta Tomcat. El servidor llama una vez.
        Tercero, siempre que el usuario envíe una solicitud, el servidor Tomcat definitivamente llamará una vez al método de servicio, y si se envía veces, el método de servicio también se llamará varias veces.

        

Al apagar el servidor, la consola muestra lo siguiente:

        ¡El método de destrucción de AService se ejecuta!

 De acuerdo con los resultados de salida anteriores, se puede concluir que:

        El servidor Tomcat llama al método de destrucción del Servlet solo una vez. Cuando el servidor web está cerrado, Tomcat necesita destruir la memoria del objeto Servlet. Antes de destruir el objeto Servlet, el servidor Tomcat llamará al método de destrucción una vez. Cuando se llama al método de destrucción, el objeto Servlet aún sobrevive. Después de la destrucción se ejecuta el método, el objeto Servlet se destruye. .

        

       Lo anterior es una introducción al proceso del ciclo de vida de los objetos Servlet Solo estando familiarizados con el ciclo de vida de los Servlets podemos manejar adecuadamente los objetos Servlet en el momento correspondiente. Si tiene alguna pregunta, ¡bienvenido a intercambiar y discutir en el área de comentarios!

Supongo que te gusta

Origin blog.csdn.net/qq_43500084/article/details/127794289
Recomendado
Clasificación