Ich weiß, dass diese Frage bereits als gelöst markiert ist, aber ich möchte ein neueres Bild hinzufügen, das dieses Muster ausführlich erklärt (Quelle: Frühling in Aktion 4):
Erläuterung
Wenn die Anforderung den Browser verlässt (1) , enthält sie Informationen darüber, wonach der Benutzer fragt. Zumindest trägt die Anfrage die angeforderte URL. Es kann jedoch auch zusätzliche Daten enthalten, z. B. die vom Benutzer in einem Formular übermittelten Informationen.
Die erste Station auf den Reisen der Anfrage ist das DispatcherServlet von Spring. Wie die meisten Java-basierten Webframeworks leitet Spring MVC Anforderungen über ein einziges Front-Controller-Servlet. Ein Front-Controller ist ein gängiges Webanwendungsmuster, bei dem ein einzelnes Servlet die Verantwortung für eine Anforderung an andere Komponenten einer Anwendung delegiert, um die tatsächliche Verarbeitung durchzuführen. Im Fall von Spring MVC ist DispatcherServlet der Front-Controller. Die Aufgabe des DispatcherServlets besteht darin, die Anforderung an einen Spring MVC-Controller weiterzuleiten. Ein Controller ist eine Spring-Komponente, die die Anforderung verarbeitet. Eine typische Anwendung kann jedoch mehrere Controller haben, und DispatcherServlet benötigt Hilfe bei der Entscheidung, an welchen Controller die Anforderung gesendet werden soll. Das DispatcherServlet konsultiert also eine oder mehrere Handlerzuordnungen (2).um herauszufinden, wo der nächste Stopp der Anfrage sein wird. Bei der Handlerzuordnung wird bei der Entscheidung besonders auf die URL geachtet, die von der Anforderung getragen wird. Sobald ein geeigneter Controller ausgewählt wurde, sendet DispatcherServlet die Anforderung auf seinem fröhlichen Weg an den ausgewählten Controller (3).. Bei der Steuerung gibt die Anforderung ihre Nutzlast (die vom Benutzer übermittelten Informationen) ab und wartet geduldig, während die Steuerung diese Informationen verarbeitet. (Tatsächlich führt eine gut konzipierte Steuerung selbst nur wenig oder gar keine Verarbeitung durch und delegiert stattdessen die Verantwortung für die Geschäftslogik an ein oder mehrere Serviceobjekte.) Die von einer Steuerung ausgeführte Logik führt häufig zu Informationen, auf die zurückgeführt werden muss der Benutzer und im Browser angezeigt. Diese Informationen werden als Modell bezeichnet. Das Zurücksenden von Rohdaten an den Benutzer reicht jedoch nicht aus - sie müssen in einem benutzerfreundlichen Format, normalerweise HTML, formatiert sein. Dazu müssen die Informationen einer Ansicht übergeben werden, normalerweise einer JavaServer Page (JSP). Eines der letzten Dinge, die ein Controller tut, ist das Packen der Modelldaten und das Identifizieren des Namens einer Ansicht, die die Ausgabe rendern soll. Anschließend wird die Anforderung zusammen mit dem Modell- und Ansichtsnamen an das DispatcherServlet zurückgesendet(4) . Damit der Controller nicht an eine bestimmte Ansicht gekoppelt wird, identifiziert der an DispatcherServlet zurückgegebene Ansichtsname eine bestimmte JSP nicht direkt. Dies bedeutet nicht unbedingt, dass es sich bei der Ansicht um eine JSP handelt. Stattdessen enthält es nur einen logischen Namen, der zum Nachschlagen der tatsächlichen Ansicht verwendet wird, die das Ergebnis erzeugt. Das DispatcherServlet konsultiert einen Ansichtsauflöser (5) , um den logischen Ansichtsnamen einer bestimmten Ansichtsimplementierung zuzuordnen, die eine JSP sein kann oder nicht. Nachdem DispatcherServlet nun weiß, in welcher Ansicht das Ergebnis gerendert wird, ist der Auftrag der Anforderung fast abgeschlossen. Die letzte Station ist die Umsetzung der Ansicht (6), normalerweise eine JSP, in der die Modelldaten bereitgestellt werden. Die Aufgabe der Anfrage ist endlich erledigt. Die Ansicht verwendet die Modelldaten, um eine Ausgabe zu rendern, die vom (nicht so fleißigen) Antwortobjekt (7) an den Client zurückgesendet wird .