Ich bin hier etwas verwirrt. In unserer Anwendung sind einige Servlets definiert. Hier ist der Auszug aus dem web.xml
für eines der 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>
Nach meinem Verständnis muss der Wert für das <load-on-startup>
eine positive ganze Zahl sein, damit es automatisch geladen wird. Ich habe bei Google nachgeschlagen, aber die Antworten, auf die ich gestoßen bin, haben nur zu meiner Verwirrung beigetragen.
quelle
Kurze Antwort : Wert> = 0 bedeutet, dass das Servlet geladen wird, wenn die Web-App bereitgestellt wird oder wenn der Server gestartet wird. Wert <0: Servlet wird geladen, wann immer sich der Container anfühlt.
Lange Antwort (aus der Spezifikation):
quelle
Es zeigt an, dass das Servlet erst gestartet wird, wenn eine Anforderung versucht, darauf zuzugreifen.
Wenn Load-on-Startup größer oder gleich Null ist, startet das Servlet beim Start des Containers in aufsteigender Reihenfolge des dort eingegebenen Load-on-Startup-Werts (dh 0, 1, 2, 5, 10, 10 usw.). .
quelle
Servlet-Lebenszyklus
Ein Wert von 0
load-on-startup
bedeutet, dass Punkt 1 ausgeführt wird, wenn eine Anforderung an dieses Servlet eingeht. Andere Werte bedeuten, dass Punkt 1 beim Start des Containers ausgeführt wird.quelle
Wie in der anderen Antwort und in diesem Artikel zum Laden beim Start angegeben, ist Null akzeptabel. Wenn kein anderes Servlet vorhanden ist, hat dies beim Laden Vorrang und wird während der Bereitstellung geladen. Die beste Verwendung von Load-On-Statup ist das Laden von Servlets, deren Initialisierung länger dauert, bevor die erste Anforderung eingeht, wie Servlets, die einen Verbindungspool erstellen oder einen Netzwerkanruf tätigen oder sperrige Ressourcen halten. Dadurch wird die Antwortzeit für die ersten paar Anforderungen erheblich verkürzt.
quelle
quelle
Ja, es kann denselben Wert haben. Der Grund für die Angabe von Zahlen beim Laden beim Start besteht darin, eine Sequenz zu definieren, in der der Server das gesamte Servlet lädt. Servlet mit 0 Load-On-Startup-Wert wird zuerst geladen und Servlet mit Wert 1 wird danach geladen.
Wenn zwei Servlets beim Laden beim Start denselben Wert haben, wird geladen, wie sie in der Datei web.xml von oben nach unten deklariert sind. Das Servlet, das zuerst in der Datei web.xml steht, wird zuerst geladen und das andere wird danach geladen.
quelle
-> (Keine Last beim Start) Tag Wenn ein Servlet auf dem Server bereitgestellt wird, liegt es in der Verantwortung des Servers, das Servlet-Objekt zu erstellen. Beispiel: Angenommen, Servlet wird auf dem Server bereitgestellt. (Servlet-Objekt ist auf dem Server nicht verfügbar.) Der Client sendet die Anforderung zum ersten Mal an das Servlet. Anschließend erstellt der Server das Servlet-Objekt mithilfe des Standardkonstruktors und ruft sofort init () auf. Wenn der Client die Anforderung sendet, wird nur die Servicemethode ausgeführt, da das Objekt bereits verfügbar ist
Wenn im Bereitstellungsdeskriptor das Tag zum Laden beim Start verwendet wird: Zum Zeitpunkt der Bereitstellung selbst erstellt der Server das Servlet-Objekt für die Servlets auf der Grundlage des positiven Werts zwischen den Tags. Die Erstellung von Objekten für die Servlet-Klassen erfolgt von 0 bis 128. Das Servlet mit der Nummer 0 wird zuerst erstellt, gefolgt von anderen Nummern.
Wenn wir für zwei Servlets in web.xml den gleichen Wert angeben, werden Objekte basierend auf der Position der Klassen in web.xml erstellt, die auch von Server zu Server unterschiedlich sind.
Wenn zwischen dem Laden beim Start ein negativer Wert angegeben wird, erstellt der Server das Servlet-Objekt nicht.
Andere Szenarien, in denen der Server das Objekt für das Servlet erstellt.
Wenn in web.xml kein Lade-Start-Tag verwendet wird, wird das Projekt immer dann bereitgestellt, wenn der Client die Anforderung zum ersten Mal sendet, wenn der Server das Objekt erstellt, und der Server für den Aufruf seiner Lebenszyklusmethoden verantwortlich ist. Dann, wenn eine .class auf dem Server (Tomcat) geändert wurde. Der Client sendet erneut die Anforderung für ein geändertes Servlet. Im Falle von Tomcat wird jedoch kein neues Objekt erstellt und der Server verwendet das vorhandene Objekt, es sei denn, der Server wird neu gestartet. Wenn jedoch in der Klasse der Weblogik die .class-Datei auf dem Server geändert wird, ohne den Server neu zu starten, wenn er eine Anforderung empfängt, ruft der Server die destroy-Methode für ein vorhandenes Servlet auf, erstellt ein neues Servlet-Objekt und ruft init () für dessen Initilisierung auf .
quelle
Wenn der Wert <0 ist, wird das Serlet bei der Anforderung instanziiert, andernfalls> = 0 wird der Container in aufsteigender Reihenfolge der Werte geladen. Wenn zwei oder mehr Servlets denselben Wert haben, wird die Reihenfolge der Servlets in der Datei web.xml deklariert.
quelle
Der Servlet-Container lädt das Servlet beim Start oder bei der ersten Anforderung. Das Laden des Servlets hängt vom Attribut "load-on-startup" in der Datei "web.xml" ab. Wenn das Attribut eine positive Ganzzahl (0 bis 128) hat, wird das Servlet mit dem Laden des Containers geladen, andernfalls wird es geladen, wenn die erste Anforderung zum Service kommt.
Wenn das Servlet geladen wird, sobald es eine Anforderung erhält, wird es als "Lazy Loading" bezeichnet.
quelle
Es ist einfach, wie Sie nicht einmal erwarten.
Wenn der Wert positiv ist, wird er beim Start des Containers geladen
Wenn der Wert nicht positiv ist, wird das Servelet geladen, wenn die Anforderung gestellt wird.
quelle