Prof. Dr. Andreas Schmietendorf

Slides:



Advertisements
Ähnliche Präsentationen
Allgemeines Name: Ursprünglich: „Personal Home Page Tools“
Advertisements

der Universität Oldenburg
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Zusammenfassung
Software Engineering Praktikum SS 2003
Software Engineering Praktikum WS 2002/03
Übung 5 Mehrstufige Client/Server-Systeme mit Enterprise Java Beans
1 Prof. Dr. Andreas SchmietendorfWS06/07 – Labor C/S-Programmierung Übung 4 Mehrstufige Client/Server-Systeme mit JSPs, Servlets und JavaBeans (Web-Container)
Internet-Datenbanken
Datenbankzugriff im WWW (Kommerzielle Systeme)
Tomcat Web-Server installieren
Internetzugriff mit Strings und Streams
Java 2 Enterprise Edition (J2EE)
Ausnahmen HS Merseburg (FH) WS 06/07.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
HTML - Einführung Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
Hassan Bidani Jallal Alami Rahmouni FH Wiesbaden
Struts Seminar Javabasierte Webanwendungen. Tobias Kutzler2 Überblick Historie Was ist Struts? Model Controller View Zusammenfassung.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Technik Gestaltung Navigation Daten. Übersicht Client Webbrowser InternetServer.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Einführung in Visual C++
DVG Klassen und Objekte
Einführung MySQL mit PHP
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Systementwicklungsprojekt:
FH-Hof HTML - Einführung Richard Göbel. FH-Hof Komponenten des World Wide Webs WWW Browser HyperText Transfer Protocol (HTTP) via Internet WWW Server.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Coccon das Web-XML-Publishing System Thomas Haller.
Einführung Servlets/JSPs
Seminar Internet - Technologie
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Oliver Spritzendorfer Thomas Fekete
JavaServer Faces Urs Frei. Inhalt JSF Funktionsweise Rückblick JSP Bestandteile von JSF So einfach ist die Anwendung (Beispiel) Eclipse im Einsatz (Entwicklungsumgebung)
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #4 Philipp Effenberger
Einführung in PHP.
Einführung in PHP 5.
Willkommen zum Brückensemester
Datenbanken im Web 1.
Java Server Pages 2 und Benutzerdefinierte Tags Strahil Yordanov.
Java-Kurs Übung Besprechung der Hausaufgabe
Tag-Libraries1 seit JSP Version 1.1 Sammlung selbst definierter Tags (Custom Tags) Tagdefinition: Body Tags halten sich an XML-Konvention Präfix bezeichnet.
Benutzerdefinierte Tags
Java Server Pages Technologie zur Erzeugung dynamischer Webseiten basierend auf Java-Servlets Blockseminar Wintersemester 2001/2002Jochen Pfeiffer Seite.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Java 2 Enterprise Edition (J2EE) Sascha Baumeister Software Architect Specification Lead JSR086 IBM Deutschland Entwicklung GmbH
1 Servlets Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container.
1 JavaServer Pages Stephan Baldes JavaServer Pages Einführung
Oracle ADF FacesSeite 1 Oracle ADF Faces OPITZ CONSULTING Oracles Implementierung der JavaServer Faces Spezifikation.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
 Präsentation transkript:

Prof. Dr. Andreas Schmietendorf Programmierung von Client/Server-Anwendungen J2EE – Web-Applikationen, Java Server Pages, JavaBeans und Servlets erstellt in Anlehnung an Stark, T.: J2EE – Einstieg für Anspruchsvolle, Addison-Wesley, Pearson Studium, München 2005 WS 2006/07 Prof. Dr. Andreas Schmietendorf

Übersicht zur Vorlesung HTML im Rückblick Java-Server-Pages (JSP) JSP und Datenbankanbindung via JDBC JavaBean-Komponentenmodell Servlets vs. JSP Idee der Tag-Bibliotheken WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf HTML im Rückblick WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf HTML im Rückblick HTML-Versionen im Vergleich (W3 Konsortiums): HTML (ohne Versionsnummer) - 1992 Überschriften, Textabsätze, Grafikreferenzen, Hypertext-Links HTML V2.0 - 1995 (noch akademisch geprägt) kleinster gemeinsamer Nenner für Web-Seiten HTML V3.2 - 1997 (Zusammenarbeit mit der Industrie) Tabellen, physische Textformatierungen HTML V4.0 - 1998 Verwendung von Frames (geteilte Seiten) Cascading Style Sheets - festlegen von z.B. Schriftgröße, -farbe, ... Verwendung von Scriptsprachen (z.B. JavaSkript) XHTML 1.0 Neuformulierung HTML 4.01 mit Hilfe von XML - 2000 WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Aufbau des Unified Ressource Locator: Ziel: einheitliche Schnittstelle zum Internet PROTOKOLL://SERVER/VERZEICHNISPFAD/DOKUMENT Protokoll: http, file, ftp, mailto, ftp, https, ... Server: IP-Adresse z.B. 164.19.200.20 alternativ Domain Name Service (DNS-Name) Verzeichnispfad: Verzeichnis innerhalb des lokalen Filesystems Dokument: eigentliche auszugebende Datei, über Dateiextension erfolgt die Wahl möglicher Plug-Ins (z.B. *.htm, *.pdf, ...) Beispiel eines URL: http://userpage.fu-berlin.de/~schmiete/index.htm WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Erstellung von HTML-Dokumenten: Einfache ASCII-Datei, neu erstellt oder übernommen z.B. von Word und mit HTML-Befehlen versehene Datei Verwendung einfacher Editoren (Vorschlag: UltraEdit-32) Nutzung von Generatoren (Bsp.: WebWizard, HotMeTaL, ...) Verwendung von Entwicklungsumgebungen wie z.B. MS Visual Interdev und Frontpage (für Formulare sinnvoll) Nutzung der Genratorfunktionen von Textverarbeitungsprogrammen wie z.B. MS Office (generiert auch XML) Einstiegsdatei typischerweise index.htm oder default.htm (*.htm unter DOS und *.html unter UNIX oder WindowsNT) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Möglichkeiten der Einstellung Angebot der Internet-Service-Provider, z.B. T-Online Im Rahmen von direkten Internet-Zugängen und eigenem HTTP-Server Verwendung akademischer Server-Systeme Häufig Probleme bei dynamischen Komponenten, z.B. zu startende Services WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Grundaufbau einer einfachen HTML-Datei: <HTML> <!-----Kommentarzeile-------> <HEAD> <TITLE>Dokumente und Informationen</TITLE> </HEAD> <BODY> <H1>Client/Server-Anwendungen</H1> <HR> </BODY> </HTML> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Merkmale der HTML-Syntax: Befehle meist aus einleitenden und abschließenden Tag, keine Beachtung von Groß- und Kleinschreibung Leerzeichen im Text zusammengefaßt, explizit mit &#160 Verschachtelte Tags führen zu Fehlern Zusätzliche Attribute bei einleitenden Tag möglich, z.B. die Ausrichtung einer Überschrift der 2. Kategorie. Bsp.: <h2 align=center>Ausgabetext<h2> Kommentare in HTML <!--Kommentar--> Sonderzeichen im Ausgabetext wie z.B. „ä“ sollten für die international richtige Darstellung durch „&auml“ ersetzt werden WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Vorgehensweise zur Erstellung von HTML-Systemen: Analyse der auszugebenden Daten (über was soll informiert werden) Navigationsstruktur grob entwerfen (z.B. Baumstrukturen verwenden) Grundgerüst der HTML-Datei erstellen Maskierungsvorschriften für Umlaute, Sonderzeichen beachten Seiten durch Zeilenumbrüche und Leerzeilen verwenden Verwenden von mehreren kleinen HTML-Dateien nicht größer als 64 KByte (typische Größen ca. 5 KByte) Audio/Video-Sequenzen sollten explizit angekündigt werden Test der erstellten Seiten unter verschiedenen Browser-Systemen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Übersicht zum HTML-Befehlsumfang (1): Textformatierung (Überschriften <H1>Text</H1>, Absätze <P>, Zentrieren <CENTER>, Zeilenumbruch <BR>, Trennlienie <HR> ) Textattribute physikalische (<I>...</I>, <B>...</B>, <blink>...</blink> logische <CITE>...</CITE>, <CODE>...</CODE>) Listen (z.B. numerierte und unnumerierte Listen) <OL> <UL> <LI> Äpfel </LI> <LI>… </LI> </OL> </UL> Grafiken anzeigen (<IMG SRC=„Adresse des Bildes>, die Angabe einer alternativen Text-Ausgabe ist möglich) Tabellen <TABLE> <TR> <TH>Kopfzeile der Tabelle</TH> </TR> <TR> <TD>Datenzelle</TD></TR> </TABLE> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Übersicht zum HTML-Befehlsumfang (2): Frames für Teilung der Seite in z.B. linken und rechten Bereich <frameset cols="20%,60%"> <frame src="cmgverw.htm" name="links"> <frame src="ov_cmg.htm" name="rechts"> </frameset> Hypertextlinks (Start- und Zielpunkt) Links auf Dokumente: <A HREF = „Adresse des Zieldokuments“>...</A> Link innerhalb der WWW-Seite: <A HREF = „#Marke“>...</A> <A NAME = „Marke“>...</A> Link auf Internetdienste: email, news, ftp, gopher, telnet Imagemaps Einteilung einer Grafik in anklickbare Bereiche WS 2006/07 Prof. Dr. Andreas Schmietendorf

Hypermediale Informationssysteme Übersicht zum HTML-Befehlsumfang (3): Multimedia- und Fremdprogrammreferenzen (Browserabhängig) Standard ist das OBJECT-Tag, bei MS Audio mit SOUND-Tag <OBJECT DATA=„test.avi“ TYPE=„video/x-msvideo></OBJECT> Java-Applets mit APPLET-Tag Interaktive Formulare zur Dateneingabe Formulardefinition: <FORM ACTION=mailto:...METHOD=POST> Eingabefelder: <INPUT TYPE=„text“ NAME=„VARIABLE“> Auswahlcheckboxen: <INPUT TYPE=„checkbox“ NAME=„VARIABLE“> Auswahllisten (Scrollbar): <SELECT NAME="BenchmarkNutzung“SIZE=4 MULTIPLE> <OPTION>Harwarekenndaten Bestätigungsbutton: <INPUT TYPE=„submit“ [NAME=„OK-Button“]> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Java Server Pages – JSP‘s WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Pendant zu folgenden Techniken: Microsofts Active Server Pages (kurz ASP) CGI-basierte Anwendungen oder auch PHP Einbetten von Java-Code zwischen HTML-Anweisungen Server-Seite, die dynamisch bei URL-Anforderung erzeugt wird Bestandteile einer JSP HTML-Elemente Skriptlets: Skript-Elemente in Java Java Servlets Java Beans Aus Bestandteilen der JSP wird ein Servlet generiert WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Bausteine einer JSP: Ausdrücke der Form <%= Java-Ausdruck %> Scriptlets der Form <% Java-Code %> Deklarationen der Form <%! Java-Code %> Kommentare: <%-- JSP-Kommentar %> <!-- HTML-Kommentar --> Java-Anweisungen in JSP-Ausdrücken werden nicht mit einem Semikolon abgeschlossen  jeweils nur eine Anweisung! WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html> <body> Hallo liebe Studenten der FHW Berlin! <hr> <p> Es ist jetzt genau: <%= new java.util.Date()%> </body> </html> Vergleich: System.out.print („Es ist jetzt genau „ + new java.util.Date()); WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages JSP-Seite unter JSP-examples: WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages JSP liegt nicht in einem eigenen Verzeichnis Nicht günstig im Falle einer Neuinstallation Besser ist die Anlage eines eigenen Projektverzeichnis http://localhost:8080/eigenes_verzeichnis/*.jsp Möglichkeiten zur Anlage eines solchen Verzeichnis: Verwendung des Sysdeo-Plugin unter Eclipse (GUI-Dialog) Editieren der Datei conf/server.xml im Tomcat Verzeichnis WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Erzeugen eines eigenen Arbeitsverzeichnisses & Unterverzeichnisse: css – Ablage von Cascading Stylesheets html – Aufnahme statischer HTML-Dokumente images – Aufnahme von Bildern jsp – Aufnahme von Java Server Pages (dynamische Dokumente) WEB-INF – enthält Web Deployement Descriptor  web.xml Eintrag in der server.xml-Datei unter Tomcat <Context path="/schmiete" docBase="C:\jakarta-tomcat-5\schmietendorf" debug="0" reloadable="true" crossContext="true" /> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Vordefinierte Variablen in einer JSP (verwaltet im Servlet-Container): request: javax.servlet.http.HTTPServletRequest Zugriff auf Informationen des Request-Header z.B. akzeptierte Dateiformate, Sprachen, Art des User-Agent response: javax.servlet.http.HTTPServletResponse Modifikation der Antwort des Servers an den Client Status-Code setzen oder Response-Header modifizieren out: javax.servlet.jsp.JspWriter Verwendet der Server um die Ausgabe an den Client zu senden WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html> <head> <title>Eine dynamische JSP-Seite</title> </head> <body> <h2>Verwendung vordefinierter Variablen</h2> <p><hr><p> <ul> <li>Hallo liebe Studenten der FHW Berlin! </li> <li>Es ist jetzt genau: <%= new java.util.Date()%> </li> <li>Sie sind: <%= request.getParameter("name")%> </ul> </body> </html> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Alternative Notation für JSP-Ausdrücke: Ggf. besteht die Forderung XML-konformer JSP‘s Bisherige Form: <%= Ausdruck %> XML-konforme Darstellung: <jsp:expression>Ausdruck</jsp:expression> Die XML-konforme Darstellung ist case-sensitiv Auch hier wird nur eine Java-Anweisung verwendet WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Bisherige Einschränkungen der verwendeten JSP‘s Nur jeweils eine Java-Anweisung Keine definierbaren lokale Variablen zur Speicherung von Werten Keine bedingten Entscheidungen (if-else) Keine Schleifen zur Wiederholung von Anweisungen Verwendung von sogenannten JSP-Scriptlets Allg. Form: <% beliebiger Java-Code%> Def. Einer Folge von Java-Befehlen JSP-Scriptlet Ausgaben müssen explizit definiert werden <% String userName = request.getParameter(“user“); out.println (Sie sind“ + userName); %> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Beispiele für JSP-Scriptlets Schleifen <% for (int i=0; i<10; i++) { %> HTML/JSP-Code <% } %> Switch-Abfrage <% switch (arg) { case 0 : %> HTML/JSP-Code <% case 1 : %> HTML/JSP-Code <% braek; case 2 : %> HTML/JSP-Code <% default: %> HTML/JSP-Code <% } %> JSP-Scriplets werden jeweils durch HTML-Code unterbrochen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages JSP-Scriptlets  zusammenhängende Java-Methode Definiert den Ablauf der JSP Vordefinierte Variablen request, response und out können als Parameter der Methode verstanden werden Servlet(Web)-Container sieht JSP als Java-Programm Public classMyJsp { public void response (Request req, Response, res) { // JSP-Scriplets // … } WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html> <head> <title>Eine dynamische JSP-Seite</title> </head> <% String userName = request.getParameter("name");%> <body> <h2>Verwendung vordefinierter Variablen - Beispiel 3</h2> <p><hr><p> <ul> <li>Hallo liebe Studenten der FHW Berlin!</li> <li>Es ist jetzt genau: <%= new java.util.Date()%></li> <% if (userName != null) { %> <li>Sie sind: <%= userName %></li> <% } else { %> <li>Sie sind: unbekannt</li> <% } %> </ul> </body> </html> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages else-Zweig  WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages JSP-Deklarationen: Variablen innerhalb der JSP-Methoden  pot. Probleme Lokale Variablen Verlieren Wert nach ausgeführten Request Zählen der Zugriffe auf eine Seite Notwendige Speicherung des Anzahl Zugriffe Verwendung von JSP-Deklarationen (vgl. globale Variablen) Form: <%! Java-Code außerhalb des JSP-Scriplet %> JSP-Deklarationen sind nicht Bestandteil der JSP-Scriplet! WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html> <head> <title>Eine dynamische JSP-Seite</title></head> <%! private int count =0;%> <% String userName = request.getParameter("name");%> <body> <h2>Verwendung vordefinierter Variablen - Beispiel 4</h2> <p><hr><p> <ul> <li>Hallo liebe Studenten der FHW Berlin!</li> <li>Es ist jetzt genau: <%= new java.util.Date()%></li> <% if (userName != null) { %> <li>Sie sind: <%= userName %></li> <li>Besucher: <%= ++count %></li> <% } else { %> <li>Sie sind: unbekannt</li> <% } %> </ul> </body> </html> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages  14. Aufruf 15. Aufruf  WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Weiteres Beispiel einer möglichen JSP-Deklaration: <%! Private boolean existUser (javax.servlet.SerletRequest req, String userName){ // Test ob der User schon vorhanden ist if (request.getParameter(userName) == null){ return false; } return true; }%> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Vordefinierte Variablen einer JSP: HTTP als zustandsloses Protokoll Server bedient nur die aktuelle Anfrage Client ist dem Server danach unbekannt Komplexe Applikationen bedingen: Client muss ggf. wieder erkannt werden Zwischenspeicherung bestimmter Zustände Kontexte des Web Containers Stellen verschiedene Gültigkeitsbereiche für Variablen zur Verfügung 3 Speicherbereiche werden genutzt WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages 3 Speicherbereiche für Anfragen an den Webservers: Application-Scope (Informationen über die Lebenszeit des Servers) Globale, statische Variablen Art der Applikationsnutzung Session-Scope (Informationen ab dem 1. Aufruf) Speicherung einer Session-ID – z.B. eindeutige Kundennummer Time-out Parameter Request-Scope (lokaler Gültigkeitsbereich) Sind nur während der Bearbeitung einer Antwort an den Client gültig Verfallen nach Beantwortung der Client-Anfrage WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Kontrolle von JSPs durch folgende Speicherbereiche: request – Variable vom Typ javax.servlet.http.HTTPServletRequest Bezug zum Request-Scope Mittels Methode setAttribute() können Objekte hinzugefügt werden response – Variable vom Typ javax.servlet.http.HTTPServletResponse Manipulation der Antwort an den Server Z.B. Cookies an den Browser senden oder Status-Code setzten WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Kontrolle von JSPs durch folgende Speicherbereiche: out – Variable vom Typ javax.servlet.jsp.JspWriter Bezieht sich auf den Ausgabestrom zwischen Server und Client Ermöglicht die Ausgabe von beliebigen Objekten bzw. Basistypen session - Variable vom Typ javax.servlet.http.HttpSession Bezug auf den Session-Scope (z.B. beim Login) Mit setAttribute() können Werte zur Sitzung abgespeichert werden  Nutzerspezifische Daten über mehrere Sitzungen  Cookie-Technik WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Kontrolle von JSPs durch folgende Speicherbereiche: application – globale Variable zwischen Applikationen eine Webservers Bezug auf den Application-Scope Parallel laufende Anwendungen können so Ressourcen teilen config - Variable vom Typ javax.servlet.jsp.ServletConfig Bietet den Zugriff auf serverseitige Initialisierungsparameter der JSP Werte können aus der web.xml gelesen werden z.B. Konfigurationsdaten für den Zugriff auf Datenbanken WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Kontrolle von JSPs durch folgende Speicherbereiche: pageContext - Variable vom Typ javax.servlet.jsp.PageServlet Realisiert den Zugriff auf Seitenattribute einer JSP Weiterleiten eines Requests Einfügen einer weiteren Seite page – Synonym des Schlüsselwortes this in Java Ist vom Typ java.lang.Object Soll ggf. die Verwendung anderer Scriptsprachen unterstützen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages JSP Direktiven (Bezug zum Servlet-Container): page (kein Bezug auf die gleichnamige Variable) Eigenschaften der JSP als Java-Klasse Angabe einer Superklasse, Verhalten im Fehlerfall, Ausgabepufferung include Beschreibt den modularen Aufbau einer JSP-Anwendung Beziehung zu gemeinsam genutzten JSP-Seiten (z.B. Menüs) taglib Verhalten des JSP-Dokumentes auf der markup-Ebene z.B. Möglichkeiten zur Definition eigener tags WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Page – Seitendirektiven 1: Klassen und Packages importieren <%@ page import=“java.util.Date“ %> <%@ page import=“java.util.Date“, “java.math.*“ %> JSP‘s ableiten von einer Superklasse (nicht generell unterstützt!) Package ownjsp.fhwbln.jsp; Import javax.servlet.jsp.HttpJspPage; Public class MyJsp implements HttpJspPage { // eigener Code } Nutzung: <%@ page import=“ownjsp.fhwbln.jsp.MyJsp“ extends=“MyJsp“ %> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Page – Seitendirektiven 2: Parallele Bearbeitung von Client-Anforderungen <%@ page isThreadSafe=“true“ %> - Standardeinstellung <%@ page isThreadSafe=“false“ %> errorPage – Verweis auf eigene Fehlerseiten <%@ page errorPage=“Fehlerseite.jsp“ %> page-Attribut contentType (MIME-Type  PlugIn Auswahl) Teilt dem Browser die Art des nachfolgenden Dokumentes mit Realisierung mehrsprachiger Applikationen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages Beispiel einer einfachen Login-Prozedur Bestandteile eines komplexen Web-Auftritts Login-Seite  Login.jsp Authentifizierung des Benutzers  Einstieg.jsp Inhalt des eigentlichen Portals (z.B. Frame)  Content.jsp Fehlerseite bei gescheiterter Anmeldung  LoginError.jsp WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html><head><title>Eine dynamische JSP-Seite</title></head> <body> <h2>Ein einfaches Login für Web-Anwendungen</h2> <p><hr><p> <form method="post" action="Einstieg.jsp"> Login: <INPUT type="text" name="user" /> <INPUT type="submit" value="Absenden" /> <img src="../images/fhw.jpg" > </form> <% if (request.getParameter("msg") !=null){ out.println (request.getParameter("msg")); } %> </body> </html> Login.jsp WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <%@ page session="true" %> <%@ page contentType="text/html; charset=UTF-8" %> <%@ page errorPage="LoginError.jsp" %> <% // Test ob noch eine entsprechende Session besteht if (session.getAttribute("USER") == null) { // Lesen des Parameters vom request String userName = request.getParameter("user"); // Test ob der Parameter existiert if (userName == null) { throw new Exception ("Nutzername nicht vorhanden!"); } // Test ob der Parameter gültig ist if (! userName.equals("Thomas")) { %> Login.jsp WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <jsp:forward page="Login.jsp?msg=Benutzer nicht bekannt!" /> <% } // Hinzufügen des Parameters zur aktuellen Session session.setAttribute ("USER", userName); %> <%-- keine Ausnahmefehler - weiter zu Content.jsp --%> <jsp:forward page="Content.jsp" /> Fortsetzung - Login.jsp WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Server Pages <html> <head> <title>Eine dynamische JSP-Seite</title> </head> <body> <h2>Herzlich willkommen im Portal</h2> <p><hr><p> Sie sind Benutzer: <%= session.getAttribute("USER") %> </body> </html> Der Einstieg ins Portal  WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC Erstellen einer Instanz des JDBC-Treibers Erstellen einer Verbindung zur DB über die JDBC-Treiberinstanz Erstellen von Anweisungen die die DB-Verbindung verwenden Ausführen der entsprechender SQL-Anweisungen Prüfen auf vorhandenen Inhalt des ResultSet Auswerten des ResultSet Einfügen in die Felder der HTML-Tabelle Beenden entsprechender Java-Anweisungen Schließen des Statement und der Connection WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC – Beispiel 1 <html> <head> <title>JSP - JDBC Zugriff</title> </head> <%@page language="java" import="java.sql.*" %> <body> <h2>Datenbankabfrage mittels JSP und JDBC</h2> <table border="1" with="400"> <tr> <td><b><i>ID</i></b></td> <td><b><i>NAME</i></b></td> <td><b><i>VORNAME</i></b></td> <td><b><i>ORT</i></b></td> </tr> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC – Beispiel 2 <% // Schritt 1 Class.forName("org.firebirdsql.jdbc.FBDriver"); // Schritt 2 Connection myConn = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050: C:/Programme/Firebird/examples/employee.gdb","sysdba","masterkey"); // Schritt 3 Statement stmt = myConn.createStatement(); // Schritt 4 ResultSet myResultSet = stmt.executeQuery("select * from mitarbeiter"); // Schritt 5 if (myResultSet != null) { // Schritt 6 while (myResultSet.next()) { String id = myResultSet.getString(1); String name = myResultSet.getString(2); String vorname = myResultSet.getString(3); String ort = myResultSet.getString(4); %> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC – Beispiel 3 // Schritt 7 <tr> <td><%= id %></td> <td><%= name %></td> <td><%= vorname %></td> <td><%= ort %></td> </tr> <% // Schritt 8 } /* Ende von while */ } /* Ende von if */ // Schritt 9 und 10 stmt.close(); // Schritt 11 MyConn.close(); %> </table></body></html> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JSP und JDBC Typische Probleme des aufgezeigten Vorgehens: Keine Trennung von Darstellung und Anwendungslogik Design der Oberfläche kann nicht separat entwickelt werden Hohe Fehleranfälligkeit (schwer eingrenzbar) Arbeitsteilige Softwareentwicklung ist schwierig Geringe Lesbarkeit und daraus folgend schwer wartbar  Verbesserung der Situation mit Hilfe der JavaBeans  MVC – Model View Controller Pattern WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf JavaBeans WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Unterstützung der Idee einer arbeitsteiligen Softwareentwicklung Spezialisierte Zulieferunternehmen IV-technische Komponenten Domain- bzw. fachspezifische Komponenten Reduktion der Erstellungszeiten von Informationssystemen Sprachumfang von Java wurde nicht erweitert! Montage der Komponenten in entsprechenden Bean-Builder Tools Java-Studio (Entwicklung bei SUN aber eingestellt) VisualAge for Java (Umfangreiche Anwendung von JavaBeans) BDK Bean Development Kit (http://java.sun.com/beans/docs) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans SUN’s ursprüngliche Definition der JavaBeans „JavaBeans components, or Beans, are reusable software components that can be manipulated visually in a builder tool. Beans can be combined to create traditional applications, or their smaller web-oriented brethren, applets. In additional, applets can be designed to work as reusable Beans.“ WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Introspection (Selbstbeobachtung) - Beans können zur Laufzeit Auskunft zu den gebotener Funktionen und Eigenschaften geben Auf den direkten Quellcode-Zugriff kann so verzichtet werden Implizite Introspection-Funktion bietet alle Methoden des Bean Explizite Introspection-Funktion über das BeanInfo Interface Customisation (Anpassung) - Beans können über die Nutzung von Dialogen angepasst werden. Angebot an Standard-Dialogen Angebot an angepassten Dialogen Event-Handling (Ereignisverarbeitung) - Verwendung des Delegation-Event-Handling-Model (Event-Sources und -Listener) Persistenz - Möglichkeit der dauerhaften Abspeicherung alter und neuer Werte von Properties WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Methoden - werden genutzt um entsprechende Properties des Beans zu ändern. Alle als „public“ definierte Methoden werden in einem Bean-Builder-Tool angeboten. Einschränkung der angebotenen Methoden über BeanInfo-Klasse Einschränkung auch beim Import des Bean in ein Builder-Tool möglich Properties - (Eigenschaften) - Kapseln Daten einer Instanz eines Bean und können von außen abgefragt und geändert werden Signature pattern für Properties: getProperty() / setProperty() Simple Properties - repräsentieren einen einzelnen Wert Indexed Properties - Array gleichen Datentyps Bound Properties - Kombination eines Properties mit einem Event (z.B. ausgelöst nach der Änderung eines Properties) Constrained Properties - Zustimmung zur Änderung einer Propertie von z.B. einem anderen Bean holen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Softwarekomponentenmodell  JavaBeans (aber != EJB‘s) Konfigurierbare Container Kapselung von Anwendungslogik Speicherung von Daten (persistieren) Trennung von Anwendungslogik und Darstellung Auslagerung von Logik aus den JSP‘s Bessere Wartbarkeit Entkopplung der Schichten WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Eigenschaften: Besitzen einen leeren Konstruktor Sollten keine öffentlichen (public) Instanzvariablen besitzen Zustände werden über Zugriffsmethoden manipuliert Mögliche Methodensignaturen: setXxx getXxx isXxx (bei booleschen Attributen) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Beispiel einer einfachen JavaBean: package cs.j2ee.beans /* Speicherung einer Fahrtroute */ public class RouteBean /* Startpunkt der Fahrtroute */ private String start public String getStart() { return start; } public void setStart (String start) { this.start = start; WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Verwendung von JavaBeans in JSP‘s: <jsp:useBean id=“route“ class=“cs.j2ee.beans.RouteBean“ /> oder <% cs.j2ee.beans.RouteBean route = new cs.j2ee.beans.RouteBean (); %> oder als Interface <jsp:useBean id=“route“ type=„typ.Interface“ class=“cs.j2ee.beans.RouteBean“ /> bzw. <% typ.Interface route = new cs.j2ee.beans.RouteBean (); %> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Zugriff auf Attribute der JavaBean: Auslesen von Property-Werten <jsp:getProperty name=“route“ property=“start“ /> oder <%= route.getStart() %> Setzen von Property-Werten <jsp:setProperty name=“route“ property=“start“ value= “Dresden“/> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Steuerung des Gültigkeitsbereichs von JavaBean: <jsp:useBean id=“route“ class=“cs.j2ee.beans.RouteBean“ scope=“session“ /> Steuerung über das scope-Attribut: page – Variablen sind nur innerhalb der aktuellen Seite gültig session – gültig bis Browser geschlossen wird Verwendung für die Nutzerauthentifizierung Ablage aktuell ausgewählter Datensätze application – für den applikationsübergreifenden Datenaustausch request – Variablen sind für die Dauer eines Request gebunden WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Beans Vorteile von JavaBeans: Wiederverwendung von Quellcode (JSP‘s & Java-Objekte) Verständlichkeit Vereinfachung der Struktur von JSP‘s Darstellung getrennt von der Java-Implementierung Kapselung JSP‘s interagieren mit dem Benutzer JavaBeans realisieren die Anwendungslogik Verwaltung zusammengehöriger Daten WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Servlets WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets „Server side applets, without face“ Bestandteile von Web Applicationen Bieten die Funktionalität von CGI-Skripts Kontext für Web Applikationen Unterstützung mehrerer Servlets Unterstützung mehrerer HTML-Seiten Unterstützung mehrerer Java Server Pages Filter für bestimmte Datentypen WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Das generierte Servlet unserer ersten JSP - 1: Unter: C:\jakarta-tomcat-5\tomcat50-jwsdp\work\Catalina\localhost\schmiete\org\apache\jsp\jsp package org.apache.jsp.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class beispiel1_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.Vector _jspx_dependants; public java.util.List getDependants() { return _jspx_dependants; } WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Das generierte Servlet unserer ersten JSP - 2: public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Das generierte Servlet unserer ersten JSP - 3: try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Das generierte Servlet unserer ersten JSP - 4: out.write("<html>\r\n"); out.write("<body>\r\n"); out.write("Hallo liebe Studenten der FHW Berlin!\r\n"); out.write("Es ist jetzt genau:\r\n"); out.print( new java.util.Date()); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Das generierte Servlet unserer ersten JSP - 5: } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); }}} WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Alles was mit JSPs realisiert werden kann, kann auch unter Verwendung von Servlets erreicht werden Potentielle Nachteile von JSPs: Mischung von JSP und HTML-Code wird bei komplexen Java-Strukturen unübersichtlich Mittels der Variable out (Typ javax.servlet.jsp.JspWriter) können keine Binärdaten ausgegeben werden (z.B. Bilder) JSP können HTML-Dokumente erzeugen, deutlich schwieriger ist es bei anderen Datenformaten Fehler werden häufig erst zur Laufzeit erkannt  Servlets stärker in der Funktionalität, als in der Darstellung WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Ein selbst erzeugtes Servlet - 1: package cs.j2ee.servlets; import java.util.Date; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; public class HelloWorld extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Ein selbst erzeugtes Servlet - 2: // set the contentType response.setContentType("text/html;charset=ISO-8859-1"); // get the PrintWriter PrintWriter out = response.getWriter(); // create content StringBuffer content = new StringBuffer(); content.append("<!DOCTYPE html PUBLIC \"-//w3c//dtd html 4.0 transitional//en\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">"); content.append("<HTML><HEAD><TITLE>Ein selbst geschriebens Servlet</TITLE></HEAD>"); WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Ein selbst erzeugtes Servlet - 3: content.append("<BODY><FONT color=\"green\" face=\"arial\">"); content.append("<CENTER>Hallo Studenten der FHW Berlin</CENTER><UL>"); content.append("<LI>Es ist jetzt genau "); content.append(new Date()); content.append("</LI></UL></FONT></BODY></HTML>"); // write out out.print (content.toString()); } WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Schritte zur Ausführung des Servlets: Übersetzen des Servlets mittels eines Java-Compilers Verwendung einer entsprechende Entwicklungsumgebung Verwendung eines entsprechende Build-Files (Tool Ant) Anlegen einer entsprechenden Verzeichnisstruktur im Web-Server /WEB-INF/sources – Java Quelldateien /WEB-INF/classes – Java Klassendateien /WEB-INF/lib – benötigte Klassenbibliotheken /deploy_lib – Klassen die nur zur Übersetzung benötigt werden Web Deployment Decsiptor (web.xml) erstellen bzw. bearbeiten WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Der Web Deployment Descriptor - 1: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Client/Server-Programmierung</display-name> <description> FHW Berlin </description> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Der Web Deployment Descriptor - 2: Für jedes Servlet benötigen wir ein <servlet>-Tag Servlet wird bereits bei der Initialisierung geladen Prio 1-10 (1 - zuerst geladen, 10 – zuletzt geladen) <!-- Bind Servlet to symbolic name --> <servlet> <servlet-name>WelcomeServlet</servlet-name> <servlet-class>cs.j2ee.servlets.HelloWorld</servlet-class> <load-on-startup>2</load-on-startup> </servlet> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Der Web Deployment Descriptor - 3: Verknüpfen des Servlets mit einer URL Servlets liegen physikalisch an einem anderen Ort! Keine relativen Adressen innerhalb des HTML-Codes Verweise relativ zur virtuellen Adresse des Servlet setzen!! <!-- Map servlet to URL --> <servlet-mapping> <servlet-name>WelcomeServlet</servlet-name> <url-pattern>/servlets/HelloWorld</url-pattern> </servlet-mapping> </web-app> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Java Servlets Java Server Pages Servlets Übersetzungszeitpunkt Zur Laufzeit von der JSP-Engine erzeugt, kann ggf. vorkompiliert werden. Muss manuell übersetzt werden. Bindung an URL Unter dem tatsächlichen Pfad, innerhalb der Web-Applikation erreichbar. Wird über den Web Deployment Descriptor an eine oder mehrere symbolische URL‘s gebunden. Vordefinierte Variablen Stehen direkt zur Verfügung. Müssen über Methoden aus dem Request bzw. Response gebunden werden. HTML-Code Kann direkt eingefügt werden. Muss über print() und write() ausgegeben werden. Dokumenttypen Beschränkt auf textbasierte Dokumente. Unterstützt sowohl Text-, als auch Binärformate. Services Beschränkt auf eine einzige Service-Methode. Eigene Servicemethoden für jeden Request-Typ (PUT, GET, POST) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Idee der Tag-Bibliotheken (Taglibs) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Verwendung eigener Tags Vorraussetzungen für eigen definierte Tags: Implementierung der Funktionalität  Tag-Handler Package: javax.servlet.jsp.tagext.* Zusammenfassen in Tag-Bibliotheken Steuerung des Lebenszyklus eines Tag doStartTag() – Aufruf bei einem öffnenden Tag (Initialisierung) doAfterBody() – Aufruf unmittelbar vor dem schließenden Tag doEndTag() – Aufruf nach dem schließenden Tag (Freigabe) WS 2006/07 Prof. Dr. Andreas Schmietendorf

Beispiel eines Tag-Handlers package cs.j2ee.tags; … import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class SimpleTag extends TagSupport(){ public int doStartTag(){ try { JspWriter out = pageContext.getOut(); out.print (new Date()); } catch (IOException ioex){ ioex.printStackTrace(); } return (SKIP_BODY); WS 2006/07 Prof. Dr. Andreas Schmietendorf

Tag Library Descriptor Festlegung des zum Tag-Handler korrespondierenden Tags: xml-Datei mit der Extension *.tld Festlegung der taglib-Version Festlegung der unterstützten JSP-Version Festlegung von Namensräumen für die Taglibs Mapping zwischen Java-Klasse und Tag herstellen Reservierte Namensräume: Java, javax, jsp, jspx, servlet, sun, sunw Leere Präfixe sind ebenfalls nicht erlaubt WS 2006/07 Prof. Dr. Andreas Schmietendorf

Tag Library Descriptor <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>j2ee</short-name> <uri>www.masterclass.de/j2ee</uri> <description>Example Tag</description> <tag> <name>date</name> <tag-class>cs.j2ee.tags.SimpleTag</tag-class> <description>…</description> </tag> </taglib> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Tag Library Descriptor Einbinden des TLD in die eigene Webapplikation: Direktes Einbinden in das Webverzeichnis Sichtbar unter der URL des Webauftritts http://localhost:8080/schmietendorf/tlds Einbindung des TLD in den Deployment Descriptor Verfügbar unter einer virtuellen URL (WEB-INF-Ordner) Eintrag in die entsprechende web.xml <taglib-uri> & <taglib-location> Tag-Bibliotheken bleiben dem Benutzer verborgen Verwendung in der JSP <%@ taglib uri=„/j2ee-tags“ prefix=„j2ee“ %> Tag im HTML-Body: <j2ee:date /> WS 2006/07 Prof. Dr. Andreas Schmietendorf

Prof. Dr. Andreas Schmietendorf Verfügbare Taglibs JSTL – JavaServer Pages Standard Tag Library Standard-API für Tags von SUN URL: http://java.sun.com/products/jsp/jstl Apache Jakarta Taglibs Benchmarking, Logging, Cache, JMS , … URL: http://jakarta.apache.org/taglibs … WS 2006/07 Prof. Dr. Andreas Schmietendorf