2010-05-25 2 views

Antwort

25

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.

+1

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

+0

Ja, ich habe das bearbeitet. Dies ist jedoch unabhängig von 'load-on-startup'. – BalusC

+0

+1 ziemlich hilfreich thx. – kukudas

6
  1. Für alle Filter: Filter.init()
  2. Für alle Servlets mit '' in web.xml: Servlet.init()
  3. für alle anwendbaren Filter für Anfrage: Filter.doFilter()
  4. ggf. Servlet nicht bereits initialisiert : Servlet.init()
  5. Für anwendbar Servlet: Servlet.service()
+1

Dies widerspricht BalusCs Antwort, die Ihre (4) vor (3) haben würde. –

+0

(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

6

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.

+0

Dies sollte ein Kommentar sein. –

+0

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) –

-1

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.

Verwandte Themen