# Model 2

Model 2 ist ein komplexes Entwurfsmuster zur Trennung von Anzeige (Darstellung von Inhalten) und Logik (Bezug und Manipulation dieser Inhalte) bei Java-Webanwendungen. Daher wird es üblicherweise mit MVC assoziiert. Obwohl die genaue Ausgestaltung von MVC nie für Model 2 spezifiziert wurde, empfehlen eine Reihe von Veröffentlichungen eine formalisierte Schicht, die den MVC-Model-Code enthält. Beispielsweise haben die Java BluePrints ursprünglich die Verwendung von EJBs empfohlen, um das MVC-Model zu kapseln.
In einer Model 2 Anwendung werden Anfragen vom Client-Browser zum Controller geleitet. Der Controller führt die Logik aus, die zur Beschaffung des Inhalts für die Darstellung notwendig ist. Dann legt er diesen Inhalt in der Anfrage ab (üblicherweise als JavaBean oder POJO) und entscheidet, welcher View er die Anfrage überreicht. Die View stellt dann den Inhalt dar, der vom Controller überreicht wurde.
Model 2 wird für mittlere und große Anwendungen empfohlen.

## Geschichte

1998 veröffentlichte die Sun Microsystems eine Vorabversion der JSP-Spezifikation, Version 0.92. Darin werden zwei Methoden aufgeführt, mit denen JSP-Seiten benutzt werden können. Das erste Modell („Model 1“ der Reihenfolge im Dokument nach) war simpel, JSP-Seiten waren eigenständige Entitäten. Logik konnte in der Seite selbst enthalten sein, die Navigation zwischen den Seiten wurde üblicherweise durch Hyperlinks verwirklicht. ColdFusion und Active Server Pages sind Beispiele zeitgenössischer Technologien, welche dieses Modell implementierten.
Das zweite Modell (Model 2 der Reihenfolge nach) war eine verbesserte Methode, die Servlet- mit JSP-Technologie kombiniert. Der aufgeführte Unterschied war, dass ein Servlet die Anfrage abfangen, den darzustellenden Inhalt in einen Parameter (üblicherweise ein JavaBean) packen, und schließlich eine JSP aufrufen würde, um den Inhalt im gewünschten Ausgabeformat darzustellen. Dieses Modell unterschied sich vom vorherigen in der Tatsache, dass JSP-Technologie als reine Template-Engine benutzt wurde. Alle Logik war in einem Servlet abgetrennt, sodass die alleinige Aufgabe der JSP es war, den bereitgestellten Inhalt zu rendern.
1999 gelang Govind Seshadri die Formalisierung des Begriffs Model 2 als MVC-Architekturmuster für Webanwendungen, statt einer von zwei Optionen. Angesichts der Verlagerung der Logik aus der JSP in ein Servlet könnten diese beiden als View und Controller einer MVC-Architektur betrachtet werden.
Im März 2000 wurde Apache Struts veröffentlicht. Dieses Projekt formalisierte die Trennung zwischen View und Controller und behauptete, eine Implementierung des Model-2-Musters zu sein. Abermals war die Implementierung des „Model“ undefiniert geblieben mit der Erwartung, dass Entwickler es mit einer angemessenen Lösung füllen würden. Datenbankinteraktion via JDBC und EJBs waren eine Option, die auf der Struts-Homepage vorgeschlagen wurde. Später wurden als modernere Optionen Hibernate, iBATIS und Apache OJB für das Modell aufgelistet.
Seit der Veröffentlichung von Struts sind etliche konkurrierende Frameworks erschienen. Viele davon behaupten ebenfalls, dass sie Model 2 und MVC implementieren. Das Ergebnis ist, dass die beiden Begriffe synonym von Entwicklern benutzt werden, was zur Bezeichnung „MVC Model 2“ oder „MVC2“ geführt hat.

## Missverständnisse

Ein übliches Missverständnis ist, dass ein formalisiertes MVC-Muster Voraussetzung für eine Model 2 Implementierung ist. Allerdings warnen die Java BluePrints speziell vor dieser Interpretation:
   The literature on Web-tier technology in the J2EE platform frequently uses the terms „Model 1“ and „Model 2“ without explanation. This terminology stems from early drafts of the JSP specification, which described two basic usage patterns for JSP pages. While the terms have disappeared from the specification document, they remain in common use. Model 1 and Model 2 simply refer to the absence or presence (respectively) of a controller servlet that dispatches requests from the client tier and selects views.
In deutscher Übersetzung:
   Die Literatur über Web-Tier-Technologie für die J2EE-Plattform benutzt häufig die Begriffe „Model 1“ und „Model 2“ ohne Erklärung. Diese Technologie stammt von frühen Entwürfen der JSP-Spezifikation, welche zwei grundlegende Gebrauchsmuster für JSP-Seiten beschreibt. Obwohl die Begriffe vom Spezifikationsdokument verschwunden sind, verbleiben sie geläufig. Model 1 und Model 2 beziehen sich schlicht auf die Abwesenheit bzw. Präsenz eines Controller-Servlets, das Anfragen vom Client-Tier sendet und Views auswählt.
Des Weiteren hat der Begriff „MVC2“ zum Irrglauben geführt, dass Model 2 die nächste Generation von MVC ist. Tatsächlich ist MVC2 nur eine Abkürzung von „MVC Model 2“.