Question

Je suis un peu confus ici. Dans notre application, nous avons défini quelques servlets. Voici l'extrait du web.xml de l'un 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 j'ai compris, la valeur de < load-on-startup > doit être un entier positif pour pouvoir être chargée automatiquement. J'ai regardé sur Google, mais les réponses que j'ai trouvées ne faisaient qu'ajouter à ma confusion.

Était-ce utile?

La solution

Resin 3.0 documente ce comportement:

  

load-on-startup peut spécifier une valeur entière (facultative). Si la valeur est 0 ou supérieure,   il indique un ordre de chargement des servlets, les servlets avec des nombres plus élevés sont   chargé après les servlets avec des nombres plus faibles.

La spécification JSP 3.1 (JSR 340) l'indique à la page 14-160 :

  

L'élément load-on-startup indique que ce servlet doit être chargé (instancié   et avoir son   init () appelé) au démarrage de l'application Web. Le contenu de l'élément de cette   L'élément doit être un entier indiquant l'ordre dans lequel la servlet doit être   chargé. Si la valeur est un entier négatif ou si l’élément n’est pas présent, le paramètre   Le conteneur est libre de charger le servlet quand il le souhaite. Si la valeur est positive   entier ou 0, le conteneur doit charger et initialiser le servlet à mesure que l'application est   déployé. Le conteneur doit garantir que les servlets marqués avec des entiers inférieurs   sont chargés avant les servlets marqués avec des nombres entiers plus élevés. Le conteneur peut choisir   l'ordre de chargement des servlets avec la même valeur load-on-startup .

Vous souhaitez probablement vérifier non seulement le JSR, mais également la documentation de votre conteneur Web. Il peut y avoir des différences

Autres conseils

Réponse courte : valeur > = 0 signifie que le servlet est chargé lors du déploiement de l'application Web ou du démarrage du serveur. valeur < 0: la servlet est chargée chaque fois que le conteneur se présente.

Réponse longue (à partir de la spécification):

  

L'élément load-on-startup indique que cette   servlet doit être chargé (instancié et avoir   son init () appelé) au démarrage du web   application. Le contenu optionnel de ces   L'élément doit être un entier indiquant l'ordre dans   le servlet doit être chargé. Si la valeur   est un entier négatif, ou l'élément n'est pas   présent, le conteneur est libre de charger le servlet   quand il le souhaite. Si la valeur est positive   128   entier ou 0, le conteneur doit charger et   initialiser le servlet en tant que l'application est   déployé. Le conteneur doit garantir que   les servlets marqués avec des entiers inférieurs sont chargés   avant les servlets marqués avec des entiers plus élevés. le   conteneur peut choisir l'ordre de chargement des   servlets avec la même valeur de charge au démarrage.

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, au démarrage du conteneur, cette servlet démarrera dans l'ordre croissant de la valeur de charge au démarrage indiquée (c.-à-d. 0, 1, puis 2, puis 5, puis 10 et 10). etc.).

Cycle de vie des servlets

  

Le cycle de vie d'un servlet est contrôlé par le conteneur dans lequel le servlet a été déployé. Lorsqu'une demande est mappée à un servlet, le conteneur exécute les étapes suivantes:

     
      
  1. Si une instance du servlet n'existe pas, le conteneur Web:

         

    a. Charge la classe de servlet

         

    b. crée une instance de la classe de servlet

         

    c. initialise l'instance de servlet en appelant la méthode init (l'initialisation est décrite dans Création et initialisation d'un servlet )

  2.   
  3. Le conteneur appelle la méthode de service en transmettant les objets request et response. Les méthodes de service sont décrites dans la Écrire des méthodes de service .

  4.   

Une valeur 0 sur load-on-startup signifie que le point 1 est exécuté lorsqu'une requête parvient à ce servlet. Les autres valeurs signifient que le point 1 est exécuté au démarrage du conteneur.

Comme indiqué dans une autre réponse, charger -on-startup article : zéro est acceptable et, en l'absence de tout autre servlet, il sera prioritaire lors du chargement et chargé lors du déploiement. La meilleure utilisation de stat-on load est de charger les servlets dont l'initialisation prend plus de temps avant que la première requête ne vienne comme des servlets qui créent un pool de connexions, établissent un appel réseau ou maintiennent une ressource volumineuse. Cela réduira considérablement le temps de réponse des premières requêtes.

  1. Si la valeur est identique pour deux servlets, elles seront chargées dans l'ordre dans lequel elles ont été déclarées dans le fichier web.xml.
  2. si est égal à 0 ou à un entier négatif, Servlet sera chargé lorsque Container aura envie de les charger.
  3. garantit le chargement, l’initialisation et l’appel à la méthode init () de la servlet par le conteneur Web.
  4. S'il n'y a pas d'élément pour un servlet, il sera chargé lorsque le conteneur Web décidera de le charger.

oui, il peut avoir la même valeur .... la raison pour attribuer des nombres à la charge au démarrage est de définir une séquence permettant au serveur de charger tout le servlet. servlet avec 0 valeur de chargement au démarrage sera chargé en premier et servlet avec la valeur 1 sera chargé par la suite.

si deux servlets auront la même valeur pour le chargement au démarrage que la façon dont ils sont déclarés dans le fichier web.xml, de haut en bas. la servlet qui vient en premier dans le fichier web.xml sera chargée en premier et l'autre sera chargée après.

- > Balise (Absence de charge au démarrage) Tout d’abord, lorsqu’un servlet est déployé sur le serveur, il incombe au serveur de créer l’objet servlet.    Exemple: supposons que 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 avec l'aide du constructeur par défaut. et appelle immédiatement init (). À partir de ce moment, chaque fois que le client enverra la requête, seule la méthode de service sera exécutée, car l'objet est déjà disponible

Si une balise load-on-start-up est utilisée dans le descripteur de déploiement:    Au moment du déploiement, 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 de 0 à 128.  0 servlet de numéro sera créé en premier et suivi d'autres numéros.

Si nous fournissons la même valeur pour deux servlets dans le fichier web.xml, la création d'objets se fera en fonction de la position des classes dans le fichier web.xml, qui varie également d'un serveur à l'autre.

Si nous fournissons une valeur négative entre les balises de chargement et de 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 start on start dans le fichier web.xml, le projet est déployé chaque fois que le client envoie la requête pour la première fois que le serveur crée l'objet et que le serveur est responsable de l'appel de ses méthodes de cycle de vie. Ensuite, si une classe est modifiée sur le serveur (tomcat). de nouveau le client envoie la demande pour le 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 ne se produise. Mais en classe de web-logic chaque fois que le fichier .class est modifié sur 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 l'initier. .

Si la valeur est < 0, le serlet est instancié lorsque la demande arrive, sinon > = 0 le conteneur sera chargé dans l'ordre croissant des valeurs. Si 2 servlets ou plus ont la même valeur, l'ordre des servlets déclarés dans le fichier web.xml.

Le conteneur de servlet charge le servlet au démarrage ou lors de la première demande. Le chargement de la servlet dépend de l’attribut "charge au démarrage". dans " web.xml " fichier. Si l'attribut a un entier positif (0 à 128), le servlet est chargé avec le chargement du conteneur, sinon il se charge lorsque la première requête arrive pour le service.

Lorsque le servlet est chargé une fois la requête reçue, il est appelé "Chargement paresseux".

C’est simple, 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top