2017-05-18 3 views
2

Ich habe es mit einer unklaren Frage über Java-Servlet-Filter.Quiz über Java-Servlet-Filter, unklar Antwort

Die Frage ist:

eine WAR-Datei mit der folgenden Struktur gegeben

| – WEB-INF/classes/Myservlet.class 
| – WEB-INF/lib/wf.jar 

Wo wf.jar einen gültigen Web-fragment.xml und die folgenden zwei Klassen: MyFilter1.class und MyFiler2 .Klasse. Der Web-fragment.xml ist wie folgt:

enter image description here

Im folgenden sind einige Code-Schnipsel:

enter image description here

Wenn man access „/“ der oben genannten Web-Anwendung, die werden die Filter ausgeführt werden?

A. Es werden keine Filter ausgeführt.

B. MyFilter1

C. MyFilter2

D. MyFilter1 und MyFilter2

Ich wette, dass die richtigen Antworten die D (beide Filter) wäre, aber die Lösungen sagen, dass das Recht ist C (ohne jede Erklärung). Warum sollte nur MyFilter2 ausgeführt werden?

Dank

Antwort

1

Die web-fragment.xml hat metadata-complete=true Daher werden die Anmerkungen zu den Klassen im Jar nicht ausgewertet und nur MyFilter2 wie im Fragment definiert registriert.

+0

Vielen Dank ... jetzt ist es wirklich klar. – Alessandro

1

Es hängt davon ab, ob Sie die chain.doFilter(request,response) in Ihrem ersten Filter haben, wenn Sie die Kette wird in den zweiten Filter gehen sonst wird es nicht.

Beachten Sie, dass der Deskriptor mehr Vorrang hat als Annotationen, wenn beide mit demselben Namen definiert sind. Dies gilt sowohl für Servlets als auch für Filter.

Wenn Sie versuchen, auf die URL mit "/" zuzugreifen, wird zuerst MyFilter2 angezeigt.

+0

Danke für die Antwort, also die Frage spricht nicht über 'chain.doFilter' dann wird nur MyFilter2 ausgeführt? Ist das nicht? – Alessandro

+0

Bearbeitete meine Antwort, einmal überprüfen –