920 likes | 1.06k Views
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. Übersicht zur Vorlesung. HTML im Rückblick
E N D
Programmierung von Client/Server-AnwendungenJ2EE – Web-Applikationen, Java Server Pages, JavaBeans und Servletserstellt in Anlehnung an Stark, T.: J2EE – Einstieg für Anspruchsvolle,Addison-Wesley, Pearson Studium, München 2005 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 Prof. Dr. Andreas Schmietendorf
HTML im Rückblick 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 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 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) 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 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> 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   • 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 „ä“ ersetzt werden 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 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> 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 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“]> Prof. Dr. Andreas Schmietendorf
Java Server Pages – JSP‘s 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 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! 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()); Prof. Dr. Andreas Schmietendorf
Java Server Pages JSP-Seite unter JSP-examples: 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 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" /> 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 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")%> </li> </ul> </body> </html> Prof. Dr. Andreas Schmietendorf
Java Server Pages 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 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); %> 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 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 // … } } 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> Prof. Dr. Andreas Schmietendorf
Java Server Pages else-Zweig 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! 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> Prof. Dr. Andreas Schmietendorf
Java Server Pages 14. Aufruf 15. Aufruf 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; }%> 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 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 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 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 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 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 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 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“ %> 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 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 Prof. Dr. Andreas Schmietendorf
Java Server Pages 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 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 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 Prof. Dr. Andreas Schmietendorf
Java Server Pages 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 Prof. Dr. Andreas Schmietendorf
JSP und JDBC Prof. Dr. Andreas Schmietendorf