Kurze Vorgeschichte von JSF

Mit gewöhnlichem HTML erstellte Webseiten haben einen großen Nachteil: sie sind statisch. Dynamische Daten, die bspw. aus einer Datenbank stammen, können nicht ohne Weiteres dargestellt werden. Deswegen wurden serverseitige Sprachen wie z.B. PHP oder Phyton enwickelt, mit deren Hilfe solche dynamischen Web-Anwendungen möglich sind. Auch in der Java-Welt wurden Lösungen für dieses Problem gesucht.

Servlets sind Java-Programme, die auf einem Server ablaufen und Anfragen per HTTP entgegen nehmen. Als Ergebnis wird eine HTML-Seite an den Client gesendet. So sind bspw. Zugriffe auf Datenbanken möglich, die auf dem Server liegen. Dabei wird die HTML-Seite im Java-Code zusammengesetzt.

Eine weitere Möglichkeit sind JSPs (JavaServer Pages). Dabei handelt es sich um eine Mischung aus HTML und Java, da der Java-Code in den HTML-Code integriert wird. Beide Lösungen haben den Nachteil, dass Java und HTML nicht voneinander getrennt sind und dass immer mehr Geschäftslogik in den HTML-Code gesteckt wurde. So wurden Programme mit der Zeit immer schwerer wartbar.

Um diese Probleme zu lösen, wurden Frameworks entwickelt, welche die Erstellung von dynamischen Internetseiten in einem guten (!) Programmierstil unterstützen sollten. Eines dieser Frameworks ist JavaServer Faces (JSF), das hier vorgestellt werden soll. Als weitere wären z.B. zu nennen Tapestry, Spring MVC, Struts, Wicket usw.

Was ist JSF?

JSF ist ein Framework zur Erstellung grafischen Benutzeroberflächen in einer Webanwendung. Dabei möchte JSF nicht die Erstellung der gesamten Webanwendung beschreiben, sondern stellt nur Hilfsmittel für die Präsentationsschicht zur Verfügung. Zu diesem Zweck werden eine ganze Reihe an bereits vorgefertigten UI-Komponenten mitgeliefert.

JSF kann durch eigene Komponenten erweitert werden. Dadurch konnten sich andere Frameworks entwickeln (z.B. ICEfaces, Primefaces), die JSF um weitere UI-Komponenten und Funktionalitäten erweitern. Sie werden allerdings wie JSF verwendet.

Um einen guten Programmierstil zu unterstützen, verwendet JSF bekannte Konzepte wie MVC (Model View Controller) und Ereignissteuerung, wie aus Swing bekannt. Die Anwendungsentwicklung wird generell beschleunigt durch sehr viele vordefinierter Routinen und Funktionen, die dem Entwickler einiges an Arbeit abnehmen. Außerdem muss sich der Entwickler nicht mit HTML und JavaScript herumschlagen, denn dies ist die Aufgabe von JSF.

So ist in einem Projekt eine Rollenverteilung möglich. Bei JSPs muss der Webdesigner HTML-Kenntnisse haben bzw. der Java-Entwickler muss sich mit HTML und CSS auskennen, da HTML und Java miteinander vermischt sind. Bei JSF sind die Präsentation und der Java-Code strikt getrennt und über definierte Schnittstellen können die Webseiten auf die Daten zugreifen. So kann ein Entwicklerteam verschiedene Rollen (Web-Designer, Java-Entwickler) für die Arbeit an einem Projekt definieren. Die Web-Designer entwerfen die Anordnung und das Design der vordefinierten Komponenten; die Java-Entwickler versehen diese mit Funktionalität.

Was ist MVC (Model View Controller)?

MVC bezeichnet die saubere Trennung von drei wichtigen Komponenten einer Software: Daten, deren Verarbeitung und deren Darstellung. Gerade bei JSPs werden diese Komponenten miteinander vermischt, denn hier enthält der HTML-Code (die Darstellung) oft die gesamte Logik und somit auch z.B. Datenbankzugriffe. Diese Komponenten müssen jedoch getrennt sein, damit sie voneinander unabhängig sind. MVC enthält die folgenden Bestandteile:

  • Model: Verwaltet die Daten und enthält die Datenbankzugriffe.
  • View: Die Darstellung der Anwendung wie z.B. die grafische Oberfläche.
  • Controller: Die Logik der Anwendung wie z.B. Berechnungen. Der Controller vermittelt außerdem zwischen Model und View.

Model stellt die Daten bereit und übergibt sie an den Controller. Der Controller stellt sie der Oberfläche zur Verfügung. So können die Komponenten unabhängig voneinander gehalten werden, da sie nur über Schnittstellen miteinander kommunizieren. Außerdem kann eine der drei Komponenten ausgetauscht werden, ohne dass die anderen verändert werden müssen.

So ist z.B. das Folgende möglich: Es soll eine Internetanwendung-Anwendung  geschrieben werde, die auf eine zentrale Datenbank zugreift. Außerdem soll es eine Stand-Alone-Anwendung geben, die vor dem Offline-Betrieb ihre lokale Datenbank mit der zentralen synchronisiert. Wenn MVC bei der Entwicklung konsequent eingesetzt wurde, kann die Darstellung mit JSF durch eine Darstellung mit Swing ersetzt werden. Nur die View-Klassen müssen verändert werden. Model und Controller müssen nicht neu programmiert werden, sondern können durch die Unabhängigkeit unverändert in das neue Programm übernommen werden.

JSF selbst ist nach dem MVC-Muster aufgebaut.

MVC bei JSF

Bei JSF sieht das MVC-Konzept ein wenig anders aus: Die Aufgaben des Controllers übernimmt ein zentrales Servlet. Dieses muss vom Entwickler nicht selbst programmiert werden, sondern ist im JSF-Framework bereits vorhanden. Dieses FacesServlet empfängt alle Anfragen und leitet sie weiter an den View (die Webseiten) oder an Model (die Klassen zur Datenverarbeitung).

Es empfielt sich allerdings, innerhalb der Anwendung noch einmal das MVC-Muster einzusetzen und die eigenen Klassen noch einmal aufzuteilen in mindestens drei Schichten: Darstellung, Logik und Datenbankzugriff.

Der Applikationsserver

JavaServer Faces gehört zur JEE-Spezifikation (Java Enterprise Edition). Die Anwendung muss also auf einem JEE-Applikationsserver laufen. Dabei spielt es keine Rolle, um welchen Server es sich handelt. JEE-konforme Server sind z.B. Glassfish oder JBoss. Die Anwendung enthält keine serverspezifischen Elemente, so dass der Server gewechselt werden kann, ohne dass der Programmcode verändert werden muss.

Die Webanwendung wird in eine.war-Datei gepackt. Dabei handelt es sich um ein Archiv, das einem bestimmten Aufbau folgen muss. Die.war-Datei enthält alle Java-Klassen, die Internetseiten und Konfigurationsdateien. Damit der Server die Datei benutzen kann, muss sie folgendermaßen aufgebaut sein:

Im Wurzelverzeichnis der Datei liegen die Internetseiten. Diesen dürfen sich innerhalb einer eigenen Ordnerstruktur befinden. Ebenfalls im Wurzelverzeichnis muss ein Ordner namens WEB-INF liegen. Dieser enthält neben den Konfigurationsdateien einen Ordner namens classes mit den kompilierten Java-Dateien und einen Ordner namens mit zusätzlichen Programmbibliotheken.

Laden ...
Fehler!