Pregunta

Me estoy confundiendo un poco aquí. En nuestra aplicación estamos definiendo algunos servlets. Aquí está el extracto del web.xml para uno de los servlets:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

Según tengo entendido, el valor de < load-on-startup > debe ser un número entero positivo para que se cargue automáticamente. Busqué en Google, pero las respuestas que encontré solo aumentaron mi confusión.

¿Fue útil?

Solución

Resin 3.0 documenta este comportamiento:

  

load-on-startup puede especificar un valor entero (opcional). Si el valor es 0 o mayor,   indica un orden para cargar los servlets, los servlets con números más altos obtienen   cargado después de servlets con números más bajos.

La especificación JSP 3.1 (JSR 340) dice esto en la página 14-160 :

  

El elemento load-on-startup indica que este servlet debe cargarse (instanciarse   y tiene su   init () llamado) en el inicio de la aplicación web. El contenido del elemento de este   El elemento debe ser un número entero que indique el orden en que debe estar el servlet   cargado. Si el valor es un entero negativo o el elemento no está presente, el   El contenedor es libre de cargar el servlet siempre que lo desee. Si el valor es positivo   entero o 0, el contenedor debe cargar e inicializar el servlet como la aplicación es   desplegado. El contenedor debe garantizar que los servlets marcados con enteros inferiores   se cargan antes de los servlets marcados con enteros más altos. El contenedor puede elegir   El orden de carga de los servlets con el mismo valor load-on-startup .

Probablemente desee comprobar no solo el JSR, sino también la documentación de su contenedor web. Puede haber diferencias

Otros consejos

Respuesta breve : valor > = 0 significa que el servlet se carga cuando se implementa la aplicación web o cuando se inicia el servidor. valor < 0: el servlet se carga cada vez que se siente el contenedor.

Respuesta larga (de la especificación):

  

El elemento load-on-startup indica que esto   el servlet debe cargarse (instanciarse y tener   su init () llamado) en el inicio de la web   solicitud. Los contenidos opcionales de estos   El elemento debe ser un número entero que indique el orden en   que se debe cargar el servlet. Si el valor   es un entero negativo, o el elemento no es   presente, el contenedor es libre de cargar el servlet   cuando quiera. Si el valor es positivo   128   entero o 0, el contenedor debe cargar y   inicializar el servlet como la aplicación es   desplegado. El contenedor debe garantizar que   los servlets marcados con enteros inferiores se cargan   antes de los servlets marcados con enteros más altos. los   contenedor puede elegir el orden de carga de   servlets con el mismo valor de carga al inicio.

Indica que el servlet no se iniciará hasta que una solicitud intente acceder a él.

Si la carga en el arranque es mayor o igual que cero, cuando el contenedor se inicie, se iniciará ese servlet en orden ascendente de la carga en el valor de arranque que pones allí (es decir, 0, 1, 2, 5, luego 10 y etc.)

Ciclo de vida del servlet

  

El ciclo de vida de un servlet está controlado por el contenedor en el que se ha desplegado el servlet. Cuando una solicitud se asigna a un servlet, el contenedor realiza los siguientes pasos.

     
      
  1. Si no existe una instancia del servlet, el contenedor web:

         

    a. Carga la clase de servlet

         

    b. Crea una instancia de la clase de servlet

         

    c. Inicializa la instancia del servlet llamando al método init (la inicialización se cubre en Creación e inicialización de un servlet )

  2.   
  3. El contenedor invoca el método de servicio, pasando objetos de solicitud y respuesta. Los métodos de servicio se analizan en Métodos de servicio de escritura .

  4.   

Un valor 0 en load-on-startup significa que el punto 1 se ejecuta cuando una solicitud llega a ese servlet. Otros valores significan que el punto 1 se ejecuta al inicio del contenedor.

Como se indica en otra respuesta y esta load el artículo de inicio cero es aceptable y, en ausencia de cualquier otro servlet, esto tendrá prioridad en la carga y carga durante la implementación. El mejor uso de statup de carga es cargar servlets, lo que lleva más tiempo inicializar mucho antes de que la primera solicitud llegue como servlets que crea un grupo de conexiones o realiza llamadas de red o retiene recursos voluminosos, esto reducirá significativamente el tiempo de respuesta para las primeras solicitudes.

  1. Si el valor es el mismo para dos servlets, se cargarán en un orden en el que se declaran dentro del archivo web.xml.
  2. si es 0 o entero negativo que Servlet se cargará cuando el Contenedor sienta cargarlos.
  3. garantiza la carga, la inicialización y el método de llamada a init () del servlet por contenedor web.
  4. Si no hay ningún elemento para ningún servlet, estos se cargarán cuando el contenedor web decida cargarlos.

sí, puede tener el mismo valor ... la razón para dar números a la carga al inicio es definir una secuencia para que el servidor cargue todo el servlet. el servlet con valor 0 de carga al inicio se cargará primero y el servlet con valor 1 se cargará después de eso.

si dos servlets tendrán el mismo valor para la carga al inicio que se cargarán de la forma en que se declaran en el web.xml de arriba a abajo. el servlet que viene primero en web.xml se cargará primero y el otro se cargará después de eso.

- > Etiqueta (Ausencia de carga al inicio) En primer lugar, cuando se despliega servlet en el servidor, es responsabilidad del servidor crear el objeto servlet.    Por ejemplo: supongamos que Servlet se implementa en el servidor, (el objeto Servlet no está disponible en el servidor) el cliente envía la solicitud al servlet por primera vez y luego el servidor crea el objeto servlet con la ayuda del constructor predeterminado e inmediatamente llama a init (). A partir de ese momento, cuando el cliente envíe la solicitud, solo se ejecutará el método de servicio ya que el objeto ya está disponible

Si se usa la etiqueta de carga al inicio en el descriptor de implementación:    En el momento de la implementación, el servidor crea el objeto de servlet para los servlets en función del valor positivo proporcionado entre las etiquetas. La creación de objetos para las clases de servlet seguirá de 0 a 128  El servlet de número 0 se creará primero y luego otros números.

Si proporcionamos el mismo valor para dos servlets en web.xml, la creación de objetos se realizará en función de la posición de las clases en web.xml también varía de un servidor a otro.

Si proporcionamos un valor negativo entre la carga en la etiqueta de inicio, el servidor no creará el objeto servlet.

Otros escenarios donde el servidor crea el objeto para el servlet.

Si no usamos cargar en la etiqueta de inicio en web.xml, el proyecto se implementa cuando el cliente envía la solicitud por primera vez, el servidor crea el objeto y el servidor es responsable de llamar a sus métodos de ciclo de vida. Entonces, si se ha modificado un .class en el servidor (tomcat). de nuevo, el cliente envía la solicitud de servlet modificado, pero en el caso de tomcat, no se creará un nuevo objeto y el servidor utilizará el objeto existente a menos que se reinicie el servidor. Pero en la clase de lógica web cuando el archivo .class se modifica en el servidor sin reiniciar el servidor si recibe una solicitud, el servidor llama al método de destrucción en el servlet existente y crea un nuevo objeto de servlet y llama a init () para su inicialización .

Si el valor es < 0, el serlet se instancia cuando llega la solicitud; de lo contrario, > = 0 el contenedor se cargará en el orden creciente de los valores. si 2 o más servlets tienen el mismo valor, entonces el orden de los servlets declarados en el web.xml.

El contenedor de servlets carga el servlet durante el inicio o cuando se realiza la primera solicitud. La carga del servlet depende del atributo " load-on-startup " en " web.xml " expediente. Si el atributo tiene un número entero positivo (0 a 128), el servlet se carga con la carga del contenedor; de lo contrario, se carga cuando llega la primera solicitud de servicio.

Cuando el servlet se carga una vez que recibe la solicitud, se llama " Carga diferida " ;.

Es simple como ni siquiera lo espera.

Si el valor es positivo, se carga cuando se inicia el contenedor

Si el valor no es positivo, el servidor se carga cuando se realiza la solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top