<url-pattern>/*</url-pattern>
Das /*
On-Servlet überschreibt alle anderen Servlets, einschließlich aller vom Servlet-Container bereitgestellten Servlets, z. B. das Standardservlet und das JSP-Servlet. Was auch immer Sie anfordern, es wird in diesem Servlet enden. Dies ist daher ein schlechtes URL-Muster für Servlets. Normalerweise möchten Sie nur /*
auf einem verwenden Filter
. Es ist möglich, die Anforderung an jedes der Servlets weiterzuleiten, die durch Aufrufen ein spezifischeres URL-Muster abhören FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
Das /
überschreibt kein anderes Servlet. Es ersetzt nur das integrierte Standardservlet des Servletcontainers für alle Anforderungen, die keinem anderen registrierten Servlet entsprechen. Dies wird normalerweise nur für statische Ressourcen (CSS / JS / image / etc) und Verzeichnislisten aufgerufen. Das integrierte Standardservlet des Servletcontainers kann auch HTTP-Cache-Anforderungen, Medien-Streaming (Audio / Video) und das Herunterladen von Dateien verarbeiten. Normalerweise möchten Sie das Standardservlet nicht überschreiben, da Sie sich sonst um alle seine Aufgaben kümmern müssten, was nicht gerade trivial ist (die JSF-Dienstprogrammbibliothek OmniFaces verfügt über ein Open Source- Beispiel). Dies ist daher auch ein schlechtes URL-Muster für Servlets. Der Grund, warum JSP-Seiten dieses Servlet nicht treffen, liegt daran, dass das integrierte JSP-Servlet des Servletcontainers aufgerufen wird, das standardmäßig bereits dem spezifischeren URL-Muster zugeordnet ist *.jsp
.
<url-pattern></url-pattern>
Dann gibt es noch das leere String-URL-Muster
. Dies wird aufgerufen, wenn der Kontextstamm angefordert wird. Dies unterscheidet sich von dem <welcome-file>
Ansatz, dass es nicht aufgerufen wird, wenn ein Unterordner angefordert wird. Dies ist höchstwahrscheinlich das URL-Muster, nach dem Sie tatsächlich suchen, falls Sie ein " Homepage-Servlet " möchten . Ich muss nur zugeben, dass ich intuitiv erwarten würde, dass das URL-Muster für leere Zeichenfolgen
und das URL-Muster /
für Schrägstriche genau umgekehrt definiert werden, sodass ich verstehen kann, dass viele Starter diesbezüglich verwirrt waren. Aber es ist was es ist.
Front Controller
Falls Sie tatsächlich beabsichtigen , ein Front - Controller - Servlet haben, dann würden Sie am besten auf einem bestimmten URL - Muster Karte wie *.html
, *.do
, /pages/*
, /app/*
usw. Sie können die Front - Controller - URL - Muster und Abdeckung statischen Ressourcen auf einem gemeinsamen URL - Muster verstecken wie /resources/*
, /static/*
etc. mit Hilfe eines Servlet - Filter. Siehe auch So verhindern Sie, dass statische Ressourcen vom Front-Controller-Servlet verarbeitet werden, das auf / * zugeordnet ist . Beachten Sie, dass Spring MVC über ein integriertes Servlet /
für statische Ressourcen verfügt. Daher können Sie den Front-Controller zuordnen, wenn Sie in Spring ein allgemeines URL-Muster für statische Ressourcen konfigurieren. Siehe auch Wie gehe ich mit statischen Inhalten in Spring MVC um?