In welcher Reihenfolge werden die Methoden Servlet.init() und Filter.init() in der Java-Webanwendung aufgerufen? Welcher wird zuerst genannt? Werden alle Servlet.init() -Methoden zuvor als Filter.doFilter-Methode aufgerufen?Aufruffolge von Servlet.init() und Filter.init()
Antwort
Die Filter werden immer beim Start von webapp in der Reihenfolge initialisiert, wie sie in der web.xml
definiert sind.
Die Servlets werden standardmäßig während der ersten HTTP-Anfrage nur in ihrem URL-Muster initialisiert. Sie können sie aber auch so konfigurieren, dass sie beim Start der Webanwendung unter Verwendung der <load-on-startup>
Einträge initialisiert werden, in denen Sie ihre Priorität angeben können. Sie werden dann in der Prioritätsreihenfolge geladen.
Zum Beispiel
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Wenn mehr Servlets mit der gleichen Priorität Ordnung sind, dann ist die Ladereihenfolge für das Servlets ist nicht spezifiziert und kann beliebig sein. Servlets sind jedoch in keiner Weise initialisiert nach die Initialisierung von Filtern, aber vor Aufruf der Filter.
- Für alle Filter:
Filter.init()
- Für alle Servlets mit '' in
web.xml
:Servlet.init()
- für alle anwendbaren Filter für Anfrage:
Filter.doFilter()
- ggf. Servlet nicht bereits initialisiert :
Servlet.init()
- Für anwendbar Servlet:
Servlet.service()
Dies widerspricht BalusCs Antwort, die Ihre (4) vor (3) haben würde. –
(2) ist für Servlets, die in der Datei web.xml geladen werden. (4) ist für Servlets, die bei der ersten Anfrage an das Servlet initialisiert werden. – downeyt
nur eine Randnotiz - erleben ich auf Kater (7.0.30), dass der Filter.init() -Methoden in zufälliger Reihenfolge (Iteration über HashMap) ausgeführt werden.
Dies sollte ein Kommentar sein. –
Ja ich weiß, aber ich kann nicht kommentieren, da ich nicht genug Ruf habe. Aber ich denke, es ist erwähnenswert, dass die akzeptierte Antwort in diesem Aspekt falsch zu sein scheint (das ist die Reihenfolge der aufrufenden Filter.init() -Methode ist in der Regel nicht definiert) –
Vorsicht. Ich habe den gleichzeitigen Aufruf von Filter.init() und Filter.doFilter() für dieselbe Instanz beobachtet. Ich bin immer noch geschockt und kann mich nicht erholen. Sein Name ist Jetty.
- 1. Get HTTP Status 500 - Servlet.init() für Servlet Dispatcher warf Ausnahme
- 2. Entfernen von "!" „[“ Und „]“ von Dateinamen
- 3. NPE beim Testen von Servlet mit testNG und Mockito
- 4. Speichern und Laden von AST und M3 von/in Datei
- 5. Pro und Kontra von
- 6. more_like_this und group von
- 7. Und von SQL-Liste
- 8. Suchen und Ersetzen von Dateien und Ordnernamen
- 9. HtmlAgilityPack und Auswahl von Knoten und Unterknoten
- 10. Ausschneiden und Einfügen von vim und tmux
- 11. Volltextsuche und Hervorhebung von PHP und MySQL?
- 12. Pro und Kontra von Tkinter und WxWidgets?
- 13. Pro und Contra von DFC und DFS?
- 14. Speichern und Wiederherstellen von Formularposition und -größe
- 15. Gruppierung und Ausgabe von Kategorien und Unterkategorien
- 16. Geschwindigkeit und Beschleunigung von Zeit und Höhe
- 17. Verwenden von Delegaten UND Deklarieren von Ereignissen
- 18. Starten und Stoppen von firefox von C#
- 19. Verwenden von ModelForm und Übergeben von Argumenten
- 20. Erhalten und Plotten von Wellenvektoren von fft
- 21. Speichern von Konfigurationsinformationen und Zugriff von Modul
- 22. Verarbeiten von Objekten und Zuweisen von Variablen
- 23. Einstellen von Javascript-Cookies und Abrufen von
- 24. Lesen von API und Aktualisieren von MongoDB
- 25. Gnuplot: Plot von Nummer und von Datei
- 26. Abrufen von Interpreten- und Songinformationen von youtube
- 27. `Ersetzen von '1' und` ab` von `a`
- 28. Verwenden von Ereignishandlern und Überschreiben von Ereignisauslösemethoden
- 29. Öffnen und Schließen von Anwendungen von Java
- 30. Abrufen von Schlüsseln und Werten von json
Wenn ich in load-on-startup in web.xml festgelegt habe, kann ich sicher sein, dass dieses init() vor dem filter doFilter aufgerufen wird? – martsraits
Ja, ich habe das bearbeitet. Dies ist jedoch unabhängig von 'load-on-startup'. – BalusC
+1 ziemlich hilfreich thx. – kukudas