Je suis un peu confus ici. Dans notre application, nous avons défini quelques servlets. Voici l'extrait du web.xml
pour l'une des 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>
Selon ce que je comprends, la valeur de l <load-on-startup>
doit être un entier positif pour qu'il soit chargé automatiquement. J'ai regardé sur google mais les réponses que j'ai trouvées n'ont fait qu'ajouter à ma confusion.
Réponse courte : valeur> = 0 signifie que le servlet est chargé lorsque l'application Web est déployée ou au démarrage du serveur. valeur <0: la servlet est chargée à chaque fois que le conteneur le souhaite.
Réponse longue (de la spécification):
la source
Cela indique que le servlet ne sera pas démarré tant qu'une requête ne tentera pas d'y accéder.
Si la charge au démarrage est supérieure ou égale à zéro, alors lorsque le conteneur démarre, il démarrera ce servlet dans l'ordre croissant de la charge au démarrage que vous y mettez (c'est-à-dire 0, 1 puis 2 puis 5 puis 10 et ainsi de suite) .
la source
Cycle de vie du servlet
Une valeur 0 sur
load-on-startup
signifie que le point 1 est exécuté lorsqu'une requête arrive à ce servlet. D'autres valeurs signifient que le point 1 est exécuté au démarrage du conteneur.la source
Comme indiqué dans une autre réponse et cet article de chargement au démarrage zéro est acceptable et en l'absence de tout autre servlet, cela aura la priorité sur le chargement et le chargement pendant le déploiement. La meilleure utilisation de l'état de charge est de charger des servlets qui prennent plus de temps à s'initialiser bien avant que la première demande ne se produise, comme des servlets qui créent un pool de connexions ou effectuent un appel réseau ou détiennent des ressources volumineuses, cela réduira considérablement le temps de réponse pour les premières requêtes.
la source
la source
oui il peut avoir la même valeur .... la raison pour laquelle on donne des nombres au chargement au démarrage est de définir une séquence pour que le serveur charge tous les servlets. Le servlet avec une valeur de chargement au démarrage 0 se chargera en premier et le servlet avec la valeur 1 se chargera ensuite.
si deux servlets auront la même valeur pour le chargement au démarrage, il sera chargé comme ils sont déclarés dans le fichier web.xml de haut en bas. le servlet qui vient en premier dans le fichier web.xml sera chargé en premier et l'autre sera chargé ensuite.
la source
-> Balise (Absence de chargement au démarrage) Tout d'abord, lorsque le servlet est déployé dans le serveur, il est de la responsabilité du serveur de créer l'objet servlet. Par exemple: supposons que le servlet soit déployé sur le serveur, (l'objet servlet n'est pas disponible sur le serveur) le client envoie la demande au servlet pour la première fois, puis le serveur crée l'objet servlet à l'aide du constructeur par défaut et appelle immédiatement init (). À partir de là, lorsque le client envoie la demande, seule la méthode de service sera exécutée car l'objet est déjà disponible
Si la balise de chargement au démarrage est utilisée dans le descripteur de déploiement: Au moment du déploiement lui-même, le serveur crée l'objet servlet pour les servlets en fonction de la valeur positive fournie entre les balises. La création d'objets pour les classes de servlet suivra à partir de 0-128 0 servlet sera créé en premier et suivi par d'autres nombres.
Si nous fournissons la même valeur pour deux servlets dans web.xml, la création d'objets se fera en fonction de la position des classes dans web.xml qui varie également d'un serveur à l'autre.
Si nous fournissons une valeur négative entre la balise de chargement au démarrage, le serveur ne créera pas l'objet servlet.
Autres scénarios dans lesquels le serveur crée l'objet pour le servlet.
Si nous n'utilisons pas la balise load on start up dans web.xml, alors le projet est déployé chaque fois que le client envoie la demande pour la première fois que le serveur crée l'objet et le serveur est responsable de l'appel de ses méthodes de cycle de vie. Puis si un .class a été modifié dans le serveur (tomcat). à nouveau le client envoie la demande de servlet modifié mais dans le cas de tomcat, le nouvel objet ne sera pas créé et le serveur utilisera l'objet existant à moins que le redémarrage du serveur n'ait lieu. Mais dans la classe de logique web chaque fois que le fichier .class est modifié dans le serveur sans redémarrer le serveur s'il reçoit une requête, le serveur appelle la méthode destroy sur le servlet existant et crée un nouvel objet servlet et appelle init () pour son initialisation .
la source
Si la valeur est <0, le serlet est instancié lorsque la requête arrive, sinon> = 0 le conteneur se chargera dans l'ordre croissant des valeurs. si 2 servlets ou plus ont la même valeur, alors l'ordre des servlets déclarés dans le fichier web.xml.
la source
Le conteneur de servlet charge le servlet lors du démarrage ou lors de la première demande. Le chargement du servlet dépend de l'attribut "load-on-startup" dans le fichier "web.xml". Si l'attribut a un entier positif (0 à 128) alors le servlet est chargé avec le chargement du conteneur sinon il se charge lorsque la première demande vient pour le service.
Lorsque le servlet est chargé une fois qu'il reçoit une requête, il est appelé "chargement paresseux".
la source
C'est simple comme vous ne vous y attendez même pas.
Si la valeur est positive, elle est chargée au démarrage du conteneur
Si la valeur n'est pas positive, le servelet est chargé lors de la demande.
la source