Wicket: Komponentenbasiert und objektorientiert - das alternative Java-Webframework
By Jochen Mader
()
About this ebook
Ziel dieses Buchs ist es, die grundlegenden Konzepte von Wicket zu vermitteln und im weiteren Verlauf auf fortgeschrittene Aspekte einzugehen. Hierzu wird eine Beispielanwendung entwickelt und Schritt für Schritt erweitert. Anhand detaillierte Codebeispiele werden Sachverhalte wie der Wicket Request Cycle, Models, Validierung und JUnit Testing erklärt. Des Weiteren werden Themen wie Deplyoment-Szenarien (JEE6, Beanstalk, ...) , jQuery-Integration und Performance-Tuning in separaten Kapiteln behandelt. Durch Studium dieses Buchs soll ein Entwickler befähigt werden, skalierbare, wartbare Webanwendungen in Wicket zu bauen, und er soll lernen, eigene, wiederverwendbare Komponenten zu entwickeln und fremde Komponenten zu erweitern.
Related to Wicket
Related ebooks
HTML5, JavaScript und jQuery: Der Crashkurs für Softwareentwickler Rating: 2 out of 5 stars2/5OpenLaszlo: schnell + kompakt Rating: 0 out of 5 stars0 ratingsjQuery Mobile: Einfach mobile Web-Apps entwickeln Rating: 0 out of 5 stars0 ratingsDurchstarten mit React: Web-Apps einfach und modular entwickeln Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsDatenbankentwicklung lernen mit SQL Server 2022: Der praxisorientierte Grundkurs – auch für SQL Server Express Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsSilverlight 2.0: schnell + kompakt Rating: 0 out of 5 stars0 ratingsMicrosoft AJAX: AJAX Libary, ASP .NET 2.0 Extensions, AJAX Control Toolkit Rating: 0 out of 5 stars0 ratingsDocker und die Containerwelt: Einstieg und Expertentipps rund um Docker-Container Rating: 1 out of 5 stars1/5Software Development Trends: Wegweisende Beiträge für eine neue IT: Wegweisende Beiträge für eine neue IT Rating: 0 out of 5 stars0 ratingsSemantic Web: schnell + kompakt Rating: 0 out of 5 stars0 ratingsSingle-Page-Web-Apps: JavaScript im Einsatz: Webseiten erstellen mit AngularJS, Meteor und jQuery Mobile Rating: 0 out of 5 stars0 ratingsDocker: Software entwickeln und deployen mit Containern Rating: 0 out of 5 stars0 ratingsMicroservices: Grundlagen flexibler Softwarearchitekturen Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsjQuery Mobile - Basics: Basics Rating: 0 out of 5 stars0 ratingsWebanwendungen erstellen mit Vue.js: MVVM-Muster für konventionelle und Single-Page-Webseiten Rating: 0 out of 5 stars0 ratingsJoomla!-Extensions entwickeln: Eigene Komponenten, Module und Plugins programmieren Rating: 0 out of 5 stars0 ratingsWebtechnologien - All in One: Eine praxisorientierte Einführung in moderne Webtechnologien Rating: 0 out of 5 stars0 ratingsJavaFX Rendering & 3D Rating: 0 out of 5 stars0 ratingsLanglebige Software-Architekturen: Technische Schulden analysieren, begrenzen und abbauen Rating: 0 out of 5 stars0 ratingsKubernetes: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsGraphQL: Eine Einführung in APIs mit GraphQL Rating: 0 out of 5 stars0 ratingsEinblicke in C# 6.0 Rating: 0 out of 5 stars0 ratingsVue.js für alle: Wissenswertes für Einsteiger und Experten Rating: 0 out of 5 stars0 ratingsDas Microservices-Praxisbuch: Grundlagen, Konzepte und Rezepte Rating: 0 out of 5 stars0 ratingsREST und HTTP: Entwicklung und Integration nach dem Architekturstil des Web Rating: 5 out of 5 stars5/5Cross-Plattform-Entwicklung mit HTML und JavaScript Rating: 0 out of 5 stars0 ratings
Programming For You
Algorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsProgrammieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5Programmieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsJavaScript kurz & gut Rating: 3 out of 5 stars3/5Python kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Programmieren für Einsteiger: Teil 2 Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsGit kurz & gut Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Arduino: Ein schneller Einstieg in die Microcontroller-Entwicklung Rating: 5 out of 5 stars5/5Mikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsWeniger schlecht programmieren Rating: 4 out of 5 stars4/5Linux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5Microsoft Word 2016 (Microsoft Press): Einfache Anleitungen für wichtige Aufgaben Rating: 0 out of 5 stars0 ratingsSQL – kurz & gut Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5HTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Rating: 0 out of 5 stars0 ratingsPython-Grundlagen Rating: 0 out of 5 stars0 ratingsJavaScript kinderleicht!: Einfach programmieren lernen mit der Sprache des Web Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Mega 2560: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratings
Reviews for Wicket
0 ratings0 reviews
Book preview
Wicket - Jochen Mader
Impressum
Jochen Mader
Wicket
ISBN: 978-3-86802-605-4
© 2012 entwickler.press
Ein Imprint der Software & Support Media GmbH
Bibliografische Information Der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen
Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über
http://dnb.ddb.de abrufbar.
Ihr Kontakt zum Verlag und Lektorat:
Software & Support Media GmbH
entwickler.press
Darmstädter Landstr. 108
60598 Frankfurt am Main
Tel.: +49 (0)69 630089-0
Fax: +49 (0)69 930089-89
lektorat@entwickler-press.de
http://www.entwickler-press.de
Lektorat: Sebastian Burkart
Korrektorat: Katharina Klassen
Satz: Dominique Kalbassi
Umschlaggestaltung: Maria Rudi und Laura Kessler
Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder anderen Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.
Für Moni, die Liebe meines Lebens.
Vorwort
WICKET
Als Wicket wird im Cricket die aus drei Stäben (Stumps) und zwei Querstäben (Bails) bestehende Holzkonstruktion bezeichnet. An jedem Ende der Pitch befindet sich ein solches Wicket. Der Schlagmann (Batsman) verteidigt es mit seinem Schläger vor dem vom Werfer (Bowler) geworfenen Ball.¹
Als Wicket wird auch ein Webframework bezeichnet, das geschundene Entwicklerseelen wieder an einen höheren Entwickler glauben lässt.
Nach mehreren Jahren Webentwicklung mit verschiedenen Webframeworks von Struts bis Spring MVC verabschiedete ich mich lange Zeit in Richtung Middleware. Durch den Wechsel zu meinem aktuellen Arbeitgeber wurde ich aus meiner heilen, objektorientierten Welt gerissen und landete wieder im Web. Ich muss zugeben, Freude sah anders aus. Der Projektleiter schwärmte von diesem neuen Framework namens Wicket und davon, wie es die Entwicklung von Webanwendungen radikal vereinfacht hätte. Als jemand, bei dem Kämpfe mit Struts mehr als eine Narbe hinterlassen hatten, war ich äußerst, nennen wir es, vorsichtig. Schließlich hatte ich kurz zuvor einen ersten Kontakt mit JSF ...
Wie immer bei einem neuen Framework wurde ich in den ersten Wochen sehr positiv von Wickets Eigenschaften überrascht. Normalerweise folgt auf diese anfängliche Begeisterung eine Phase der Ernüchterung. Jetzt, zweieinhalb Jahre später, warte ich immer noch auf diesen Moment.
Ich möchte nicht behaupten, Wicket wäre einfach. Die Lernkurve kann durchaus frustrierend sein, schließlich wird hier so einiges anders gemacht als bei der Konkurrenz. Wer es allerdings schafft, sich von Konzepten der klassischen Java-Webentwicklung zu lösen, wird seinen Spaß haben. Ich hoffe, mit diesem Buch genau diesen Spaß an andere Entwickler weiterzugeben und zu zeigen, wie sich selbst komplexeste Anforderungen mit Wicket elegant umsetzen lassen.
Danksagung
Zuerst möchte ich mich bei meiner Frau Moni und meinem Sohn Henryk bedanken. Ihre Leidensfähigkeit und Unterstützung in einer sehr stressigen Zeit haben das Buch überhaupt erst möglich gemacht. Des Weiteren möchte ich dem Team von entwickler.press und Jörg Liedl für ihre Unterstützung bei der Entstehung des Buchs danken.
Beinahe hätte ich meinen guten Freund C8H10N4O2 vergessen. Ohne dich wäre der Tag nur halb so lang.
1 http://de.wikipedia.org/wiki/Wicket
2 http://de.wikipedia.org/wiki/Wicket
1 Apache Wicket
Nachdem klar sein dürfte, dass es in diesem Buch nicht um eine exotische Sportart aus dem britischen Commonwealth geht, sondern um ein äußerst beliebtes Open-Source-Webframework, wird es Zeit, das Thema etwas näher zu betrachten.
1.1 Wicket-Steckbrief
Wicket entstand im Jahr 2004 und wurde von Jonathan Locke und Miko Matsumura entworfen. Ziel war es, ein komponentenbasiertes Framework auf Basis des MVC Patterns und starker Integration mit Java-Konzepten zu entwickeln. Man wollte die Webentwicklung näher an den Java-Entwickler heranbringen und sie stärker an objektorientierte Prinzipien binden, als es andere Frameworks bisher taten. Als geistiger Vater von Wicket kann Apache Tapestry angesehen werden, das bereits viele der von Wicket benutzten Features bot. Zusammen mit Tapestry bildet Wicket eine eigene Gruppe von Webframeworks, die sich deutlich von der etablierten Konkurrenz abhebt. Einige von Wickets wichtigen Features sind folgende:
Verzicht auf eine eigene Markup-Sprache
Verzicht auf XML-Konfigurationsdateien
Alle Optionen des Frameworks sind mit sinnvollen Defaults vorbelegt und können im Bedarfsfall über das API geändert werden
Strikte Trennung von Markup und Code
Alle Bereiche des Frameworks sind erweiterbar
Konzentriert sich stark an Konzepten der Rich-Client-Entwicklung à la Eclipse
Man wird in dieser Liste keine wirklich neuen Ideen finden. Wie aber schon bei Ruby on Rails machen hier das gute API und die Integration bereits existierender Konzepte die eigentliche Innovation aus.
1.1.1 Community
Neben der Qualität ist der wichtigste Erfolgsfaktor einer Open-Source-Software die Community. Jedem Wicket-Entwickler kann ich nur empfehlen, sich als Mitglied in der Mailinglist users@wicket.apache.org anzumelden. Die Liste ist sehr aktiv, Fragen werden schnell beantwortet und es besteht ein konstanter Zufluss an neuen Ideen. Wer teilnehmen oder einen Fehler melden möchte, sollte unbedingt die Erzeugung von Quickstart-Applikationen erlernen und eventuelle Probleme dort nachstellen.
1.2 Aufbau des Buchs
Im Moment befindest du dich im ersten von vier Teilen. Zu Beginn werde ich eine Einführung und einen Überblick der Webentwicklung in den letzten Jahren geben. Außerdem werden die wichtigsten Technologien und die mit ihnen verbundenen Herausforderungen vorgestellt. Abschließend gibt es einen kleinen Wicket-Quickstart für die Ungeduldigen. Die weiteren Teile sind folgende:
Aufbau (Kapitel 5 bis 15): Hier werde ich den grundsätzlichen Aufbau von Wicket und seine wichtigsten Konzepte erklären. Die einzelnen Kapitel sind in sich geschlossen und sollen als Referenz für die weiteren Kapitel verwendet werden.
Integration (Kapitel 16 bis 18): Als Unmanaged Framework setzt Wicket kein spezielles Framework für seine Nutzung voraus. In diesem Bereich werden die wichtigsten Verwendungsszenarien vorgestellt und mit Beispielen erklärt.
Applikation (Kapitel 19 bis 26): Dieser Bereich bildet den Abschluss des Buchs. Ziel ist es, eine Applikation, basierend auf den Erkenntnissen aus den vorherigen Bereichen, zu entwickeln. Dabei werden vor allem die verschiedenen von Wicket mitgelieferten Komponenten und ihre Verwendung und Erweiterung erklärt.
Alle Kapitel werden von Codebeispielen begleitet, deren aktuellste Version auf GitHub verfügbar ist:
Codebeispiele für Teil 2 und 3:https://github.com/codepitbull/wicket-buch
Demoapplikation für Teil 4: https://github.com/codepitbull/widone
1.3 Version
Für dieses Buch wird Version 1.5 des Wicket-Frameworks verwendet. Diese Version ist nicht mit 1.4 kompatibel, da sich einige Bereiche des API stark geändert haben und Deprecations entfernt wurden. Alle Beispiele setzen auf der zur Drucklage des Buchs aktuellsten Version auf und werden konstant weitergepflegt.
2 Technologien des Webs
Gemeinhin werden HTML, CSS und JavaScript als die wichtigsten Bausteine von Webanwendungen bezeichnet (früher wurde auch Flash dazugerechnet). Allerdings haben sich Webanwendungen in den letzten zehn Jahren drastisch verändert. Der Fokus hat sich von der Auslieferung statischer Inhalte immer stärker auf dynamische Inhalte und Anwendungen im Stile des klassischen Desktops verschoben. Besonders das Zusammenspiel von AJAX und HTTP wurde immer wichtiger. Im Folgenden werden sie deshalb genauer betrachtet.
2.1 HTTP
Jede Veröffentlichung zum Thema Webframeworks liefert zumindest ein kurzes Kapitel zu HTTP. Das Hyper Text Transfer Protocol ist das wohl am häufigsten missverstandene Protokoll im OSI Model. Wo TCP/IP und UDP als die großen Helden dastehen, liest man über HTTP nur lange Ausführungen über seine Unzulänglichkeiten. Erst in den letzten Jahren wurde vielen Entwicklern bewusst, welch mächtiges und robustes Werkzeug sie da eigentlich haben. RESTful Web Services haben nach Jahrzehnten von SOAP-Irrwegen einen wichtigen Teil zum Umdenken beigetragen. Auf einmal ist es schick, alles am Server als Ressource zu betrachten und allein mit den elementaren CRUD-Operationen (create, retrieve, update, delete) jene Anwendungsfälle abzubilden, die man zuvor mit überspezifizierten SOAP-Services umgesetzt hatte. Was hat das alles nun mit Wicket zu tun?
Wer Webapplikationen entwickeln will, muss die Eigenschaften dieses Protokolls verstehen. Ohne dieses Verständnis werden einem Entwickler Themen wie AJAX für immer ein Buch mit sieben Siegeln bleiben. Man muss nicht erst in die Welt des Web 2.0 gehen, um auf Probleme zu stoßen, die sich nur mit einem guten Verständnis des Protokolls lösen lassen. Wie geht man zum Beispiel mit dem mehrfachen Drücken des Submit-Buttons um? Wozu brauche ich Sessions? Bevor ich diese Fragen beantworte, möchte ich auf die wichtigsten Details von HTTP eingehen. Alles, was man darüber wissen muss, steht in RFC 2616, Kapitel 8. Dort werden die verfügbaren Methoden in ihrer Funktion beschrieben.
Tabelle 2.1: HTTP-Methoden
Zu den Methoden gibt es eine Liste möglicher Antwortcodes.
Tabelle 2.2: HTTP-Antworten
Am Anfang des Kapitels habe ich von CRUD und Ressourcen gesprochen. Beim Betrachten der Methoden wird einem klar, weshalb REST genau auf diese Begriffe abzielt. HTTP ist ein ressourcenorientiertes Protokoll. Alle Operationen haben etwas mit Ressourcen-Manipulation zu tun. Wie hilft uns das bei dem Problem des Mehrfach-Submits?
Ein User drückt ungeduldig auf den Submit-Button oder macht einen Refresh im Browser. Der Browser verhält sich so, wie er soll. Er bekommt die Anweisung, alles nochmal und nochmal zu verschicken. Dabei stößt er jedes Mal die Verarbeitung des Requests an, ohne aber das endgültige Laden der Antwort abzuwarten. Das Ziel der POST-Methode bekommt also immer wieder die gleiche Anfrage geschickt und tut auch genau das, was es soll:
Die Anfrage verarbeiten
Eine Antwort vorbereiten und zurückschicken
Man begann, nach Möglichkeiten zu suchen, dieses Verhalten zu verhindern. Es wurden versteckte Parameter mit Seriennummern eingeführt oder Java-Skripte zum Blockieren des Submit-Buttons entwickelt. Allerdings lässt sich das Problem auf einfachste Art auf Protokollebene lösen. Das Pattern hierfür heißt Post Redirect Get (PRG). Auf einen POST Request sendet der Server eine Antwort mit dem Code 303 (See Other) und leitet den Client auf eine andere Seite weiter. Alle Browser reagieren, wie es der Standard verlangt. Sie folgen dem Redirect und laden die Antwort auf den POST Request via GET von der angegebenen Zieladresse.
Bevor sie nun fortfahren, dieses Buch zu lesen, schlage ich vor, sich mit den Elementaroperationen des HTTP-Protokolls zu beschäftigen. In meinen Augen ist das eine wunderbare Gelegenheit, sich JAX-RS herunterzuladen und damit zu experimentieren.
2.2 AJAX
Ohne AJAX wäre das Web 2.0 nie zu dem Erfolg geworden, der es heute ist. Plötzlich war es möglich, Anwendungen zu schreiben, die deutlich näher an ihren Desktopgegenstücken waren als die Produkte der .COM-Blase. Ganze Office Suites und Mail-Programme wurden zu einer ernsthaften Konkurrenz für den klassischen Desktop. All das ist wieder mal der Verknüpfung bereits existierender Technologien zu verdanken.
Die Bezeichnung Asynchronous JavaScript and XML (AJAX¹) wurde im Jahr 2005 von Jesse James Garrett in seinem Artikel „Ajax: A New Approach to Web Applications" geprägt. Er war zwar nicht der Erfinder der Idee hinter AJAX, aber als Namensgeber wird er wohl für immer in den Geschichtswikis stehen. Tatsächlich wurde die AJAX-Grundidee bereits in den 1990er Jahren von Microsoft entwickelt und sogleich patentiert. Damals wurden IFrames genutzt, um per JavaScript nachgeladene Informationen dynamisch in Webpräsenzen darzustellen. Heute nutzt man statt IFrames die Möglichkeit, per JavaScript den DOM-Baum von HTML-Seiten zu verändern, und statt diverser Eigenimplementierungen kann man heute XMLHttpRequest zur Übertragung der Daten nutzen. Was AJAX