About Me | Projects | Photos | Sitemap |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| About Me > C/S Praktikum 99: Servlets > Aufgaben, Blatt 7 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inhalt
|
C/S Praktikum 1999-2000Blatt 7: Servlets, Teil IZweck der zwei Aufgaben, die weiter unten vorgestellt werden, ist, daß Ihr erste Erfahrungen mit der Programmierung von Servlets und JSPs (JavaServerPages) sammelt. In den folgenden Paragraphen findet Ihr das nötige technische Hintergrundwissen für die Programmierung der Aufgaben. Eine allgemeine (nicht technische) Einführung zum Thema Servlets findet Ihr hier. Was sind Servlets?Java Servlets sind spezielle Java Programme, deren Zweck die Erweiterung der Funktionalität eines Servers ist. Diese Programme laufen serverseitig, auf einer Java Virtual Machine (JVM) auf dem Server. Der Klient (Webbrowser) braucht Java nicht zu unterstützen. Eine Bespielanwendung für Servlets ist die Anbindung eines Servers an eine Datenbank. Zur Kommunikation zwischen Servlet und Server ist eine plattformunabhängige Schnittstelle definiert, das Java Servlet API. Ein einmal programmiertes Servlet kann also prinzipiell auf jedem Server laufen, der dieses API unterstützt. Das Java Servlet API besteht aus folgenden Packages:
HttpServletsKurzeinführung ins HTTP Protokoll: Das HTTP Protokoll ist ein einfaches, verbindungsloses Protokoll. Verbindungslos heißt, daß zwischen Klient (Webbrowser) und Server keine permanente Verbindung besteht, sondern nur eine temporäre. Wenn der Klient etwas vom Server will, schickt er eine sogenannte request an den Server. Eine request enthält einen HTTP Befehl, die sog. method, welche angibt was der Server tun soll. Nachdem der Server den Befehl verarbeitet hat antwortet er mit einer response. Die meistbenutzten HTTP Befehle sind die Kommandos GET und POST. Etwas einfach formuliert, dient das GET Kommando dazu Daten von dem Server zu bekommen und das POST Kommando dazu Daten an der Server zu senden. HttpServlets erstellen: Ein HttpServlet erhält man in dem man die Klasse HttpServlet aus dem Package javax.servlet.http erweitert. Ein HttpServlet erhält requests von einem Webserver und schickt responses zurück. Die wichtigsten Methoden dieser Klasse sind:
Hinweis: In den Aufgaben werdet Ihr nur doGet bzw. doPost benötigen. Wichtig ist zu wissen das jedes Servlet Objekt vom Server nur einmal erzeugt (instanziiert) wird und danach mehrere Threads des Servers (eins pro request), u.U. gleichzeitig, auf dieses Objekt zugreifen. Falls also member-Variablen (Klassenvariablen) des Servlets verändert werden, ist es notwendig die jeweiligen Methoden als synchronized zu deklarieren, um die Konsistenz der Daten zu gewährleisten. Variablen die nur innerhalb von doGet/doPost Methoden existieren sind davon nicht betroffen.
Java Server Pages (JSPs)Der Applikationsserver den wir benutzen unterstützt außerdem das Java Server Pages API. JSPs sind "normale" HTML Seiten welche zusätzlich eingebetete Java Befehle enthalten. Wenn ein JSP Aufgerufen wird, erstellt der Server automatisch ein Servlet aus dem JSP, so daß der HTML Code aus dem JSP und die Java Befehle zusammen ausgeführt werden. Für den Benutzer ist dies absolut transparent. Durch JSPs wird es möglich die Applikationslogik von der Präsentation der Daten zu trennen. Dies passiert indem man die Applikationslogik in den Servlets programmiert und diese die erzeugten Daten an JSPs schicken, welche die Anzeige der Daten übernehmen.
JSPs erstellenEine JSP Datei muß mit .jsp enden. Zusätzlich zu HTML Tags können JSP Tags benutzt werden. Die wichtigsten JSP Tags sind: <%@ und %> Tags (sog. JSP Directives): Dieser Tag wird verwendet um zu spezifizieren welche Skriptsprache benutzt wird, welche Interfaces implementiert werden (doGet oder doPost), welche Java Klassen importiert werden und anderes. Der Syntax dieses Tags ist <%@ directive_name = "value" %> Die wichtigsten Werte für directive_name sind:
Beispiel: <script runat=server> und <script> Tags: Innerhalb dieser Tags können klassenweite Methoden und Variablen definiert werden (in normalem Java-Code). Diese können dann innerhalb des ganzen JSPs aufgerufen werden. Der Ausdruck runat=server darf nicht weggelassen oder geändert werden! Beispiel: <% und %> Tags (Inline Java Code, sog. "Scriptlets"): Zwischen diesen Tags kann normaler Java Code geschrieben werden, welcher an dieser Stelle ausgeführt wird. Es wird kein direkter Output in die HTML Seite geschrieben! Folgende vier Variablen sind vordefiniert: request (vom Typ HttpServletRequest), response (vom Typ HttpSevletResponse), out (vom Typ PrintWriter) und in (vom Typ BufferedReader). Außerdem kann man alle Variablen und Methoden benutzen, die innerhalb des Skript Tags definiert wurden. Beispiel: <%= und %> Tags: Mit diesen Tags kann der Output aus Java Variablen und Methoden in die HTML Seite eingefügt werden. Primitive Typen wie int und float werden automatisch nach String konvertiert. Beispiele: <bean> und <bean> Tag: Mit diesen Tags kann auf JavaBeans zugegriffen werden, die z.B. vorher in die Request geschrieben worden sind. Ein Bean kann jede Java-Klasse sein, die das Interface serializable implementiert und über get_xxx und set_xxx Methoden verfügt. Der Syntax dieses Tags ist:
<repeat> und </repeat> Tags: Mit diesen Tags kann ein Block aus HTML und JSP Code mehrfach ausgeführt werden. Die Schleife wird solange durchlaufen bis der Wert ending_index erreicht wird, oder eine ArrayIndexOutOfBounds Exception geschmissen wird. Falls dies in der Mitte der Schleife passiert, werden in der Regel unvollständige HTML Tags generiert! Die Exception sollte also am besten am Anfang des <repeat>-Tags auftauchen. Der Syntax dieser Tags ist: wobei mit:
Beispiel: Bevor Ihr beginnt:Im Praktikum benutzen wir Apache als Webserver gekoppelt mit dem WebSphere Applikationsserver von IBM, welcher die Servlets/JSPs ausführt. Angebunden ist eine SQL-Datenbank (DB2) in der die Produkte eines Pizza-Lieferdienstes abgelegt sind. Im Rahmen der Aufgaben werdet Ihr einige Produktbeschreibungen aus der Datenbank holen. Um dies so einfach wie möglich zu machen gibt es eine Package namens pizzasvc.db, welche Klassen enthält, die die Datenbank auf Objekte abbilden. Mehr dazu in der Aufgabenstellung.
Braucht man extra Klassen ? (Ja) Da die Servlets das Java Servlets API benutzen braucht Ihr die entsprechenden .JAR Dateien. Diese findet Ihr auf dem AFS unter /home/volanaki/praktikum/classes.zip. Die Datei enthält auch das Package pizzasvc.db. Ihr solltet ein Verzeichnis in eurem Account erstellen und die .zip-Datei dort entpacken. Dann müßt Ihr noch die CLASSPATH Variable auf die .JAR-files setzen. Im Beispiel befinden sich die Dateien im Verzeichnis "myClasses". Der Befehl muß natürlich in eine Zeile geschrieben werden. Falls die Fehlermeldung "CLASSPATH: Undefined variable." kommt, den Befehl setenv CLASSPATH eingeben und es nochmal versuchen.
setenv CLASSPATH {$CLASSPATH}:
Gibt es Rahmenprogramme? (Ja) Ja, die Rahmenprogramme findet ihr Welches JDK kann benutzt werden? Ihr solltet das Blackdown JDK 1.1.7 für Linux benutzen. Dies gibt es auf den Rechnern helga und sunshower (informatik.uni-tuebingen.de). Wo muß man die Lösungen ablegen damit der Server sie findet?
Wie kann die html-Dateien/JSPs/Servlets aufrufen?
Aufgabe 1In dieser Aufgabe sollt Ihr ein Servlet erstellen welches anhand des gesendeten Werts, aus dem Formular in der HTML Seite Aufg1.html, eine Datenbankabfrage startet und eine HTML Seite mit der Liste der Produkte erzeugt. Erweitert dazu das Rahmenprogramm Aufg1Servlet.java. Folgende Teilschritte sind notwendig:
Tips: Schaut Euch erstmal das Rahmenprogramm an. Dann schaut Euch die Dokumentation der Servlet API an, insbesondere für die Objekte HttpServlet, HttpServletRequest und HttpServletResponse. Für die Datenbankabfrage schaut in der Dokumentation der Package pizzasvc.db nach. Links sind unten angegeben. Aufgabe 2Wie Ihr in der vorherigen Aufgabe wahrscheinlich gemerkt habt, ist die Generierung von HTML-Code im Servlet recht umständlich. Deshalb wollen wir nun eine JSP zur Anzeige der Daten benutzen. Folgende Schritte sind notwendig:
Tips:
HinweiseBearbeitungszeitraum: Die Woche vom 10.1 bis 16.1 Abgabe: Die .java Dateien der Servlets per Mail an <volanaki ÄT informatik.uni-tuebingen.de> schicken. Außerdem einen Hinweis hinzufügen, unter welcher User ID Ihr die JSP Datei abgelegt habt. Betreuung: Der geplante Termin am Donnerstag, den 13.1 von 9-11 Uhr im Raum 023 (TI-Pool) auf dem Sand muß wegen Krankheit leider ausfallen. Es wird einen Ersatztermin am Montag, den 17.1 zur gleichen Zeit am gleichen Ort geben. Falls Probleme auftauchen könnt Ihr mir natürlich auch eine Mail schicken. Links auf Dokumentation: Nützliche technische Dokumentation:
Falls Ihr noch mehr Informationen über Servlet/JSP Programmierung benötigt, ist folgendes Dokument sehr zu empfehlen:
|