Jestem tu trochę zdezorientowany. W naszej aplikacji mamy zdefiniowane kilka serwletów. Oto fragment z web.xml
jednego z serwletów:
<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>
Zgodnie z moim rozumieniem wartość parametru the <load-on-startup>
musi być dodatnią liczbą całkowitą, aby została załadowana automatycznie. Wyszukałem w Google, ale odpowiedzi, które znalazłem, tylko pogłębiły moje zamieszanie.
źródło
Krótka odpowiedź : wartość> = 0 oznacza, że serwlet jest ładowany podczas wdrażania aplikacji internetowej lub podczas uruchamiania serwera. wartość <0: serwlet jest ładowany zawsze, gdy kontener ma na to ochotę.
Długa odpowiedź (ze specyfikacji):
źródło
Wskazuje, że serwlet nie zostanie uruchomiony, dopóki żądanie nie spróbuje uzyskać do niego dostępu.
Jeśli obciążenie przy uruchamianiu jest większe lub równe zero, wtedy gdy kontener się uruchomi, uruchomi ten serwlet w kolejności rosnącej obciążenia przy uruchamianiu, które tam umieściłeś (tj. 0, 1, potem 2, potem 5, potem 10 i tak dalej) .
źródło
Cykl życia serwletu
Wartość 0
load-on-startup
oznacza, że punkt 1 jest wykonywany, gdy żądanie przychodzi do tego serwletu. Inne wartości oznaczają, że punkt 1 jest wykonywany podczas uruchamiania kontenera.źródło
Jak stwierdzono w innej odpowiedzi i ten artykuł dotyczący ładowania przy uruchamianiu, zero jest akceptowalne, a przy braku jakiegokolwiek innego serwletu będzie to miało pierwszeństwo podczas ładowania i ładowania podczas wdrażania. Najlepszym zastosowaniem statup typu load-on jest ładowanie serwletów, których inicjalizacja zajmuje więcej czasu, zanim nadejdzie pierwsze żądanie, tak jak aplety, które tworzą pulę połączeń, wykonują połączenie sieciowe lub przechowują duże zasoby, co znacznie skróci czas odpowiedzi dla pierwszych kilku żądań.
źródło
źródło
tak, może mieć tę samą wartość ... powodem podania liczb do ładowania przy starcie jest zdefiniowanie kolejności, w jakiej serwer będzie ładował cały serwlet. Aplet z wartością obciążenia przy uruchomieniu 0 zostanie załadowany jako pierwszy, a aplet z wartością 1 zostanie załadowany później.
jeśli dwa serwlety będą miały taką samą wartość ładowania przy starcie, to będzie ładowane w sposób zadeklarowany w pliku web.xml od góry do dołu. serwlet, który znajduje się jako pierwszy w pliku web.xml, zostanie załadowany jako pierwszy, a drugi zostanie załadowany później.
źródło
-> Znacznik (Brak obciążenia przy uruchomieniu) Po pierwsze, kiedy serwlet jest wdrażany na serwerze, za utworzenie obiektu serwletu odpowiada serwer. Np .: Załóżmy, że serwlet jest wdrożony na serwerze, (obiekt serwletu nie jest dostępny na serwerze) klient wysyła żądanie do serwletu po raz pierwszy, a następnie serwer tworzy obiekt serwletu za pomocą domyślnego konstruktora i natychmiast wywołuje init (). Od tego momentu, gdy klient wyśle żądanie, zostanie wykonana tylko metoda usługi, ponieważ obiekt jest już dostępny
Jeśli w deskryptorze wdrażania używany jest znacznik ładowania przy uruchamianiu: W czasie wdrażania sam serwer tworzy obiekt serwletu dla serwletów na podstawie wartości dodatniej podanej między znacznikami. Tworzenie obiektów dla klas serwletów będzie następowało od 0-128 0, a najpierw zostanie utworzony serwlet liczbowy, a za nim inne numery.
Jeśli podamy tę samą wartość dla dwóch serwletów w pliku web.xml, wówczas tworzenie obiektów zostanie wykonane na podstawie pozycji klas w pliku web.xml, również różni się w zależności od serwera.
Jeśli podamy wartość ujemną pomiędzy ładowaniem tagu startowego, serwer nie utworzy obiektu serwletu.
Inne scenariusze, w których serwer tworzy obiekt dla serwletu.
Jeśli nie użyjemy load on start up tag w web.xml, projekt jest wdrażany, gdy klient wysyła żądanie po raz pierwszy, gdy serwer tworzy obiekt, a serwer jest odpowiedzialny za wywołanie jego metod cyklu życia. Następnie, jeśli .class został zmodyfikowany na serwerze (tomcat). klient ponownie wysyła żądanie zmodyfikowanego serwletu, ale w przypadku tomcat nowy obiekt nie zostanie utworzony, a serwer będzie wykorzystywał istniejący obiekt, chyba że nastąpi restart serwera. Ale w klasie logiki sieciowej, kiedy plik .class jest modyfikowany na serwerze bez ponownego uruchamiania serwera, jeśli otrzyma żądanie, serwer wywołuje metodę zniszczenia na istniejącym serwlecie i tworzy nowy obiekt serwletu i wywołuje init () w celu jego zainicjowania .
źródło
Jeśli wartość wynosi <0, serlet jest tworzony, gdy przychodzi żądanie, w przeciwnym razie> = 0 kontener zostanie załadowany w kolejności rosnącej wartości. jeśli 2 lub więcej serwletów ma tę samą wartość, to kolejność serwletów zadeklarowana w pliku web.xml.
źródło
Kontener serwletów ładuje serwlet podczas uruchamiania lub podczas wysyłania pierwszego żądania. Ładowanie serwletu zależy od atrybutu „load-on-startup” w pliku „web.xml”. Jeśli atrybut ma dodatnią liczbę całkowitą (od 0 do 128), to serwlet jest ładowany ładowaniem kontenera, w przeciwnym razie ładuje się, gdy przychodzi pierwsze żądanie usługi.
Gdy aplet jest ładowany po otrzymaniu żądania, nazywa się to „ładowaniem z opóźnieniem”.
źródło
Jest to proste, czego nawet się nie spodziewasz.
Jeśli wartość jest dodatnia, jest ładowana podczas uruchamiania kontenera
Jeśli wartość nie jest dodatnia, to serwelet jest ładowany w momencie wykonania żądania.
źródło