Me estoy confundiendo un poco aquí. En nuestra aplicación estamos definiendo algunos servlets. Aquí está el extracto de web.xml
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 para el <load-on-startup>
tiene que 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.
fuente
Respuesta corta : 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):
fuente
Indica que el servlet no se iniciará hasta que una solicitud intente acceder a él.
Si load-on-startup es mayor o igual a cero, entonces cuando el contenedor se inicie, iniciará ese servlet en orden ascendente de la carga en el valor de inicio que haya puesto allí (es decir, 0, 1 luego 2, luego 5, luego 10, etc.) .
fuente
Ciclo de vida del servlet
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.fuente
Como se indicó en otra respuesta y este artículo cero de carga al inicio 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 los 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.
fuente
fuente
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 cargar en el inicio que se cargarán cómo 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.
fuente
-> Etiqueta (Ausencia de carga al inicio) En primer lugar, cuando se despliega un 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 utiliza la etiqueta de carga al inicio en el descriptor de implementación: en el momento de la implementación, el servidor crea el objeto 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-128 0 servlet número será creado primero y seguido de 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 la etiqueta de carga al 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 .
fuente
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, el orden de los servlets declarado en web.xml.
fuente
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 el archivo "web.xml". 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".
fuente
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.
fuente