Angenommen, ich habe folgendes in meiner web.xml
%Vor%In welcher Reihenfolge werden die Filter aufgerufen, wenn eine Anfrage als /XYZ/abc.do kommt. Und warum?
In der Reihenfolge, in der ihre Zuordnungen in web.xml definiert sind
Bei Verwendung von Annotationen ( @WebFilter
) gilt die Reihenfolge scheint nicht definiert zu sein - Sie müssen noch die <filter-mapping>
-Einträge in web.xml deklarieren.
Abschnitt 6.2.4 der Servlet-Spezifikation 3.0 :
Beim Verarbeiten eines
<filter-mapping>
-Elements mit dem<url-pattern>
-Stil muss der Container anhand der Pfadzuordnungsregeln, die in Kapitel 12, "Zuordnen von Anforderungen an Servlets" definiert sind, ermitteln, ob<url-pattern>
mit dem Anfrage-URI übereinstimmt.Die Reihenfolge, die der Container beim Erstellen der Filterkette verwendet, die für eine bestimmte Anforderungs-URI angewendet werden soll, lautet wie folgt:
Zuerst stimmen die
<url-pattern>
übereinstimmenden Filterzuordnungen in der Reihenfolge überein, in der diese Elemente im Deployment-Deskriptor erscheinen.Als nächstes stimmen die
<servlet-name>
übereinstimmenden Filterzuordnungen in der Reihenfolge überein, in der diese Elemente im Deployment-Deskriptor erscheinen.Wenn eine Filterzuordnung sowohl
<servlet-name>
als auch<url-pattern>
enthält, muss der Container die Filterzuordnung auf mehrere Filterzuordnungen erweitern (eine für jede<servlet-name>
und<url-pattern>
), wobei die Reihenfolge der<servlet-name>
und<url-pattern>
elements.
Kurz gesagt: Sie werden in der Reihenfolge angewendet, in der sie in der XML-Datei erscheinen. Es wird interessant, wenn Sie eine URL treffen, die sowohl von den gebundenen Filtern <url-pattern>
als auch <servlet-name>
abgedeckt wird, da dann alle URL-Muster-gebundenen Filter vor allen an den Servlet-Namen gebundenen Filtern angewendet werden. Ich war noch nie in dieser Situation (ich habe noch keinen Filter gesehen, der an einen Servlet-Namen gebunden ist), aber ich denke, das könnte ziemlich verwirrend sein.
Tags und Links java java-ee servlets servlet-filters