- Motivation
- Wozu JSPs
- JSPs und die Java 2 Enterprise Edition
- Was für wen interessant ist
- Was vorausgesetzt wird
- Was bewusst ausgelassen wird
- Ein erstes "Hello World!"
Motivation
JavaServer Pages (JSP) erfreuen sich einer immer größeren Beliebtheit, und der Einsatz hat sich im Jahr 2003 lt. einer Erhebung von Netcraft fast verdoppelt. (link) Trotzdem gibt es nur wenige Einführungen und Tutorials und praxisnahe Empfehlungen. Zwar gibt es einige Bücher zum Thema (eine Liste mit Büchern zum Thema und Besprechungen dieser wird nach und nach auf diesen Seiten eingepflegt werden; s. dazu die Literaturliste). Webbasierte Tutorials und Empfehlungen zur Nutzung dieser Technologie finden sich allerdings nur wenige - und noch weniger in deutscher Sprache.
Diese Lücke wollen wir mit diesem Tutorial schließen. Dabei soll hier die gesamte Breite der Thematik abgedeckt werden. Es finden sich für die Einsteigerin1
Hilfestellungen für die ersten Schritte mit JSPs, und die fortgeschrittene Nutzerin wird hier Informationen zu Neuerungen (bspw. der Expression Language aus der kommenden JSP-Version) und Tipps zu Fragen des Designs, der Testbarkeit und zum Einsatz bestehender Frameworks finden.
Die Syntax alleine bildet nicht den Schwerpunkt dieses Tutorials. Sie wird zwar selbstverständlich auch behandelt, doch wir meinen, dass diese nur einen Teil der gesamten Technologie ausmacht. Schwerpunktmäßig geht es uns mehr um konkrete Tipps und Tricks für die tägliche Praxis und darum wie man JSPs tatsächlich und - gerade auch in größeren Projekten - effektiv einsetzt. Daher wird in diesem Tutorial besonderes Augenmerk auf eine saubere Entwicklung und auf eine Berücksichtigung von Design-Aspekten gelegt, die Verwendung von Frameworks angeregt und diese am Beispiel von Struts erläutert. Einsteigerinnen finden selbstverständlich alle notwendigen Informationen, um sich zu den fortgeschritteneren Themen vorzuarbeiten.
Wozu JSPs
JavaServer Pages bilden eine mächtige Möglichkeit, serverseitig Web-Anwendungen zu erstellen. Heutzutage sind diese längst eine Selbstverständlichkeit. In den Anfangstagen des World Wide Web Anfang und Mitte der Neunziger Jahre allerdings waren Websites zunächst rein statische Angelegenheiten. Es gab Seiten, die sich zwar mittels der Hyperlinks untereinander referenzierten, aber es gab weder die Möglichkeit, auf Benutzereingaben zu reagieren, noch dynamische Daten auszugeben, wie bspw. Börsendaten, News etc., ohne jedes Mal die Seiten neu anpacken zu müssen. Angesichst des Erfolges des WWW bereits in diesem frühen Stadium wurden jedoch schnell diverse Technologien geschaffen, um diese Beschränkung zu umgehen (s. etwas weiter unten "Abgrenzung zu anderen Technologien"). Servlets und JSPs waren SUN Microsystems Reaktion auf diese Fortentwicklung der Web-Technologien. Diese ermöglichen es nun, mittels Java auf Datenbanken zuzugreifen, Grafiken neu zu berechnen, Nutzereingaben zu verarbeiten, bzw. allgemein unter Ausnutzung von Java eine dynamische Reaktion auf die Nutzer-Anfrage unter Berücksichtigung seiner vorherigen Interaktionen zu generieren. Die Kombination mit Java und mehr noch die Einbettung in die J2EE-Technologien machen die enorme Flexibilität und das enorme Potenzial der Java-basierten Webtechnologien JSP und Servlets aus.
JSPs und die Java 2 Enterprise Edition
JSPs sind Bestandteil der Java 2 Enterprise Edition (J2EE), einem Standard um hochkomplexe, verteilte Anwendungen zu erstellen. Seit ihrer Einführung ist J2EE immer weiter gewachsen, sind neue Bestandteile hinzugekommen. Sie umfasst inzwischen eine Unmenge von Technologien, die häufig bei der Entwicklung von unternehmensweiten Anwendungen zum Tragen kommen.
Einige wichtige Bestandteile sind:
- Enterprise Java Beans
EJBs werden genutzt, um Geschäftsabläufe und -strukturen abzubilden. Sie bilden das Rückgrat der meisten J2EE-Anwendungen und sind neben JSPs/Servlets die wohl bekannteste unter den J2EE-Technologien. - Java Connector Architecture
JCA ermöglicht die Einbindung weiterer Nicht-J2EE-Anwendungen in das Gesamtsystem. Beispielsweise um ein ERP-System einzubinden (etwa mittels des JCA-Adapters von SAP) oder um den Zugang zu existierenden Systemen (Legacy-Anwendungen) zu ermöglichen. So verfügen Banken und Versicherungen zumeist über umfassende, ausgereifte Systeme, die in Cobol entwickelt wurden. Für neuere Anwendungen wird auf diese häufig mittels JCA in J2EE-Anwendungen zugegriffen. - Java Message Service
Messaging Systeme ermöglichen den asynchronen2
Aufruf entfernter Systemkomponenten. Dies ermöglicht die Benachrichtigung entfernter Systeme, während die eigentliche Anwendung in ihrer Verarbeitung fortschreiten kann. - Java Transaction API
JTA dient dem Zugriff auf einen Transaktionsmanager, der die Steuerung verteilter Transaktionen unterstützt. Allerdings unterstützt JTA derzeit noch keine geschachtelten Transaktionen. - Web Services
Natürlich wird die Entwicklung von WebServices und der Zugriff auf entsprechende Dienste anderer durch Java gut unterstützt. Eine Reihe spezieller APIs sind dafür zuständig. - JSPs/Servlets
Diese beiden Technologien zur Entwicklung von Web-Komponenten und -Anwendungen sind der tragende Bestandteil dieses Tutorials. Sie sind integraler Bestandteil des J2EE-Standards. Jeder J2EE-konforme Server muß JSPs und Servlets unterstützen.
Damit sind noch lange nicht alle Bestandteile aufgeführt, aber ein erster Überblick über wichtige Technologien gegeben. JSPs und Servlets werden im Rahmen von J2EE vor allem genutzt, um den browserbasierten Zugriff auf diese Systeme zu gewährleisten. J2EE bildet zwar nicht den Schwerpunkt dieses Tutorials, doch wird in einem eigenen Kapitel darauf soweit eingegangen werden, dass Interessierte einen leichten Zugang zu den weiteren Themen der J2EE-Entwicklung (EJB, JCA, WebServices) finden können. Wir sehen vor allem in der Kombination von JSPs/Servlets mit den anderen J2EE-Technologien eine große Stärke der Java-basierten Entwicklung von Web-Anwendungen.
Der Einsatz der vollen Technologie-Palette von J2EE ist aber nicht notwendig, um mit JSPs/Servlets funktionsfähige und gute Web-Anwendungen entwickeln zu können. Es gibt genügend reine Servlet/JSP-Container, die einen isolierten Einsatz von JSPs ermöglichen. Vielfach ist dies auch sinnvoller, als aufgeblähte Anwendungen unter Einsatz von EJBs und anderer J2EE-Technologien zu erstellen. Wann EJBs und andere Bestandteile der Enterprise Edition Sinn machen und wann es vollkommen ausreicht, eine reine JSP/Servlet-Anwendung zu erstellen, das werden wir ausgiebig im J2EE-Kapitel diskutieren.
Was für wen interessant ist
Das Tutorial richtet sich an Web-Designerinnen in JSP-Projekten, an Programmiererinnen webbasierter Applikationen, an System-Architektinnen und zum kleineren Teil auch an System-Administratorinnen.
Bei den folgenden Abschnitten werden die Themen mit fortschreitendem Inhalt natürlich verlinkt. Bis dahin erfolgt eine grobe und unvollständige Auflistung einiger Themen für die jeweilige Zielgruppe.
- Web-Designerinnen:
Die Syntax von JSPs, JSP-Standardaktionen, Tag-Libraries, Lebenszyklus von JSPs - Java-Programmiererinnen:
Die Syntax von JSPs, JSP-Standardaktionen, Tag-Libraries, Implizite Objekte, Session-Handling, Cookies und URL-Rewriting, Lebenszyklus von JSPs, Fehler- und Ausnahmenbehandlung, Anwendungsarchitektur, Struts-Framework, Testen webbasierter Anwendungen, JavaServer Faces, Portlets - System-Architektinnen:
Die Syntax von JSPs, Fehler- und Ausnahmenbehandlung, Anwendungsarchitektur, Struts-Framework, Andere J2EE-Technologien, JavaServer Faces, Portlets - System-Administratorinnen:
JSP-Container, Verzeichnisstruktur von Java-Webanwendungen, Test-Tools
Was vorausgesetzt wird
Auch wenn nicht für alle Bereiche der Entwicklung Java-basierter Webanwendungen Java selbst von Bedeutung ist, so wird in diesem Tutorial dennoch an allen Stellen davon ausgegangen, dass sowohl Java selbst als auch zumindest die grundlegenden objektorientierten Konzepte wie bspw. Kapselung, Polymorphismus oder Vererbung bekannt sind. Es wird mit Sicherheit an keiner Stelle Java selbst erklärt. Dazu wird auf das exzellente Tutorial von Sun (link) verwiesen. Bestimmte Bereiche sind aber auch ohne Kenntnisse von Java verständlich und sinnvoll zu lesen. S. dazu den obigen Abschnitt "Was ist für wen interessant" und hier besonders die Abschnitte, was für Web-Designerinnen, bzw. was für Administratorinnen von Bedeutung ist. Die meisten der dort aufgeführten Abschnitte kann man ohne Kenntnisse der Programmiersprache Java verstehen.
Neben Java werden ebenso Kenntnisse in HTML und XML vorausgesetzt. Zu HTML verweisen wir auf "selfhtml" (link). Und zu Java einmal auf das ausgezeichnete englischsprachige Tutorial bei SUN (link) und auf die im Web frei zugänglichen HTML-Ausgaben der Bücher "Java ist auch eine Insel" (link) und "Handbuch der Java-Programmierung" - frühere Ausgaben erschienen als "Goto Java" (link).
Was bewusst ausgelassen wird
Da wir der Meinung sind, dass eine saubere Trennung zwischen Darstellung und Logik oder gar der Persistenz-Schicht notwendig ist, wird in diesem Tutorial nirgends direkt JDBC in den JSP-Seiten verwandt, auch wenn man die immer wieder in Büchern und anderen (englischen) Tutorials findet. Lediglich bei der Vorstellung der Java Standard Tag Library wird hierauf ganz kurz eingegangen. Dafür werden wir an gegebener Stelle deutlich machen, wieso wir den Einsatz von JDBC innerhalb von JSPs selbst für nicht sinnvoll halten.
Zudem behandeln wir hier nur die aktuelle JSP-Version 1.2 sowie alle Neuerungen der kommenden JSP-Version 2.0 (und demnächst sicher auch Folge-Versionen). Ältere JSP-Versionen werden hier nicht behandelt.
Ein erstes "Hello World!"
Wie in Einführungen in Programmiersprachen üblich wollen wir auch hier mit einer ersten einfachen JSP anfangen, um kurz zu zeigen, um was es sich bei JSPs überhaupt handelt, bevor wir JSPs im nächsten Abschnitt gegenüber anderen Technologien abgrenzen. Im Kapitel "Tomcat als lokaler Testserver" wird gezeigt, wie man einen Servlet-Container einrichtet, so dass man diese JSP auch wirklich ansehen kann. Hier geht es nur um einen ersten Blick auf die Syntax.3
<head><title>First Example</title></head>
<body>
<h3>Hello World-JSP</h3>
Your browser is: <%= request.getHeader("User-Agent") %><br>
Your IP address is: <%= request.getRemoteAddr() %><br>
</body>
</html>
Code im Extrafenster ausführen
Anmerkungen:
1) Es wird bei Nutzerinnen und Nutzern hier stets die weibliche Form verwendet. Selbstverständlich ist der männliche Nutzer ebenfalls stets angesprochen. (zurück)
2) In Java sind alle Methoden-Aufrufe synchrone Aufrufe. D.h. dass die aufrufende Methode erst dann in der Bearbeitung fortfahren kann, wenn die aufgerufene Methode ihre Arbeit erledigt hat. Asynchrones Messaging macht es möglich, dass direkt nach Aufnahme der zu übertragenden Nachricht an das Messaging-System die aufrufende Methode mit der Arbeit fortfährt. Der Empfänger muss zum Zeitpunkt des Versendes einer Nachricht nicht einmal unbedingt erreichbar sein. Das Messaging-System stellt eine ggf. notwendige verzögerte Übertragung sicher. (zurück)
3) Dieses Beispiel verwendet Skripting-Tags, die unter JSP 2.0 ausgeschaltet werden können. Skripting-Tags werden ausführlich im Kapitel zur Syntax vorgestellt, und dort wird auch darauf hingewiesen, warum man sie normalerweise möglichst meiden sollte. Sie dienen hier nur als ein Beispiel. Das gleiche Ergebnis werden wir in diesem Tutorial noch öfter erhalten, aber dann auf elegantere Weise ;-) (zurück)

