« HOWTO test EJB3 with JUnit outside of the container | Main

Was ist JSF überhaupt?

Auf Anfrage von Philipp, damit ihm nicht langweilig wird, jetzt wo er fertig mit seiner Arbeit ist.

Hier ein Auszug, wie er vorraussichtlich auch in der Arbeit vorkommen wird.
Wer fachliche oder Rechtschreib-Fehler findet, hinterlasse bitte einen Kommentar!

JSF

Für die Ausgabe von dynamischen HTML-Seiten eines Webservers verwendet man im Javaumfeld üblicher Weise JavaServer Pages (JSP). Damit wird die Einbettung von Javacode - und somit von dynamischem Inhalten - in HTML-Seiten ermöglicht. Die Vermischung von Java- und HTML-Code führt allerdings schnell zu einer unübersichtlichen Programmstruktur, die die Entwicklung deutlich verkompliziert.

Um die Entwicklung von Webseiten zu vereinfachen, wurden Web-Frameworks wie zum Beispiel Struts \cite{struts} oder eben JavaServer Faces (JSF) entwickelt. Beide benutzen das Model-View-Controller-Architekturmuster (MVC). In der Anwendung werden die Daten (model), die Präsentation (view) und die Programmsteuerung (controller) voneinander getrennt. JSF ist hauptsächlich für die Präsentation zuständig und verfolgt zusätzlich einen komponentenbasierten Ansatz. Bei komponentenbasierter Programmierung wird versucht die Anwendung in wiederverwendbare Komponenten zu unterteilen, um dann später diese Bausteine zu Anwendungen zusammenzusetzen.

Ein typisches Beispiel ist eine Tabelle, deren Eigenschaften in einem Objekt gespeichert sind und der man eine Liste der darzustellenden Objekte zuordnet. Diese Komponente fügt man dann in der Seite ein, immer wenn man eine Liste dieser Art verwenden möchte, anstatt den Quellcode der Tabelle selbst zu erstellen.

In dieser Arbeit wird JSF verwendet, da es im Gegensatz zu den anderen Frameworks standardisiert und Teil der Java EE 5 Spezifikation ist. JSF wird eine weite Verbreitung in Enterprise-Projekten nachgesagt und es heißt, JSF sei auch einfacher zu lernen als Struts.(siehe hierzu die Diskussion unter http://tech.groups.yahoo.com/group/novajug/message/9812)

Es gibt viele verschiedene Implementierungen und Komponenten-Bibliotheken wie zum Beispiel MyFaces von Apache, RichFaces von Exadel, ICEfaces von ICEsoft oder ADF Faces von Oracle. In dieser Arbeit wird jedoch die Referenzimplementierung von Sun verwendet, um unabhängig von Herstellern zu bleiben.

Der vollständige Verzicht auf ein Web-Framework und die Programmierung nur mit JSPs ist zwar möglich, wird aber den Möglichkeiten nicht gerecht, die man mit Java EE 5 hat.

Der Vollständigkeit halber will ich auch noch kurz Facelets erwähnen, die ich anstelle von JSP verwende:

Facelets

JSP ist darauf ausgelegt dynamische Ausgaben zu generieren. JSF verwendet JSP jedoch zur Erstellung und Verwaltung von Komponenten. Die Kombination von JSP und JSF bringt somit ein paar Schwierigkeiten mit sich. Jedoch kann man auf JSPs verzichten und statt dessen eine andere Technologie verwenden. Facelets ist eine solche Technologie und wird als Open Source Projekt unter der Aufsicht von Sun entwickelt. Die Beliebtheit des Projektes hat dazu geführt, dass über eine Aufnahme von Facelets in der zukünftigen Spezifikation JSF 2.0 (JSR 314) diskutiert wurde. Facelets werden inzwischen zwar im JSR erwähnt, aber nicht komplett übernommen.

Es ist deutlich zu erkennen, dass JSF und Facelets ein gutes Team bilden und der komplette Verzicht auf JSP viele Vorteile bringt. Facelets bieten Templating (Die Aufteilung der Webseite in einzelne Bestandteile wie zum Beispiel Header, Navigation, Content und Footer), bessere Debugmöglichkeiten durch Fehlermeldungen mit genauer Angabe der Fehlerquelle, vereinfachte Erstellung von Komponenten und noch einige andere Features. Daher wird in dieser Arbeit auf JSP verzichtet und die aktuelle Version von Facelets verwendet.

Nützliche Links:
http://java.sun.com/javaee/javaserverfaces/
http://www.jsfcentral.com/
http://www.ibm.com/developerworks/java/library/j-jsf1/
http://balusc.blogspot.com/

Comments (3)

"Die Vermischung von Java- und HTML-Code führt allerdings schnell zu einer unübersichtlichen Programmstruktur, die die Entwicklung deutlich verkompliziert." - da würde ich zumindest ergänzen, dass das nur dann der Fall ist, wenn man nicht diszipliniert genug vorgeht ...

Ansonsten: Die Argumentationen für JSF und für Facelets scheinen sich ein klein wenig zu widersprechen. Ich würde außer Struts vielleicht noch exemplarisch Tapestry und SpringMVC aufzählen.

Okay, es wird nicht zwangsläufig unübersichtlich, das stimmt. Ich werde das überarbeiten.

"Die Argumentationen für JSF und für Facelets scheinen sich ein klein wenig zu widersprechen."
Weil JSF standardisiert ist und Facelets nicht? Das stimmt schon, deshalb habe ich das mit der Aufnahme von Facelets in zukünftigen Versionen von JSF mit rein gebracht. Facelets sind meiner Meinung nach der besser Weg. Und ich habe auch noch niemanden gefunden, der widerspricht. Es ist fast schon so als seien Facelets der defacto Standard... Sind sie es?

Ich habe leider keinen Platz groß und breit die Unterschiede und Vorzüge in der Arbeit zu erklären, möchte aber natürlich mir nicht vorwerfen lassen eine willkürlich Wahl zu treffen... Tja irgendeine Idee wie man das Dilemma lösen kann? Ich bräuchte einen Sun-Offiziellen, der Facelets empfiehlt. Den kann ich dann als Quelle nutzen. ;)

ich hab mal nachgeforscht und der "Erfinder" von Facelets ist auch Core-Developer von JSF: Jacob Hookom. http://hookom.blogspot.com/search?q=facelets

Son richtiger Grund warum man Facelets benutzen sollte, ist das jetzt allerdings nicht oder? :D

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)

About

This page contains a single entry from the blog posted on 01.04.08 12:52.

The previous post in this blog was HOWTO test EJB3 with JUnit outside of the container.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31