Vergleich von Servlets, JSP, XSP, MVC und HMVC

Autor:
Thomas Bayer
Orientation in Objects GmbH
Thomas Bayer
Thomas Bayer
Datum:April 2002

Für die Realisierung von Web Anwendungen im J2EE Umfeld steht eine Reihe von Technologien für das Frontend zur Verfügung. Der folgende Text beschreibt kurz die Alternativen und grenzt sie ab.

Servlets

Servlets stellen Java Klassen dar, die Anforderungen nach Web Seiten verarbeiten können. Das Schreiben dieser Klassen ist sehr technisch und nahe am Medium. Die Entwicklung von Web Seiten mit Servlets gleicht daher der Programmierung mit Assembler. Der Programmierer hat sich um fast alles selbst zu kümmern wie der Code in Beispiel 1 zeigt. Näher an der Technik geht es nur mit CGI Skripten.

Servlets sind für die Realisierung technischer Aufgaben das Mittel der Wahl. Typische Aufgaben für Servlets sind:

Das Erstellen von komplexen Web Anwendungen rein mit Servlets ist in vielen Fällen zu aufwändig und zu teuer.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; 
import java.util.*;
public class CafeServlet extends HttpServlet {
  public void doPost(HttpServletRequest req,
                    HttpServletResponse res)
                    throwsServletException, IOException {
    String bestellung = req.getParameter("Bestellung");
    PrintWriter out = res.getWriter();
    out.println("<head><body>");
    out.println("<h2>Hier is Ihr "+bestellung+".<h2>");
    out.println("</body></head>");
  }
}

Beispiel 1: Einfaches Servlet

JavaServer Pages

Mit JavaServer Pages lassen sich schnell und einfach kleinere Web Anwendungen erstellen. Die Server Page ist eine um Java Code angereicherte HTML Seite. Der Entwickler kommt mit Ihnen schnell zu einem Ergebnis.

Mit JSP realisierte Web Anwendungen werden mit der Zeit unübersichtlich und schwer zu pflegen. In den Server Pages sind wie aus Beispiel 2 ersichtlich HTML und Java Code oft bunt gemischt. Abhilfe schafft die Verwendung von Helper Klassen und Taglibs. Eine Taglib ist eine Bibliothek mit Tags, die dem JSP Entwickler zur Verfügung stehen.

Eine weitere Trennung von Markup und Code kann durch die Verwendung von Server Pages in Verbindung mit einem Model View Controller Framework wie Apache Struts erzielt werden.

<html>
  <body>
    <% for( int i = 0; i &lt; 10; i++) { %>
        <%=i%>
        <br/>
    <% } %>
  </body>
</html>
        

Beispiel 2: Einfache JSP Seite

eXtensible Server Pages XSP

XSP Seiten sind im Gegensatz zu normalen Server Pages XML Dokumente. In der XSP Seite kann anstatt von HTML Markup, eine Abstraktion in Form von selbstdefinierten Tags verwendet werden. Diese Tags können später an zentraler Stelle in HTML, WML oder PDF umgewandelt werden. Eine XSP Seite ist durch diese Trennung übersichtlicher und leichter zu warten.

XSP kann zusammen mit Helper Klassen, Tablibs und MVC Frameworks eingesetzt werden.

<?xml version="1.0"?>
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp">
    <page>
        Jetzt ist es:
        <xsp:expr>new Date()</xsp:expr>
        <xsp:logic>
            for( int i = 1; i &amp;lt; 10; i++) {
            <zahl>
                <xsp:expr>i</xsp:expr>
            </zahl>
            }
        </xsp:logic>
    </page>
</xsp:page>

Beispiel 3: Einfache XSP Seite

Model View Controller MVC

Die Idee des MVC Musters ist die Trennung von Anzeige (View), Daten (Model) und der Steuerung (Controller). Viele MVC Frameworks verwenden ein zentrales Servlet, den Front Controller, welches alle Anfragen entgegen nimmt. Der Front Controller ruft die zu einer Seite gehörende Funktionalität auf und übergibt schließlich an eine Server Page, die die Aufgabe des Views übernimmt.

Ein MVC Framework kann man selbst implementieren oder auf ein fertiges zurückgreifen. Für JSP steht beispielsweise Struts von der Apache Software Foundation zur Verfügung. Für XSP kann man das Framework Cocoon einsetzen, welches von sich aus Unterstützung für Actions mitbringt, und selbst als Front Controller agiert.

Hierarchical Model View Controller HMVC

Beim hierarchischen MVC Ansatz gibt es wieder eine Aufteilung in Model View und Controller. Eine Web Seite kann ähnlich einer konventionellen GUI aus einzelnen Komponenten zusammengesetzt werden. Diese Komponenten können eine Hierarchie bilden. Eine Seite dient als Top Level Container und nimmt weitere Container und Panels auf. Beispielsweise eine Navigationsleiste. Die Navigationsleiste kann wiederum Komponenten in Form von Links und Schaltflächen besitzen. Ereignisse, wie der Klick auf einen Link, werden vom Controller der entsprechenden Komponente verarbeitet oder, falls die Komponente für dieses Ereignis nicht zuständig ist, an die nächst höhere Stufe in der Hierarchie weitergeleitet. In unserem Beispiel an das Panel mit der Navigationsleiste.

Diese Art der Webentwicklung abstrahiert stark von den technischen Gegebenheiten einer Web Anwendung. Der Entwickler muß sich nicht direk mit Sessions, Requests und HTML herumschlagen. Die Entwicklung erfolgt ähnlich der Entwicklung einer normalen graphischen Oberfläche mit einem GUI Framework wie Swing.

Was verwenden?

Folgende Faktoren sollte man bei Auswahl der richtigen Technologien einbeziehen:

Die folgende Tabelle stellt die Technologien nochmals gegenüber:

ServletJSPXSPMVCH-MVC
Kompexitätmittelniedrighochhochsehr hoch
Abstraktionsgradniedrigmittelhochhochsehr hoch
Reifehochhochmittelmittelniedrig
Performancehochhochmittel - schlechtmittelmittel
Anbindung von Backend Systemen überAPIsTaglibTaglibModelModel
StandardisierungFinale SpezifikationFinale Spezifikation--sehr frühe Phase
Typische AnwendungUpload, Front Controller für MVCMultichannel AnwendungenFrontend für große mehrschichtige Anwendung
Notwendige SkillsHTML, HTTP, JavaHTML, (Java)XML, XSLT, (Java)HTML oder XML, JavaJava
Einstiegshürdemittelniedrighochhochhoch
Produktivitätgeringmittelhochhochhoch

Fazit

Mit den Server Pages hat ein Trend eingesetzt, der den Programmierer von Web Anwendungen zunehmend von den low level Details befreit. Mit Hilfe von Tag Bibliotheken kann man mit Server Pages fast ohne HTML Kenntnisse entwickeln.

Zunehmend wird in Web Projekten eine Trennung von HTML und Logik durch die Verwendung von XML und XSLT vorgenommen. Die Trennung kann durch die Kombination eines Servlets mit einem XSLT Prozessor oder durch ein Framework realisiert werden. Ein Beispiel für ein Web Development Framework ist der Apache Cocoon mit XSP Unterstützung.

Zusammen mit graphischen GUI Editoren versprechen die hierarchischen Model View Controller HMVC Frameworks eine hohe Produktivität und eine saubere Trennung von Präsentation, Daten und Logik. Die Kombination von XSLT Filtern und HMVC Frameworks kann die Vorteile beider Ansätze vereinen.

Referenzen

Servlet und JSP

Java Servlet Technologie Sun Microsystems

JavaServer Pages Sun Microsystems

XSP

Cocoon 2 Open Source Web Publishing Framework Apache Cocoon 2

MVC

Struts MVC Framework bei Jakarta

Hierarchical MVC

Expresso Web Application Development Framework

HMVC: The layered pattern for developing strong client tiers Artikel bei JavaWorld

Java Server Faces JSR 127 von Sun

Scope Open Source Implementation des Hierarchical Model-View-Controller (HMVC) Design Pattern

Tapestry Komponenten basiertes Web Anwendungs Framework

WebWork Pull HMVC Framework

Zum Geschaeftsbreich Competence Center
Schulung
Seminare zur Web Entwicklung: