JavaServer Faces

Werbung
Java Server Faces (JSF)
Seminararbeit WS2009/10
Von Mohamed Sabbar
Email: [email protected]
Hochschule Rhein-Main
Studiengang: Medieninformatik
Betreuender Professor: Prof. Dr. Karl-Otto Linn
Wiesbaden, 25.02.2010
JavaServer Faces
25. Februar 2010
Inhaltsverzeichnis
0 Abbildungs- und Tabellenverzeichnis ........................................................................................ 3
1 Vorwort ...................................................................................................................................... 4
2 JavaServer Faces Einführung ...................................................................................................... 4
2.1 Kurzgeschichte der Web-Entwicklung ................................................................................ 5
2.2 Einführung in Java Service Pages (JSP) ................................................................................ 6
3 Model View Controller (MVC) .................................................................................................... 7
4 Die Java Server Faces Technologie............................................................................................. 8
4.1 Die Strukturen von JSF Anwendungen ............................................................................. 10
5 Lebenszyklus einer JSF Anwendung ......................................................................................... 11
5.1 Erzeugung/Wiederherstellung des Komponentenbaums ................................................ 11
5.2 Übernahme der Anfragewerte.......................................................................................... 11
5.3 Validierung/Konvertierung ............................................................................................... 12
5.4 Aktualisierung der Modellobjekte .................................................................................... 12
5.5 Aufruf der Anwendungslogik ............................................................................................ 12
5.6 Rendern der Antwort ........................................................................................................ 12
6 Java Server Faces Komponenten ............................................................................................. 13
6.1 Java Server Faces Tag Libraries ......................................................................................... 13
6.2 Validation .......................................................................................................................... 15
7 Fazit .......................................................................................................................................... 16
8 Literaturverzeichnis ................................................................................................................. 17
9 Online Quellen ......................................................................................................................... 17
Seite 2
JavaServer Faces
25. Februar 2010
0 Abbildungs- und Tabellenverzeichnis
Abb.1: Servlet mit Get-Methode
Abb.2: Beispiel für JSP
Abb.3: Web-Framework mit verschiedenen Zuständigkeitsbereichen
Abb.4: Das Model-Prinzip basiert auf JSF
Abb.5: Die Konfigurationsdatei facex-config.xml
Abb.6: Lebenszyklus einer JSF Anfrage
Abb.7: Beispiel einer JSF Seite mit Tag Libraries
Abb.8: Komponenten und ihre Darstellung
Abb.9: Validate_longrange Tag im Beispiel
Seite 3
JavaServer Faces
25. Februar 2010
1 Vorwort
Die Technologie Java Server Faces ist ein modernes Framework zur Entwicklung von
Benutzeroberflächen für webbasierte Anwendungen. Die Möglichkeiten, die diese
Technologie bietet, sind sehr umfangreich und können daher im Rahmen dieser
Ausarbeitung nicht bis ins Detail erläutert werden.
Die Arbeit soll vielmehr eine Einführung in das Framework Java Server Faces geben.
Insbesondere sollen auch die Konzepte hinter dieser Technologie beleuchtet werden.
Weiterhin werden die Funktionalitäten und die wichtigsten Elemente vorgestellt. In
diesem Zusammenhang erhält der Leser zusätzlich einen Überblick über die
geschichtliche Entwicklung der Web-Technologien bis hin zur Einführung und
Umsetzung von Web-Anwendungen.
2 JavaServer Faces Einführung
Java Server Faces (JSF) ist eine Technologie zur Entwicklung von modernen WebAnwendungen. JSF basiert auf Servlets und der JSP-Technologie, die beide zu den
Webtechnologien der Java Plattform Enterprice Edition (Java EE) gehören. Mithilfe des
Frameworks (JSF) kann der Entwickler in einer einfachen Art und Weise Komponenten
für die Benutzerschnittstellen in der Web-Anwendung implementieren, wobei es
allerding dutzende Frameworks gibt, die der Entwicklung von Web- Anwendungen
dienen. Die Vielfalt der aktuell auf dem Markt existierenden Frameworks ist enorm.
Dabei gibt es allein im Java Bereich schon viele verschiedene Frameworks wie z.B.
Apache Struts oder Apache Coccon. Bereits Mitte der 90er Jahre wurden Technologien
zur Entwicklung von dynamischen Web Anwendungen bereitgestellt. Beispiele dafür
sind etwa JSP- und Servlet Technologien.
Im nächsten Kapitel soll ein kurzer Überblick über die geschichtliche Entwicklung der
Web-Programmierung gegeben werden. Dabei wird unter anderem aufgezeigt werden,
weshalb die Notwendigkeit für die Spezifikation der Java Server Faces-Technologie
bestand.
Seite 4
JavaServer Faces
25. Februar 2010
2.1 Kurzgeschichte der Web-Entwicklung
Der IBM Gründer Thomas J. Watson stellte zu Beginn des Computerzeitalters einmal
die Behauptung auf: „I think there is a world market for maybe five computers“. Damals
eine mutige Schätzung - heute aber weiß man, dass diese Prognose ein großer Irrtum
war. Die Nutzer können heute zu jedem Zeitpunkt und an jedem Ort mit InternetZugang auf Web Anwendungen zugreifen und die eigenen Bedürfnisse im World Wide
Web abdecken. Ganze Geschäftsprozesse werden im World Wide Web abgebildet.
Heute finden wir in fast jedem Haushalt Computer, die mit Millionen anderer Computer
vernetzt sind und mittlerweile eine Selbstverständlichkeit im Alltag darstellen. Die
Entwicklung zeigt, wie die Netzwerklandschaft zum globalen Dorf zusammen wächst.
Die Entwicklung begann im Jahr 1991 mit der Übertragung der ersten Seite in
Hypertext Markup Language (HTML). Zur damaligen Zeit waren nur die Wenigsten in
dem Glauben, dass das World Wide Web eine große Zukunft haben würde. Anfangs
konnte man einfache Webseiten mit HTML generieren, die hauptsächlich der
Informationsausgabe dienten. HTML wurde im Laufe des Jahres durch weitere
Elemente und Funktionalitäten ergänzt und stetig weiter entwickelt. Für die Erstellung
von dynamischen Elementen kam JavaScript als Client Lösung hinzu.
Zur selben Zeit entstanden auch im Server Bereich verschiedene Sprachen für
serverseitige Web-Entwicklung. Sprachen wie PHP, Python, Ruby oder auch Java
waren am Markt zu finden. Da die Komplexität der Anwendung immer größer wurde,
wurden im Laufe der Zeit immer mehr Sprachen und Technologien entwickelt. Die
Kreativität in der Entwicklung kannte keine Grenzen und die Ansprüche und
Bedürfnisse wurden immer größer.
Im Java Bereich wurde im Jahr 1997 die Servlet-Technologie zur Generierung von
dynamischen HTML Seiten am Server entwickelt. Ein Servlet ist eine Java Klasse, die
aus den Befehlen HTML erzeugt. In Abbildung 1 sehen wir beispielhaft ein einfaches
Servlet, das über die Get-Methode eine http-Anfrage behandelt.
Seite 5
JavaServer Faces
25. Februar 2010
Abb.1: Servlet mit Get-Methode
2.2 Einführung in Java Service Pages (JSP)
Die Servlets boten zwar einige Vorteile, waren jedoch anfangs noch mit mehreren
Problemen behaftet. So wird ein Servlet bei komplexen Web-Anwendungen schnell zu
unübersichtlich. Darüberhinaus liegt es nicht im Interesse des Entwicklers mittels Java
Code die Ausgabe zu implementieren. Um den genannten Problemen entgegen zu
wirken, wurde schließlich die JSP-Technologie entwickelt.
In Abbildung 2 soll die JSP-Sprache anhand eines Beispiels erklärt werden.
Im Zusammenhang mit JSP wird überwiegend HTML Tag genutzt. Im vorliegenden
Beispiel wurde allerdings auf so genannte Skriptlets zurückgegriffen. Skriptlets werden
verwendet, um Javacodes zu integrieren, und zwar an jeder Stelle der Ausgabe-Datei.
Im Beispiel wird die Methode GetParameter aufgerufen.
Dabei vermischen wir
Darstellung (HTML) und Funktionalität (Java). Diese Kombination ist nicht im Sinne
des Entwicklers.
Seite 6
JavaServer Faces
25. Februar 2010
Abb.2: Beispiel für JSP
Ein weiteres Problem neben der Vermischung von Darstellung und Funktionalität bei
der Verwendung von JSP, stellte der eingebaute Quellcode da, der erst zum Zeitpunkt
des Anwendungsstarts im Applikationsserver kompiliert wurde. Im Zuge dessen konnte
man vorhandene Fehler im Quellcode erst bei Laufzeit des Programms erkennen.
Diese Nachteile führten zur Entwicklung von Web-Frameworks.
3 Model View Controller (MVC)
Um den im vorangegangenen Kapitel erläuterten Problemen entgegenzuwirken, hat
man Web-Frameworks entwickelt, die große Teile einer Web-Anwendung in
verschiedene Zuständigkeitsbereiche aufteilen.
Man nehme an, das Layout einer Anwendung in einer Seitenbeschreibungssprache
wie JSP (View) erzeugt werden soll. In diesem Fall gilt es, die Anwendungslogik dem
Model zuzuordnen, um das Layout von den Funktionalitäten zu trennen. Es wird also
zwischen Datenhaltung (Model), Ansicht (View) und Steuerungslogik (Controller)
unterschieden
um
so
die
Trennung
Zuständigkeitsbereichen zu ermöglichen.
Seite 7
zwischen
den
verschiedenen
JavaServer Faces
25. Februar 2010
Eine Übersicht über die drei Bereiche bietet Abbildung 3.
Abb.3: Web-Framework mit verschiedenen Zuständigkeitsbereichen
Quelle: http://jsfatwork.irian.at/semistatic/introduction.html
4 Die Java Server Faces Technologie
Wie bereits erwähnt, ist die Java Server Faces Technologie (JSF) ein User Interface
(UI) Framework, mit dem auch komplexe Web Anwendungen erstellt werden können,
die in einem Servlet Container laufen. Die aktuelle JSF Version 2.0 wurde im
Dezember 2009 auf der SUN Website zum Download bereitgestellt.
Über die Tag–Bibliotheken werden Komponenten für die Oberfläche bereitgestellt oder
erweitert, wodurch die Benutzerschnittstelle in einer höheren Abstraktionsebene
Komponenten zusammensetzt. Die Stärke von JSF besteht dabei im Einsetzen von
User-Interface-Komponenten. Die Vorteile, die diese Technologien mitbringen sind
u.a.:
Trennung zwischen Darstellung und Geschäftslogik
Einfaches Erstellen eines UIs mittels vordefinierten UI Komponenten
Datenaustausch zwischen Server und Client  UI wird vereinfacht
UI ausgelöste Events können einfach mit dem Server verknüpft werden
UI Komponenten können einfacher umgetauscht werden.
Seite 8
JavaServer Faces
25. Februar 2010
JSF verfolgt hierbei das Ziel der Trennung von Geschäftslogik und Darstellung. Der
Programmierer entwickelt die Logik und die Steuerung der Anwendung, während der
Designer sich auf die Darstellung konzentrieren kann. Diese Trennung ermöglicht u.a.
paralleles Arbeiten, das durch die zielgerichtete Einsetzung der Kompetenzen von
Entwickler und Designer erreicht wird und auf diesem Weg eine sofortige
Projektintegration, ohne weitere Kenntnisse in dem jeweiligen Zuständigkeitsbereich,
möglich macht.
In Abbildung 4 ist zu sehen, wie der Client eine Anfrage schickt. Das Servlet nimmt die
Anfrage entgegen, initialisiert im Model z.B. die eingegebenen Werte und steuert den
Ablauf. Im Anschluss werden die Werte in der Datenbank eingetragen. Die View wird
erzeugt, greift sich die aktuellen Daten aus dem Model heraus und generiert
anschließend eine Antwort.
Abb.4: Das Model Prinzip basiert auf JSF
Quelle: http://jsfatwork.irian.at/semistatic/introduction.html
Auch das Austauschen der Präsentationsschicht in ein anderes Ausgabeformat wird
durch JFS ermöglicht. Zum Beispiel lassen sich eigene Komponenten erstellen um
Tabellen oder andere Präsentationselemente zu ersetzen. Dabei stellt JSF nicht nur
eine Vielzahl von Komponenten bereit, die über eigene Tags nutzbar sind, sondern
auch Validatoren zur Kontrolle von Fehleingaben werden zur Verfügung gestellt.
Seite 9
JavaServer Faces
25. Februar 2010
4.1 Die Strukturen von JSF Anwendungen
Die View bildet die Basis und das zentrale Konzept von JavaServer Faces. Sie kann
als eine Baumstruktur aus JSF-Komponenten beschrieben werden, die genau einmal
beim Aufruf einer JSP vorkommt. Zu Beginn des JSF-Lebenszyklus wird die View
direkt nach der Anfrage des Clients aufgebaut. In der letzten Phase des Lebenszyklus
werden dann alle Komponenten rekursiv mit der Wurzel beginnend aufgerufen,
wodurch das Erzeugen einer Antwort, beispielsweise einer HTML-Seite, möglich wird.
Die Verknüpfung der einzelnen Views ist nicht statisch in der jeweiligen Seite
unterzubringen. Die Verkettung erfolgt vielmehr über die Konfigurationsdatei (siehe
zB.Abb.5: faces-config.xml). Es werden also Regeln erstellt, die innerhalb der Views
verwendet werden. Demnach hat das Umdefinieren einer Regel Auswirkungen auf alle
Seiten. Diese Eigenschaft ist interessant für Portalseiten, auf denen durch
Navigationsregeln festgelegt wird, zu welcher Seite verwiesen werden soll, wenn eine
bestimmte Aktion einen bestimmten Rückgabewert (Outcome) liefert.
Abb.5: Die Konfigurationsdatei facex-config.xml
Die Anbindung der JSPs geschieht per JavaBeans. JavaBeans sind Java Klassen, die
zur Speicherung von Benutzer- oder Anwendungswerten verwendet werden. Die
Verwaltung der Klassen, bzw. die Verwaltung der Objekte übernimmt JSF. In der JSP
wurden diese JavaBeans in jeder Seite eingebunden, wobei Managed-Beans das
Verfahren dieser (globalen) Bereitstellung, sprich die Verwaltung der Beans,
bezeichnet. Die Inkarnation erfolgt nach dem Lazy loading Prinzip. Demnach also
dann, wenn auf eine Bean zum ersten Mal zugegriffen wird. Dazu kann zentral über die
Konfigurationsdatei gesteuert werden, welchen Gültigkeitsbereich die erzeugten
Objekte haben.
Seite 10
JavaServer Faces
25. Februar 2010
Über ValueBinding können diese JavaBeans mit Komponenten verknüpft werden, so
dass eine Kopplung zwischen dem Modell und der Sicht entsteht. Die verknüpften
Beans heißen dann Backing-Beans und gehören aus JSF-Sicht zur Schicht des
Modells, aus diesem Grund auch Modellobjekte genannt. Sie besitzen Getter- und
Setter-Methoden für ihre Propertyvariablen und können auch Aktions- sowie
Validierungsmethoden bereitstellen.
5 Lebenszyklus einer JSF Anwendung
Der Ablauf einer JSF Seite ist ähnlich zu dem einer JSP Seite. Der Client stellt eine
Anfrage auf den Server, um die Seite zu erhalten. Dabei durchläuft jede JSF Anfrage
sechs Bearbeitungsphasen bis die Ergebnisseite auf dem Browser erscheint. Die
Bearbeitung der nächsten Phase ist vom erfolgreichen Abschluss der vorherigen
Phase abhängig, da sie erst dann bearbeitet wird, wenn die vorherige Phase
erfolgreich abgeschlossen ist. Bei Fehlereintritt werden die Phasen nicht weiter
bearbeitet.
5.1 Erzeugung/Wiederherstellung des Komponentenbaums
Um das bereits erwähnte Dialoggedächtnis zu realisieren, ist es notwendig, die
(Formular)Zustände zu speichern und wiederherzustellen. Dabei werden zwei Fälle
unterschieden: Beim erstmaligen Abruf einer Seite existiert noch kein View-Objekt.
Daher muss eines erzeugt werden, in dem ein leerer Komponentenbaum angelegt und
im FacesContext einhängt wird. Anschließend kann sofort zur Render ResponsePhase übergegangen werden, da keine Verarbeitung von übergebenen Werten etc.
nötig ist. Sollte bereits ein Komponentenbaum im FacesContext existieren, so wird
dieses View-Objekt geladen und mit Validatoren, Konvertern und Listenern verknüpft.
5.2 Übernahme der Anfragewerte
In dieser Phase werden die übertragenen Werte des Requests (also die Daten des
abgeschickten Formulars) in den Komponentenbaum übernommen, also in den
entsprechenden Komponenten gesetzt. ActionEvents werden hier generiert, z.B, das
Drücken des Buttons durch den der Request erzeugt wurde. Dabei ist zu erwähnen,
dass hier noch keine Änderung des Modells erfolgt, sondern nur die String-Werte
vorbereitet werden.
Seite 11
JavaServer Faces
25. Februar 2010
5.3 Validierung/Konvertierung
Anhand von Konvertern (aber auch Renderern) werden die gespeicherten Werte der
vorherigen Phase in die Zielformate (Modelldatentypen) überführt. Anschließend
werden alle Werte der Komponenten mittels registrierter Validatoren überprüft. Im
Fehlerfall werden dabei üblicherweise komponentenbezogene Meldungen generiert
und es wird mit der Render-Response-Phase fortgefahren. Dadurch wird dieselbe
Seite gerendert, da ihr Komponentenbaum noch im FacesContext liegt.
5.4 Aktualisierung der Modellobjekte
Wenn bis hierhin kein Fehler auftrat, so werden die überprüften Werte in das Modell
übernommen. Dabei werden ValueChangeEvents generiert, falls sich ein Wert
geändert
hat.
Nach
dieser
Phase
werden
die
registrierten
Listener
über
Wertänderungen informiert.
5.5 Aufruf der Anwendungslogik
Alle Ereignisse der Anwendungsebene werden verarbeitet. So wird z.B. die
nachfolgende Seite ermittelt und ihr Komponentenbaum im Kontext abgelegt. Nach
dieser Phase werden alle registrierten ActionListener benachrichtigt.
5.6 Rendern der Antwort
Der im Kontext befindliche Komponentenbaum wird ausgegeben. Dazu wird die
Encode-Methode jeder Komponente ausgeführt. Wird also die Phase Invoke
Application übersprungen so erfolgt das Rendern derselben Seite.Abbildung 6
verdeutlicht ergänzend den vollständigen Ablauf.
Abb.6: Lebenszyklus einer JSF Anfrage
Quelle: http://jsfatwork.irian.at/book_de/ajax.html
Seite 12
JavaServer Faces
25. Februar 2010
6 Java Server Faces Komponenten
6.1 Java Server Faces Tag Libraries
Für die JSF Entwicklung stellt die Spezifikation zwei Tag Libraries bereit.
Die JSF Implementierung stellt zwei grundlegende Taglibrarys zur Verfügung.
Die html_basic Taglibrary definiert Tags für gängige HTML UI
Komponenten
Die jsf-core Taglibrary definiert alle anderen Tags der JSF
Für die Nutzung der Tags müssen die Libraries zu den entsprechenden Seiten
hinzugefügt werden.
Das Attribut „uri“ beinhaltet die Zieladresse der Tag Libraries. Mit dem Prefix „h“ und
„f“ kann auf Komponenten zugegriffen werden. Abbildung 7 veranschaulicht die
Nutzung der JSF Tags in der Praxis. Ergänzend ist anzumerken, dass Tags sowohl
zum Einlesen des Namens als auch für die Ausgabe benutzt werden, wobei der Tag
des Komponenten „h:inputText value=“#{customer.firstname}“ den vom Nutzer
eingegebenen „firstname“ in die Bean „Customer“ einspeichert.
Seite 13
JavaServer Faces
25. Februar 2010
Abb.7: Beispiel einer JSF Seite mit Tag Libraries
Quelle: http://jsfatwork.irian.at/semistatic/introduction.html
Abbildung 8 zeigt die Darstellung der Seite im Browser und den Zusammenhang zu
den JSF-Komponenten in der XHTML-Datei.
Abb.8: Komponenten und ihre Darstellung
Quelle: http://jsfatwork.irian.at/semistatic/introduction.html
Seite 14
JavaServer Faces
25. Februar 2010
6.2 Validation
Die JSF API stellt dem Entwickler bereits vordefinierte Validatoren zu Verfügung. Die
Aufgabe von Validatoren besteht in der Überprüfung der eingegebenen Werte der
Komponente. Ist die Eingabe fehlgeschlagen, so wird eine Fehlermeldung an den
Client gesendet. Vordefinierte Validatoren können z.B. das Datum, die email Adresse
oder auch die BLZ überprüfen, wobei alle Validatoren den Interface Validator
implementieren. Dadurch besteht auch die Möglichkeit eigene Validatoren zu
implementieren, die wiederum den Interface Validator implementieren.
Um eine Komponente mit einem Validatoren zu versehen, wird der entsprechende
Validator Tag in die Komponente eingebaut. In Abbildung 9 wird z.B. die Eingabe
überprüft: Bei einer Eingabe zwischen 0 und 5 wird diese akzeptiert, ansonsten tritt ein
Hinweis auf.
Abb.9: Validate_longrange Tag im Beispiel
Seite 15
JavaServer Faces
25. Februar 2010
7 Fazit
Schlussfolgend kann man sagen, dass die JavaServer Faces Technologie mit flexiblen
Features, die der Entwicklung von Web Anwendungen dienen, viele Möglichkeiten
bietet. Insgesamt hat sich JSF in der Breite zwar nicht festgesetzt, findet aber in vielen
interessanten und komplexen Anwendungen Akzeptanz. Die Ziele der Spezifikation
liegen hierbei in der Einfachheit und Flexibilität in der Entwicklung. JSF ist ein UIFramework um interaktive Web-Anwendungen zu entwickeln, womit auch das
Wiederverwenden von UI-Komponenten auf diesem Weg erleichtert wird. Die
Einfachheit der Datenbindung zwischen Logik(Beans) und UI-Komponenten stellt
weiterhin ein positives Merkmal da, durch das sich JSF auszeichnet. Darüberhinaus
ermöglicht die Technologie die Einstellung der Ablaufsteuerung in der XML
Konfigurationsdatei.
Zu erwähnen ist jedoch auch die nachteilige Eigenschaft von JSF, die in der großen
Anzahl der Techniken, die eingesetzt werden, besteht. Zu diesen zählen u.a. HTML,
CSS, JavaScript, XML, ein Applikationsserver, eine Expression Language und
JavaServer Pages. Im Falle einer Änderung müssen zusätzlich mehrere Dateien in
unterschiedlichen Verzeichnissen bearbeitet werden (XML-Konfiguration des ServletContainers, Navigationsregeln, JSP-Datei). Dieser Nachteil gibt Spielraum für
konkurrierende Produkte. Als Beispiel für diese können u.a. die Frameworks Apache
Wicket und Apache Tapestry angeführt werden.
Seite 16
JavaServer Faces
25. Februar 2010
8 Literaturverzeichnis
Marinschek, Martin (2007): JSF@WORK: JavaServer Faces und Apache MyFaces
erfolgreich. (ISBN: 3-89864-401-4)
Müller, Bernd (2006): JavaServer Faces - Ein Arbeitsbuch für die Praxis.
(ISBN: 3-446-40677-8)
McLaughlin, Brett (2006): Ajax von Kopf bis Fuß (ISBN: 3-89721-469-5)
Jacobi, Jonas (2006): Pro JSF and Ajax – Building Rich Internet Components,
Computer Bookshops, Februar, (ISBN: 1-590-59580-8)
9 Online Quellen
-
JavaServer Faces, Sun
-
http://java.sun.com/j2ee/javaserverfaces/
-
http://java.sun.com/webapps/download/Display
-
www.sigs.de/publications/js/2004/04/beneken_JS_04_04.pdf
-
https://svn.assembla.com/svn/rolez/Others/JSF%20%20Integration%20in%20EJB/Source%20pdfs/JSF-Referat.pdf
-
http://www.gruntz.ch/courses/sem/ss03/JSF.pdf
-
Prof. Dr. Peter Barth, Web-basierte Anwendungen - Skriptteil: JavaServer
Faces, FH Wiesbaden - Medieninformatik, März 2009
-
Torben Brodt, Ajax und Google Web Toolkit, Seminararbeit,
-
FH Wiesbaden - Medieninformatik, Februar 2008
-
Stefan Berntheisel, JSF und Ajax, Seminararbeit,
-
FH Wiesbaden - Medieninformatik, Februar 2008
Seite 17
Herunterladen