Über einen Web-Browser gelangt der potentielle Kunde zur Einstiegseite der Web-Anwendung. Auf dieser ist neben dem Firmen-Logo ein Authentifizierungsdialog platziert, um den Kunden zu identifizieren. Sofern es sich um einen Interessenten handelt, werden bei dieser Gelegenheit seine relevanten Kundeninformationen (z.B. Name, Vorname, Lieferadresse, Kontonummer) über einen Kundendialog erfasst.
Nach dem erfolgreichen Anmelden beim eShop kann der Kunde in einem Menü auswählen, ob er seine bisher in einen virtuellen Warenkorb gelegten Produkte anschauen respektive bestellen möchte. Ferner steht es ihm offen, mit Hilfe eines Kataloges im gesamten Produktspektrum zu navigieren, die erreichten Produkte in einer Detailansicht mit Abbildung zu betrachten und sie anschließend dem Warenkorb zuzuführen.
Der Katalog ist hierarchisch aufgebaut. Produkte mit ähnlichen
Merkmalen können zu Produktgruppen zusammengefasst werden. Damit ist
es möglich, dem Kunden eine übersichtliche und kompakte Darstellung
des Produktspektrums zu präsentieren, indem ihm zuerst nur die Katalogeinträge
der obersten Ebene dargestellt und im weiteren Verlauf seiner Sitzung die
Produktgruppen aufgeklappt werden, welche er wünscht.
- Porzellan | ||
- Geschirr | ||
Kaffeetassen | lieferbar | 17,83 Eur |
Teller | nicht lieferbar | 15,79 Eur |
+ Besteck | ||
- Küchenhilfen | ||
+ elektrische ... | ||
+ konventionelle ... |
Die Navigation durch die Produkthierarchie soll ähnlich gestaltet sein wie die eines File Browsers durch den Verzeichnisbaum.
Jeder Eintrag im Katalog, zu welchem es keine Untereinträge gibt, stellt einen Verweis auf die Detailansicht des jeweiligen Produktes dar. Ein Eintrag im Produktkatalog besteht aus:
Über eine Suchfunktion kann der Kunde Anfragen zu Produkten formulieren. Als qualifizierende Argumente stehen ihm alle Attribute eines Produktes zur Verfügung. Beispielsweise kann er nach Produkten suchen, deren Preis unter 10 Euro liegt.
Sofern der Benutzer sich den Inhalt des Warenkorbes anzeigen lässt, bekommt er neben den eingestellten Produkten auch den Gesamtpreis präsentiert.
Über einen Button kann der Kunde den Inhalt des Warenkorbs bestellen. Der Bestellung folgt eine explizite Bestätigung und das Leeren des Warenkorbs. Um den Bestellvorgang zu atomarisieren, wird der Inhalt eines Warenkorbes direkt einem Kunden zugeordnet und als Transaktion ausgeführt.
Jeder in den Warenkorb eingestellte Artikel soll in der DB als möglicherweise verkauft vermerkt werden, um zu vermeiden, daß ggf. mehrere Kunden gleichzeitig einen Artikel in ihren Warenkorb legen und es bei der Auslieferung zu Problemen und möglicherweise zu Lieferverzögerungen führt, d. h. dem Warenkorb liegt ein Transaktionskonzept zugrunde.
Um die Web-Anwendung auch ohne Systemkenntnisse verwalten zu können, sollen die wichtigsten Aufgaben eines Administrators über eine HTML-Oberfläche zugänglich sein. Dem Administrator kommt im wesentlichen die Aufgabe zu, ausgegangene Waren nachzubestellen und Änderungen an Artikeln in die Datenbank einzubringen.
Der Administrator steigt genauso wie ein Kunde über die Startseite der Web-Anwendung ein. Bei Benutzung des Produktkataloges bekommt er fast die gleichen Inhalte wie ein Kunde zu sehen; es erscheint lediglich der aktuelle Lagerbestand an Stelle der Ausgaben «lieferbar» oder «nicht lieferbar».Hinzu kommt, dass der Bestand in einer anderen Farbe präsentiert wird, falls der Meldebestand des Produktes erreicht ist. Die Produktseite erlaubt das Editieren der zu einem Produkt gehörenden Felder. Über einen Button kann der Administrator veranlassen, dass neue Ware bestellt wird. Für jedes Produkt gibt es eine festgelegte Bestellmenge, die ebenfalls auf dieser Seite geändert werden kann. Ein weiterer Button erlaubt das Übernehmen der Änderungen in die Datenbank. .
Der Administrator soll zudem eine Liste von Meldungen einsehen können,
die während des Betriebs entstanden sind. Eine Meldung wird immer
dann generiert, wenn bei einer Bestellung der Meldebestand erreicht oder
unterschritten wird. Eine Meldung besteht aus einem Meldungstext der Abteilung,
für welche die Meldung bestimmt ist und einem Produktbezug, der auf
die zugehörige Detailansicht des Produktes verweist.
Dokumentieren Sie Ihren Entwurf in HTML. Fertigen Sie eine Gesamtübersicht
Ihrer Implementierung in UML in Form eines Klassendiagrammes, den identifizierten
Use-Cases und den Sequenzdiagrammen. Erstellen Sie ein ER-Modell für
die Daten der Datenbank und dokumentieren Sie dieses anhand der (min,max)
- Notation. Beschreiben Sie die in der Gruppe vorgenommene Aufgabenteilung.
Die gesamte Dokumentation samt den implementierten Quellen ist in Form
einer CD abzugeben. Eine Vorlage für die Dokumentation finden Sie
unter "Download/public-Verzeichnis
zum Labor/doc-template".
GET ist die Standardmethode, um Daten zwischen Client und Server zu kommunizieren. Verlangt ein Client von einem Server eine bestimmte HTML-Seite, richtet er einen GET-Request an den Server. Dieser antwortet mit der entsprechenden Seite, sofern er diese in seiner Web-Site verwaltet.
Enthält eine Seite interaktive Komponenten, wie Texteingabefelder, check- oder radio buttons usw., muß der Server über deren Zustand in Kenntnis gesetzt werden, um entsprechend reagieren zu können. Die Zustände dieser interaktiven Komponenten sog. Formulardaten werden via POST-Methode an den Server gesendet - (ge-posted). Der Server nimmt die Daten entgegen und beantwortet sie entsprechend den gesendeten Daten mit einer HTML-Seite, einem Bild, einer Sound-Datei etc., um den Empfang zu bestätigen.
Es können auch mittels GET Daten vom Client an den Server gesendet werden.
Im Falle von Interaktionen muss der Server die Client-Eingaben übernehmen, verarbeiten und die Ergebnisse in Form einer dynamischen Seite dem Client zurückgeben. Für die Datenverarbeitung ist eine anwendungsspezifische Logik auszuführen. Hierzu wird dem Server bei der Konfiguration mittels einer URL mitgeteilt, daß er alle Anforderungen, die z. B. the-server/servlet/... lauten, an ein Servlet weiterreichen soll. Dafür wird kein eigener Prozeß erzeugt. Wird ein Servlet zum ersten Mal angesprochen, erzeugt der Server eine Instanz dieses Servlets und leitet die Anforderung an dieses Servlet weiter. Weitere Anforderungen werden ebenfalls von dieser Instanz, ggf. in mehreren Threads, bearbeitet.
Jedes Servlet bietet nach außen immer dieselbe Schnittstelle. In Java wird dies dadurch realisiert, daß es von der Klasse HttpServlet abgeleitet wird und somit auch dessen Standardimplementierungen erbt. Die Klasse HttpServlet stellt neben dem Initialisierungsmechanismus weitere Methoden für die unterschiedlichen Übertragungsmethoden (GET, POST, ...) bereit, die in der abgeleiteten Klasse anwendungsspezifisch überschrieben werden.
Die Initialisierungsmethode init() wird angestoßen, wenn der Web Server eine entsprechende Servlet-Instanz erzeugt. Das kann bei entsprechender Konfiguration beim Starten des Web Servers oder bei der ersten Anfrage an die Dienste dieses Servlets sein.
Richtet der Client eine GET-Anfrage an das Servlet, wird dessen doGet()-Methode aufgerufen, wenn es bereits existiert. Anderenfalls erzeugt der Server zunächst eine Instanz, ruft zunächst deren init() und dann erst doGet() auf. Bei POST-Anfragen wird statt doGet() die Methode doPost() ausgeführt.
Beiden do-Methoden werden zwei Parameter übergeben, die vom Typ HttpServletRequest und HttpServletResponse sind. HttpServletRequest enthält Angaben zur übermittelten Anfrage und HttpServletResponse stellt den Antwortkanal des Servlets dar.
public void doGet(HttpServletRequest req, HttpServletResponse res) { ... } public void doPost(HttpServletRequest req, HttpServletResponse res) { ... }In den TOMCAT - Beispielen (W:\ASF\Apache Tomcat 4.0\webapps\examples) sind verschiedene Beispiele enthalten, die zeigen, wie ein Servlet programmiert und wie mit der Außenwelt kommuniziert wird. Außerdem finden Sie im Anhang noch ein kleines Beispiel.
Für die Konfiguration und Inbetriebnahme von Tomcat müssen folgende Schritte ausgeführt werden.
WEB-INF/classes
Für die Anwendung muß ein <Context>- Eintrag eingefügt
werden. Die folgenden Attribute müssen angepaßt werden :
° path. Der <Context
path> ist der Prefix für die Anfrage ( taucht in der URL wieder
auf )
° docBase. Hier
muß
document root für die Anwendung angegeben werden.
gestartet werden.
Zum Stoppen heißt das Kommando : shutdown
Über URL "http://server-name:8080/path" ist die Anwendung
zu erreichen. (server-name z.B. lkt1-01 )
Bevor der Treiber eingesetzt werden kann, muß er geladen und bei Java's driver manager (java.sql.DriverManager) registriert werden. Der entsprechende Java-Befehl lautet:
Class.forName("oracle.jdbc.driver.OracleDriver");Der Treiber wird von Oracle geliefert und befindet sich in der Datei W:\Oracle\Ora81\jdbc\lib\classes111.zip.
Um die Java-Klasse laden zu können, muss die Umgebung des Java-Programms entsprechend angepasst werden: Dazu ist die Umgebungsvariable CLASSPATH zu setzen.
Siehe auch FAQs.
Über den HTML-Tag form wird eine Form eingeleitet. Der Tag gibt an, welche Methode zur Übermittlung der Daten verwendet (POST oder GET) und welche Aktion ausgeführt werden soll, wenn diese an den Server geschickt werden. Hinter der Aktion steht ein URL, der wiederum ein Servlet bezeichnet, dessen doPost()-Methode aufgerufen werden soll (<form ... method="POST">).
Folgendes Beispiel zeigt eine HTML-Form:
... 1: <form action="http://the-server/path/servlet/TakeIt" method="POST"> 2: <input type="hidden" name="maske" value="m1"> 3: <input type="text" name="Kommentar" value="-"> 4: <input type="submit" name="Bestaetigung" value="OK"> 5: <input type="reset" name="xx" value="Zuruecksetzen"> 6: </form> ...Die Zeile 1 leitet das Formular ein. Bei Bestätigung der Daten wird die doPost-Methode des TakeIt-Servlets aufgerufen und ihm die Parameter in HttpServletRequest übergeben. Zeile 6 beendet die Formularbeschreibung.
Die Zeile 2 legt ein Feld an, das dem Anwender verborgen bleibt. Felder vom Typ «hidden» dienen im wesentlichen dazu, Kontextinformationen in das Formular einzubauen, wie z. B. den Maskennamen. Der Name des Feldes ist «maske» und dessen Inhalt «m1».
Mit der Zeile 3 wird ein (einzeiliges) Texteingabefeld mit dem Namen «Kommentar» und dem Default-Inhalt «-» geschaffen.
Das Ergebnis sieht wie folgt aus (der OK-Button ist hier ohne Funktion):
Das Servlet nimmt lediglich die Parameter entgegeben und gibt sie in HTML formatiert aus.
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TakeIt extends HttpServlet { public void init(ServletConfig config) { // do something } public void doGet(HttpServletRequest req, HttpServletResponse res) { try { PrintWriter out = res.getWriter(); out.println(/* html tags ... */); out.println("<form action=\"http://the-server/path/servlet/TakeIt\" "+ "method=\"POST\">"); // other form elements out.println("</form>"); out.println(/* html tags ... */); out.close(); // don't forget to close the stream!!! } catch (IOException e) { /* do something */ } } public void doPost(HttpServletRequest req, HttpServletResponse res) { try { PrintWriter out = res.getWriter(); out.println("<b>m1</b> = " + req.getParameter("m1") + "<br>"); out.println("<b>Kommentar</b> = " + req.getParameter("Kommentar") + "<br>"); out.close(); // don't forget to close the stream!!! } catch (IOException e) { /* do something */ } } }Bei der Anforderung http://the-server/path/servlet/TakeIt (in der URL-Zeile eines Browsers eingegeben) wird doGet() des Servlets aufgerufen und eine HTML-Seite ausgegeben, die das oben dargestellte Formular enthält. Beim Bestätigen des Formulars mit dem OK-Button wird eine POST-Anfrage an den Server gerichtet, der darauf die doPost()-Methode des Servlets aufruft.
<html>
<head>
<title>Beispiel für Java Server Page und Java Bean</title>
<jsp:useBean id="jcal" scope="page" class="JspCalendar" />
</head>
<tr bgcolor="#FFF8EE">
<td><b>Monat</b></td>
<td><i><jsp:getProperty name="jcal" property="month" /></i></td>
</tr>
<tr bgcolor="#CCCCCC">
<td><b>Tag</b></td>
<td><i><jsp:getProperty name="jcal" property="date" /></i></td>
</tr>
<tr bgcolor="#FFF8EE">
<td><b>Zeit</b></td>
<td><i><jsp:getProperty name="jcal" property="time" /></i></td>
</tr>
</table>
</body>
</html>
Java Code in File JspCalendar.java
import java.util.*;
public class JspCalendar
{
Calendar calendar = null;
public JspCalendar() {
calendar = Calendar.getInstance();
}
public int getYear() {
return calendar.get(Calendar.YEAR);
}
public int getMonth () {
return 1 + calendar.get(Calendar.MONTH);
}
public int getDate() {
return calendar.get(Calendar.DAY_OF_MONTH);
}
public String getTime() {
return getHour() + ":" +getMinute() + ":" + getSecond();
}
public int getHour() {
return calendar.get(Calendar.HOUR_OF_DAY);
}
public int getMinute() {
return calendar.get(Calendar.MINUTE);
}
public int getSecond () {
return calendar.get(Calendar.SECOND);
}
}
www.java.sun.com/developer/onlineTraining
www.java.sun.com/docs/books/tutorial/servlets/index.htmlwww.java.sun.com/products/jsp/docs.html
http://developer.iplanet.com/viewsource/fields_jspcomp/fields_jspcomp.html
http://developer.java.sun.com/developer/onlineTraining/Database/JDBC20Intro/JDBC20.html