85-97 MVC Seiler.Indd
Total Page:16
File Type:pdf, Size:1020Kb
web apps ZK, Struts und JSF ZK vs. Struts vs. JSF – ein Erfahrungsbericht Auf welches Pferd setzen Sie? VON DANIEL SEILER Als Entwickler Java-basierender Webanwendungen steht man seit jeher vor der Entscheidung: welches Framework passt am besten zu meinen Zwecken? Soll man auf ein altbewährtes Model-View-Controllver-Framework à la Struts setzen, oder sich schon den moderneren JavaServer Faces (JSF) zuwenden? Oder möchte man gar auf der aktu- ellen Web 2.0-Welle mitreiten und ganz neue Wege gehen? Viele Unternehmen haben in den letzten an die Entwickler in überschaubarem fache und selbstverständliche Funktionen Jahren zur Entwicklung der internen, Rahmen bleiben. HTML, JavaScript, wie sortierbare Tabellen oder das Verteilen webbasierten Geschäftsapplikationen CSS, Java, JSP und verschiedene Tag- von großen Tabellen auf mehrere Seiten, meist auf Struts-basierende Model-View- Bibliotheken gilt es zu beherrschen, um der genannt ‚Paging‘, erweisen sich häufi g als Controller-Frameworks gesetzt. Das so Aufgabe, eine ansprechende Benutzerober- zeitaufwändige Probleme, die jedes Mal zum defacto Standard avancierte Struts fl äche zu entwickeln, gewachsen zu sein. von Neuem gelöst werden müssen. gewährleistet dabei eine konsistente Ar- Der Anspruch der Benutzer auf Inter- So steht mit den Java Server Faces (JSF) chitektur und sorgt für ein akzeptables aktivität und ein professionelles Erschei- seit 2004 ein Standard zur Verfügung, der Maß an Wartbarkeit. Dieser Ansatz funk- nungsbild geht dabei meist zulasten der die Web-Entwicklung unter Jav a auf ein tioniert soweit ganz gut, wenn auch die Wartbarkeit der JSP-Seiten und auch die nächst höheres Level heben soll und die Komplexität der Benutzeroberfl äche und Produktivität in der Entwicklung lässt mittlerweile bekannten Schwachpunkte die damit verbundenen Anforderungen häufi g zu wünschen übrig. Scheinbar ein- von Struts ausmerzen. Und gerade im www.javamagazin.de 10.2007 85 web apps ZK, Struts und JSF können, habe ich mir folgende Rahmen- bedingungen auferlegt: 1. Es soll jeweils dieselbe Architektur ver- wendet werden. 2. Code, welcher nicht zur Präsentations- schicht gehört, soll von allen drei Fra- meworks gemeinsam genutzt werden. 3. Es soll keine Zeit in das Verschönern der Benutzeroberfläche investiert werden. 4. Es soll für die Implementierung bei je- Abb. 1: Architektur der Beispielapplikation dem Framework in etwa gleichviel Zeit investiert werden. &VSPQBTHSzUF4FDPOE-JGF,POGFSFO[ Kontext des aktuellen Web 2.0-Hypes ist und ZK. Es ist auch kein Tutorial, wie die Diskussion um das beste und wahre man Applikationen mit Struts, JSF oder Architektur VOE/PWFNCFS'PSVNBN%FVUTDIFO.VTFVN .ODIFO Framework zur Entwicklung von Java ZK entwickelt. Das Ziel dieses Artikels In der Praxis hat sich der Model-View- Web-Applikationen neu entbrannt. Das ist es, anhand einer einfachen, aber aussa- Controller (MVC)-Ansatz bewährt und Ziel dabei ist, die Entwicklung solcher gekräftigen Beispielapplikation, Stärken, soll daher als Architektur für alle drei Applikationen weiter zu vereinfachen Schwächen und Potenzial der ausgewähl- Frameworks zum Einsatz kommen. Da- und das Benutzererlebnis zu steigern. ten Frameworks zu beleuchten. bei beschreibt das Modell die Geschäfts- Als Entwickler oder Technologieve- objekte und die Geschäftslogik, die View rantwortlicher von webbasierten Java- Funktionalität der Beispielapplikation präsentiert dem Benutzer das Formular Anwendungen steht man also vor der Wie oben erwähnt, soll die Beispielappli- und die Daten, während der Kontroller schwierigen Entscheidung, auf welches kation die wichtigsten Elemente einer sich um die korrekte Verarbeitung der Be- Framework-Pferd man im nächsten ausgewachsenen Geschäftsapplikation nutzereingaben kümmert (Abb. 1). Projekt setzen soll. Welche Webtechno- enthalten. In der Praxis hat sich gezeigt, Die Daten, die der Benutzer in die For- logien werden sich in Zukunft durchset- dass sehr oft die Hauptaufgabe solcher mularmaske eingibt, werden an den Con- zen? Sind es die Java Server Faces, JBoss Applikationen darin besteht, Daten in troller geschickt. Dieser extrahiert und va- Seam, Grails, Laszlo, Dojo, DWR, Google strukturierter Form zu erfassen, abzu- lidiert die Formulardaten und aktualisiert Web Toolkit, ICEFaces, Ajax4JSF, Spring speichern und wieder darzustellen. Dies das Modell der Applikation. In unserem MVC, Struts, ZK etc. oder eine Kombina- ist daher genau die Funktionalität, die un- Fall besteht das Modell, das von allen drei tion aus den verschiedenen Ansätzen? ser Beispiel abdecken sollte. Frameworks gemeinsam genutzt wird, Um dieser Frage nachzugehen, habe Dem Benutzer wird ein Formular ange- aus einem einfachen Personen-Objekt ich beschlossen, eine möglichst einfache zeigt, auf dem er Personendaten wie Vorna- (Listing 1). Beispielapplikation, die dennoch die me, Nachname etc. eingeben kann. Sobald wichtigsten Elemente einer ausgewach- er auf Submit drückt, werden die Daten an Struts #FJBONFMEVOH senen Geschäftsapplikation enthält, mit den Server übermittelt und an ein ‚Data Struts ist das ‚Urgestein‘ der drei Fra- CJT[VN4FQUFNCFS drei verschiedenen Frameworks – ZK, Access Object‘ (DAO) übergeben, welches meworks. Die Grundidee von Struts ist LzOOFOTJF Struts und JSF – zu entwickeln. das Speichern der Daten in eine Datenbank einfach: Ein zentrales Action-Servlet Verschiedene Gründe haben zu dieser simuliert. Als Resultat wird dem Benutzer empfängt die Http-Requests des Benut- TQBSFO Wahl beigetragen: So ist ZK konsequent die aktuelle Liste der gespeicherten Per- zers, füllt, falls gewünscht, automatisch komponentenorientiert und beinhaltet sonen in Form einer Tabelle angezeigt. die Formulardaten in ein entsprechendes eine große Anzahl von Standardkom- Was zeigt uns dieses Beispiel? Zum Action-Form Objekt ab und leitet die ponenten. ZK verfügt über eine über- einen werden verschiedene Standard- Anfrage an ein spezifisches Struts- durchschnittlich umfangreiche Doku- Formularkomponenten benutzt, wie z.B. Action-Objekt weiter. Dieses Action- mentation, ist Open Source und wird Textfeld, Datumsfeld, Checkbox, Select- Objekt erfüllt die Rolle des Controllers, #64*/&44 5&$)/*, $0..6/*5: auf Sourceforge aktiv weiterentwickelt. box und Radiobuttons. Zum anderen indem es die im Form-Objekt gespei- 53"$, 53"$, 53"$, Ebenfalls für ZK spricht das durchdachte, wird das Übermitteln und wieder Anzei- cherten Daten in das entsprechende serverseitige Modell und die Tatsache, gen der Formulardaten sowie das Aufbau- Personen-Objekt abfüllt, die Liste mit 'S1SPHSBNNJFSFS (FTUBMUFSVOE$POUFOU dass die zur Darstellung verwendeten en und Aktualisieren einer Tabelle mit den allen Personen-Objekten aktualisiert 'S.BSLFUJOH&OUTDIFJEFS EJFFJO &OHBHFNFOUJO4FDPOE-JGFQMBOFO $SFBUFS-FSOFO4JFEJFHFTBNUF1BMFUUFEFS %BT'PSVNGSBMMFOJDIULPNNFS[JFMMFO ZUL-Seiten auf dem XML User Interface Resultaten demonstriert. und anschließend die JSP aufruft, die zur PEFSBVTCBVFOXPMMFO *OHBNF(FTUBMUVOHTNzHMJDILFJUFOLFOOFO 4FDPOE-JGF/VU[FS Language (XUL) Standard basieren. Darstellung des Formulars und der Liste Der folgende Artikel erhebt nicht den Rahmenbedingungen mit den Personendaten bestimmt ist. Die Anspruch einer kompletten Analyse der Um die verschiedenen Frameworks auch Entwicklung der Beispielapplikation mit drei Frameworks Struts, Apache MyFaces möglichst aussagekräftig vergleichen zu Struts ist schnell und einfach zu realisie- XXXNFUBWFSTFDPN 7FSBOTUBMUFS *OJUJBUPS .FEJB1BSUOFS 86 10.2007 www.javamagazin.de "ONFMEFGPSNVMBS web apps ZK, Struts und JSF $POGFSFODF4QFDJBMT &BSMZ#JSECFJ"ONFMEVOHCJT[VN4FQUFNCFS ren. Es werden dabei folgende Kompo- falls noch erstellt werden muss, ist die in ein PersonBean-Objekt kopieren. Dies 4QFDJBM1SFJTFGSEJF$PNNVOJUZ nenten entwickelt: struts-config.xml-Datei, welche die De- geschieht mithilfe der Jakarta Commons Der Controller, vertreten durch die finitionen der Struts-Actions, der Struts- BeanUtils Bibliothek durch folgenden Auf- SimpleAction-Java-Klasse (Listing 2), die Forms sowie die Navigationsregeln ent- ruf: SimpleForm-Klasse, die hier nicht abgebil- hält. ,POGFSFO[ &BSMZ#JSE 4UBOEBSE (MFJDIQFS'"9BO det ist, da sie nur alle Felder des Formulars Man beachte, dass die Formularda- BeanUtils.copyProperties(personBean,form); ° ° und die dazugehörigen Getter- und Set- ten automatisch von Struts in die Simple- #VTJOFTT .P °%J ter-Methoden enthält sowie die JSP-Seite Action-Form abgefüllt werden. Man Das gefüllte PersonBean-Objekt wird 5FDIOJL .P °%J ° ° simple.jsp als View (Listing 3). Was eben- muss jetzt allerdings noch die Formdaten dann an das Data Access-Objekt überge- #VTJOFTT .P ° ° 1FS1PTUBO Listing 1 4PGUXBSF4VQQPSU #VTJOFTT %J ° ° 7FSMBH(NC) PersonBean.java 5FDIOJL .P ° ° Ã.FUBWFSTF² package com.ebpm.webdemo.common; return birthdate; this.married = married; (FMFJUTTUSBF } } 5FDIOJL %J ° ° 'SBOLGVSUBN.BJO import java.util.Date; public void setBirthdate(Date birthdate) { public float getWeight() { this.birthdate = birthdate; return weight; 0IOF .JU public class PersonBean { } } $PNNVOJUZ 7FSQGMFHVOH 7FSQGMFHVOH 0EFSPOMJOF private String firstname; public String getFirstname() { public void setWeight(float weight) { ° ° 5FJMOBINFBN.POUBH XXXNFUBWFSTFDPN private String lastname; return firstname; this.weight = weight; private String address; } } ° ° 5FJMOBINFBN%JFOTUBH private String color; public void setFirstname(String firstname) { public String getColor() { "MMF1SFJTF[[HM.X4U private Date birthdate; this.firstname = firstname; return color; 5FJMOBINFBO#VTJOFTT°