Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 17 Servlets und Java Server Pages
gp 17.1 Dynamische Web-Seiten und Servlets
gp 17.1.1 Was sind Servlets?
gp 17.1.2 Was sind Java Server Pages?
gp 17.1.3 Vorteil von JSP/Servlets gegenüber CGI-Programmen
gp 17.2 Vom Client zum Server und wieder zurück
gp 17.2.1 Der bittende Client
gp 17.2.2 Was erzeugt ein Web-Server für eine Antwort?
gp 17.2.3 Wer oder was ist MIME?
gp 17.3 Servlets und Java Server Pages entwickeln und testen
gp 17.3.1 Servlet-Container
gp 17.3.2 Web-Server mit Servlet-Funktionalität
gp 17.3.3 Tomcat
gp 17.4 Java Server Pages in Tomcat und Eclipse
gp 17.4.1 Erster Ablageort für eigene JSP-Seiten
gp 17.4.2 Das Sysdeo-Plugin
gp 17.5 Skript-Elemente
gp 17.5.1 Scriptlets
gp 17.5.2 Ausdrücke
gp 17.5.3 Deklarationen
gp 17.5.4 Kommentare und Quoting
gp 17.6 Web-Applikationen
gp 17.7 Implizite Objekte
gp 17.8 Entsprechende XML-Tags
gp 17.9 Was der Browser mit auf den Weg gibt - HttpServletRequest
gp 17.9.1 Verarbeiten der Header
gp 17.9.2 Hilfsfunktion im Umgang mit Headern
gp 17.9.3 Übersicht der Browser-Header
gp 17.10 Formulardaten
gp 17.11 Das HttpServletResponse-Objekt
gp 17.11.1 Automatisches Neuladen
gp 17.11.2 Seiten umlenken
gp 17.12 JSP-Direktiven
gp 17.12.1 page-Direktiven im Überblick
gp 17.12.2 include-Direktive
gp 17.13 Aktionen
gp 17.13.1 Aktion include
gp 17.13.2 Aktion forward
gp 17.13.3 Aktion plugin
gp 17.14 Beans
gp 17.14.1 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen
gp 17.14.2 Der schnelle Zugriff auf Parameter
gp 17.15 Kleine Kekse: die Klasse Cookies
gp 17.15.1 Cookies erzeugen und setzen
gp 17.15.2 Cookies vom Servlet einlesen
gp 17.15.3 Kleine Helfer für Cookies
gp 17.15.4 Cookie-Status ändern
gp 17.15.5 Langlebige Cookies
gp 17.15.6 Ein Warenkorbsystem
gp 17.16 Sitzungsverfolgung (Session Tracking)
gp 17.16.1 Das mit einer Sitzung verbundene Objekt HttpSession
gp 17.16.2 Werte mit einer Sitzung assoziieren und auslesen
gp 17.16.3 URL-Rewriting
gp 17.16.4 Zusätzliche Informationen
gp 17.17 Tag-Libraries
gp 17.17.1 Standard Tag Library (JSTL)
gp 17.18 Servlets
gp 17.18.1 Servlets compilieren
gp 17.18.2 Wohin mit den Servlets: das classes-Verzeichnis
gp 17.18.3 Servlets mit dem Sysdeo-Plugin unter Eclipse
gp 17.18.4 Servlet-Mapping
gp 17.19 Der Lebenszyklus eines Servlets
gp 17.19.1 Initialisierung in init()
gp 17.19.2 Abfragen bei service()
gp 17.19.3 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
gp 17.19.4 Das Ende eines Servlets
gp 17.20 Das HttpServletResponse-Objekt
gp 17.20.1 Wir generieren eine Web-Seite
gp 17.20.2 Binärdaten senden
gp 17.20.3 Komprimierte Daten mit Content-Encoding
gp 17.20.4 Noch mehr über Header, die der Server setzt
gp 17.21 Objekte und Dateien per POST verschicken
gp 17.21.1 Datei-Upload
gp 17.22 Servlets und Sessions
gp 17.23 Weiterleiten und Einbinden von Servlet-Inhalten
gp 17.24 Inter-Servlet-Kommunikation
gp 17.24.1 Daten zwischen Servlets teilen
gp 17.25 Internationalisierung
gp 17.25.1 Die Länderkennung des Anfragers auslesen
gp 17.25.2 Länderkennung für die Ausgabe setzen
gp 17.25.3 Westeuropäische Texte senden
gp 17.26 Tomcat: Spezielles
gp 17.26.1 Tomcat als Service unter Windows NT ausführen
gp 17.26.2 MIME-Types mit Tomcat verbinden
gp 17.26.3 Servlets beim Start laden
gp 17.27 Ein Servlet generiert WAP-Seiten für das Handy
gp 17.27.1 Ein WAP-Handy simulieren
gp 17.27.2 Übersicht der wichtigsten Tags
gp 17.27.3 Der Gateway
gp 17.27.4 WML-Seiten aufbauen
gp 17.27.5 Interessante Links zum Thema Servlets/JSP


Galileo Computing

17.27 Ein Servlet generiert WAP-Seiten für das Handydowntop

Zum Schluss wollen wir noch ein kleines Beispiel für WAP-Handys ansehen. WAP (Wireless Application Protocol) ist ein Protokoll (aktuell ist Version 1.21), das drahtlosen Empfangsgeräten das Empfangen von Internet-Inhalten wie Text und Bilder ermöglicht.

Ein Handy kommuniziert mit dem WAP-Server über WAP wie ein Web-Browser mit einem Server HTTP spricht. Da ein Handy ein Mini-Browser ist (auch Micro-Browser genannt), versteht es ebenso wie ein Web-Browser eine Seitenbeschreibungssprache, die mit HTML verwandt ist. Sie heißt WML (die Version 1.3 ist in Vorbereitung), die Abkürzung steht für Wireless Markup Language. Die über Handy angebotenen Inhalte sollten sich jedoch kurz halten; die meisten Handys besitzen nur vier Zeilen mit Schwarzweiß-Grafiken. Der Klassiker auf dem WAP-Markt, das Nokia 7110, bringt es auf 96 x 65 Pixel. Daher sind WML-Seiten nicht vergleichbar mit chic aufgemachten Web-Seiten. Die Benutzer würden sich bei einem hohen Seitenpreis besonders über aufwändige Seiten freuen. Zumal die Geschwindigkeit gerade mal einem alten 9600-Baud-Modem gleicht. In den nächsten Jahren sollen aber - laut Prognosen - Displays mit mehreren Textzeilen und 256 Farben vorhanden sein. Neben der Übertragungstechnik GSM, auf deren Basis heute die Informationen übertragen werden, gibt es viel versprechende Änderungen, darunter Symbian, Bluetooth, SIM-Toolkits und UMTS (Universal Mobile Telecommunications System). UMTS mit einer Übertragungsrate von bis zu zwei MB/s (mindestens 384 KB/s) hat dabei die besten Chancen, das GSM abzulösen, da das Protokoll zu GSM abwärtskompatibel ist. Vodafone möchte 50 % der Bevölkerung Ende 2005 erreicht haben.

In unserer Kurzeinführung interessieren wir uns aber weniger für die harten WAP-Fakten und die wirtschaftliche und soziale Bedeutung (wo ist die nächste Pommes-Bude in Paderborn, die keine pappigen Pommes macht?), als vielmehr für den Anteil, der nötig ist, damit ein Servlet eine WML-Datei erstellen kann. Sehr gute Einführungen finden sich wie immer im Internet, eine wichtige Seite dabei ist das WAP-Forum http://www.wapforum.org/.


Galileo Computing

17.27.1 Ein WAP-Handy simulierendowntop

Da ich meinen Lesern nicht zumuten kann, nur zum Testen der WML-Seiten ein WAP-fähiges Handy zu kaufen, verlassen wir uns auf eine Softwareemulation. Die unterschiedlichen Handy-Hersteller bieten Toolkits zur Softwareentwicklung an. Ein ausgereiftes Toolkit mit dem Namen Mobile Internet Toolkit (früher Wap Toolkit) kommt von Nokia. Die Firma stellt wie viele andere Handy-Hersteller einen WML-Browser, einen Skript-Interpreter sowie Laufzeitbibliotheken zur Verfügung. Für die Entwicklung der Seiten steht ein einfacher WML- und WMLScript-Editor zur Verfügung. Wir können das Toolkit unter http://www.forum.nokia.com/main/1,35452,030,00.html beziehen und ohne Umwege installieren. Das Toolkit selbst ist in Java programmiert, doch leider 16 MB groß.

Eine WML-Seite schreiben und betrachten

Nach der Installation können wir beim Nokia-Toolkit Beispiele laden und auf dem Handy das Resultat sehen. Beispielprogramme werden unter File/Open geladen und durch Aktivieren der Schaltfläche Show angezeigt. Entscheiden wir uns für eine eigene kleine WML-Datei, so kann diese etwa so aussehen:

Listing 17.26 Saft.wml

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
  ">http:///www.wapforum.org/DTD/wml_1.1.xml";>
<wml>
  <card id="card">
 <p>
 Moege der Saft mit dir sein.
 </p>
  </card>
</wml>

Haben wir die Datei unter einem Namen wie c:\saft.wml gespeichert, dann müssen wir eine URL zusammensetzen, die wie folgt aussieht:

file:/c:/saft.wml

Dann lädt der Browser die Datei und stellt sie mit seinen Mitteln dar.

Zwei Handys bei Nokia

Das Toolkit von Nokia stellt ein zweites Handy bereit, welches wir nun einstellen wollen. Wir wählen dazu unter dem Menüpunkt Toolkit/Select Device den Eintrag Blueprint Phone und damit ein spaceiges WAP-1.2-Handy. Dies ist notwendig, da eine spezielle Einstellung, die wir etwas später benötigen werden, mit dem anderen Handy nicht möglich ist.


Galileo Computing

17.27.2 Übersicht der wichtigsten Tagsdowntop

Der strikte Tag-Gebrauch ist eine der herausragendsten Eigenschaften von WML. Alle Tags müssen zum Beispiel kleingeschrieben sein. Uns erinnert dabei vieles an HTML, etwa die Kommentare, die in <!-- eingeschlossen --> sind, genauso die Tag-Kombination <b>mit dem Anschließenden</b>, welche Text fett anzeigt. Diese Darstellung unterstützen jedoch nicht alle Handys. Das Gleiche gilt für <i>italic</i>, <em>weitere Auszeichnung eines Textabschnittes</em>, <big>besonders großem Text</big>, <small>besonders klein darzustellenden Text</small>, <strong>fettes Schriftbild</strong> und <u>unterstrichen</u>.

Konzentrieren wir uns auf die Tags, die besonders bei WML hervorzuheben sind:

gp <?xml version="1.0"?>
Diese erste Zeile sagt aus, dass es sich bei allen WML-Dateien um XML-Code handelt. Damit kann jeder Code auch mit einem XML-Programm interpretiert und bearbeitet werden.
gp <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
Diese zwingende Zeile muss am Anfang einer WML-Datei stehen. Sie definiert den Ort, an dem die Tags in WML definiert sind. Eine DTD definiert, wie die Tags heißen und welche Attribute erlaubt sind. Unser Handy benutzt dazu die DTD für WML-Dateien in der Version 1.1. Vor dem <!DOCTYPE ...> sollte kein einziges Whitespace stehen.
gp <wml>
Dieses Tag steht zu Beginn eines Quellcodes und ist <html> bei Web-Seiten vergleichbar. Es wird durch </wml> abgeschlossen.
gp <card id="Cardname">
Jede WML-Datei besteht aus einem Deck, das in Cards unterteilt ist. Nur ein Deck kann in einer WML-Datei definiert werden. Das Card-Tag definiert eine im Deck eingesetzte Karte mit einem eindeutigen Namen. Dieser sollte nicht mehr als acht Zeichen umfassen. Das Tag </ card> beendet den Inhalt einer Card. Nach der Deklaration folgt eine weitere Card, oder das Deck ist zu Ende - dann folgt </wml>.
gp <title="Überschrift">
Bestimmt den Titel beziehungsweise die Überschrift. Kann auch zusammen in den Card-Tag geschrieben werden. <card id="Cardname" title="Überschrift">.
gp <p>
Definiert einen Absatz. Am Ende muss ein </p> den Absatz beenden. Eine Erweiterung ist <p align="Ausrichtung">, der den Text nach left, right oder center ausrichtet.
gp <br/>
Bringt einen Zeilenvorschub ein. Der Slash am Ende fällt besonders auf. Dies bedeutet, dass es kein <br>-Tag gibt und dass das Tag <br/> somit beginnender und endender Tag zugleich ist.
gp <img src="Bildname.wbmp" alt="Bildname"/>
Bindet eine Grafik im WBMP-Format ein. Dies ist das einzige Bildformat, welches zur Zeit definiert ist. Der Parameter alt muss mit einem Wert belegt werden (auch wenn es nur ein Leerzeichen ist).
gp <a href="URL ">Link</a>
Zeigt auf eine externe Web-Seite.
gp <a href="#Cardname">Link</a>
Eine Besonderheit des Links. Das Hash symbolisiert den Verweis innerhalb des WML-Decks auf eine andere Card, die alle durch eine ID gekennzeichnet sind.

Galileo Computing

17.27.3 Der Gatewaydowntop

Das Handy ruft nicht direkt die Informationen von einem Web-Server ab, sondern wendet sich an ein Gateway (auch WAP-Server genannt) eines Mobilfunkanbieters, zum Beispiel D1, D2, E-Plus oder O2. Dieser sitzt als Vermittler zwischen dem Handy und dem Internet. Da das Handy keinen HTML- beziehungsweise WML-Quellcode im ASCII-Format anzeigen kann, übersetzt das Gateway die Internet-Seiten in ein spezielles Binärformat (WBXML). Dieses ist viel kompakter als das ASCII-Format und spart somit Bandbreite. Damit das Gateway weiß, welche Datei es vom Server holen muss, schickt das Handy die Information mit auf den Weg. Dann kontaktiert das Gateway den Web-Server, holt die Daten und komprimiert sie, falls nötig - das ASCII-Format für die normalen Seiten würde zu viel Bandbreite einnehmen. Die Übersetzung kann ausfallen, wenn auf dem Server schon die komprimierte Datei liegt. Dies sollte sie aus Geschwindigkeitsgründen auch, da dann das Gateway die Daten schneller an das Handy liefern kann.

Entwicklung von Seiten ohne Gateway

Das Nokia-Toolkit übersetzt beim Testen die WML-Datei selbstständig in Binärcode. Daher ist dies zur Entwicklung der Seiten sehr praktisch, da wir nicht extra ein Gateway benötigen. Es gibt neben dem Nokia Toolkit noch andere Anbieter wie Motorola, Phone.com, Ericson, die neben der Visualisierung einen Compiler eingebunden haben. Diese Toolkits sind zwar nicht unbedingt kleiner, aber manchmal schneller. Dass die Nokia-Simulation in Java implementiert ist, wird schon am Speicherverbrauch und an der Geschwindigkeit deutlich. Die reinen Anzeigeprogramme gibt es im Internet etwas häufiger, doch diese implementieren keinen Compiler. Daher sind diese Anzeigeprogramme als Download wesentlich kleiner, benötigen aber immer ein Gateway, der dann die Seiten übersetzt, oder einen externen Compiler. Mit dieser Lösung ist die Entwicklung jedoch umständlicher.

Der Gateway WAPLite

Wenn wir eigene WML-Dateien für das Handy schreiben wollen, benötigen wir ein Gateway und dessen Funktion als Übersetzer. Das Toolkit allein reicht nicht aus. Dabei werden wir natürlich nicht auf einen Mobilfunkanbieter zurückgreifen, sondern uns einen Server lokal installieren. Der WAPLite-Server der Firma NOW wireless ist ein einfaches, schnelles WAP-Gateway unter Windows, das kompatibel zur WAP-v1.2-Spezifikation arbeitet. Von der Web-Seite http://www.nowwireless.co.uk/NOW_Wireless_WAPlite.html können wir WAPLite beziehen und das Programm installieren. Es läuft nach dem Starten als Windows-Service, die Demo jedoch nur 60 Tage. Nach der Installation müssen wir nur im Reiter Stats die Schaltfläche Install Service aktivieren, und das ist alles.


Beispiel Jetzt können wir im elektronischen Telefon zum Beispiel die folgende URL eingeben:
gp http://wap.n-tv.de
gp http://wap.wubsch.de/index.wml
gp http://www.smartid.de/wap.wml

Das Handy wendet sich nun an WAPLite, der wiederum an den Web-Server und dann fließen die Daten zurück an das Handy. Wenn später unser Web-Server lokal läuft, können wir auch URLs der Form

http://localhost/trallala.wml

eingeben.

Der Gateway WAPLite stellt dabei auch die eigene Adresse local zur Verfügung. In diesem Fall liefert direkt das Gateway die Informationen, und der Weg über das Internet oder einen Web-Server wird nicht gemacht. Im Handy können wir zum Beispiel http://local/waplite.wml eingeben, dann kommen wir auf eine lokale Standardseite, die jedoch sofort an ein Internet-Angebot weiterleitet. Das Basisverzeichnis und Wurzelverzeichnis für die WAP-Dateien steht nach der Installation auf E:\WAPLITE\WML. Unter dem Reiter »Advertising« lässt sich der Pfad nachträglich anpassen. Da wir aber mit einem Web-Server arbeiten, benötigen wir im Folgenden local nicht weiter.

Kannel

Ein freies WAP (und SMS)-Gateway ist Kannel (http://www.kannel.org/). Er steht unter der FreeBSD-Lizenz und läuft in erster Linie unter Linux, lässt sich aber auch mit Cynwin unter Windows übersetzen. Die Dokumentation ist sehr umfassend und die Entwicklung rege.


Galileo Computing

17.27.4 WML-Seiten aufbauendowntop

Wenn wir ein Servlet programmieren, das eine WML-Seite generiert, dann müssen wir zunächst einen speziellen MIME-Typ senden:

response.setContentType( "text/vnd.wap.wml" );

Anschließend können wir normale WML-Tags mit Inhalt schicken. Das zwischengeschaltete Gateway übernimmt die Übersetzung in den Binärcode. Um das Ganze zu konkretisieren, betrachten wir folgendes Servlet.

Listing 17.27 WAPAngebot.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class WAPAngebot extends HttpServlet
{
  public void doGet( HttpServletRequest request,
                     HttpServletResponse response)
    throws IOException, ServletException
  {
    response.setContentType( "text/vnd.wap.wml" );
    PrintWriter out = response.getWriter();
    out.println( "<?xml version=\"1.0\"?>" +
      "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\""+
      "\"http:///www.wapforum.org/DTD/wml_1.1.xml\">" +
      "<wml><card id=\"card\" title=\"Examples\"><p>"+
      new Date()+"</p></card></wml>" );
  }
}

Haben wir das Servlet compiliert, so kann abschließend im Handy die URL zum Servlet eingegeben werden. Sie lautet:

http://localhost:8080/examples/servlet/WAPAngebot

Die Anfrage läuft nun über das Gateway zu Tomcat. Dieser schickt die ASCII-Datei zu WAPLite zurück, der es compiliert. Binär kodiert kommt es zum Handy, das es anzeigt.


Galileo Computing

17.27.5 Interessante Links zum Thema Servlets/JSPtoptop

gp http://java.sun.com/products/servlet/,>http://java.sun.com/products/jsp/
Hauptseite zu Servlets und JSPs von Sun.
gp http://www.jspin.com/
Links und ein »What's-New«
gp http://www.servlets.com/
Mehr oder weniger eine Werbeseite von J. Hunter, dem Autor des bekannten Servlet- Buchs im O'Reilly Verlag
gp http://theserverside.com/
Die Seite versteht sich als Portal für Enterprise JavaBeans. Es bietet Diskussionsforen für EJB und für Servlets beziehungsweise JSPs.





1 WAP 1.0 war SMS-basiert und ist nicht weit verbreitet, in Deutschland überhaupt nicht. WAP 1.1 ist der aktuelle Standard, auf dem die Dienste basieren. WAP 1.2 bietet unter anderem verschlüsselte Übertragung an, ist aber noch in der Vorbereitung.





Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de