Servlet Filter 'Reihenfolge der Ausführung
Stolperte ich über einen bug in meiner web-Anwendung, die hatte mir meinen Kopf kratzen (und irgendwann ziehen meine Haare für eine Weile, bis ich herausfand, was Los war.
Im Grunde hatte ich 2 Filter definiert, die in meinem web.xml und die beiden Zuordnungen wie :
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>SpringFormMethodFilter</filter-name>
<url-pattern>/administration/*</url-pattern>
</filter-mapping>
Sind Sie sowohl Spring MVC Filter. Mein problem war, dass die Formular-Daten, die ich bekam, war nicht so auszulegen, als UTF-8 trotz der Tatsache, dass die encodingFilter sollte setzen der request-encoding auf UTF-8, bevor irgendetwas anderes hatte die Gelegenheit zu Lesen.
Bemerkte ich schließlich, dass die Formular-filter-Methode ausgeführt wurde, BEVOR die Codierung filter, obwohl die Reihenfolge, in der filter-mappings definiert werden soll, in welcher Reihenfolge verkettet sind :
Die Reihenfolge der Filter in der Kette ist die gleiche wie die Reihenfolge, die
filter-mappings erscheinen in der web-application-deployment-descriptor.
(aus Oracle)
Wenn ich die gleiche mapping, d.h. eine Zuordnung zu einem servlet statt ein URL-Muster, für beide Zuordnungen, die Ordnung ist wiederhergestellt und alles funktioniert wie vorgesehen:
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>SpringFormMethodFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
Ist, dass ein Teil der Servlet
Spezifikation oder ist es ein Fehler von Tomcat ? Ist es irgendwo dokumentiert, soll ich einen bug report ?
Ich bin mit Tomcat 7.0.39 mit Java 7.
InformationsquelleAutor der Frage Pierre Henry | 2013-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der container bekommt sein ein Wunsch, es findet zuerst alle filter-mappings mit einer
<url-pattern>
entspricht der request-URI. Dies wird der erste Satz von filtern in der filter-Kette.Als Nächstes findet alle filter-mappings mit einer<servlet-name>
entspricht der request-URI. Dies wird die zweite Reihe von filtern in der filter-Kette.In beiden sets die Filter werden in der Reihenfolge ausgeführt, in der Sie deklariert sind, in der D. D.Entsprechend der Spezifikationen
InformationsquelleAutor der Antwort NINCOMPOOP
Darüber hinaus können Sie die Reihenfolge definieren, in der die Filter angewendet werden. Dies kann erreicht werden durch hinzufügen der folgenden Zeilen in Ihre web.xml:
Überprüfen diese für weitere Informationen.
InformationsquelleAutor der Antwort