Um in Java auf die Daten einer URL zugreifen zu können, muss zuerst einmal ein Exemplar
der Klasse URL angelegt werden. Hier ein kleines Beispiel, das
eine URL dazu benutzt, Daten von einem Rechner zu erhalten:
public void showData() {
BufferedReader URLinput;
URL myURL;
try {
// Anlegen der URL
myURL = new URL(
"http", getCodeBase().getHost(), "/URLDemo.txt");
try {
// Stream öffnen
URLinput =
new BufferedReader(new InputStreamReader(myURL.openStream()));
// Anzeigefeld der TextArea löschen
URLTextArea.setText("");
// Alle Daten der URL lesen anzeigen
String line = "";
while ((line = URLinput.readLine()) != null)
URLTextArea.append(line+"\n");
URLinput.close(); // Schließen des Streams
}
catch (IOException ex) {
ex.printStackTrace();
}
}
catch(MalformedURLException e) {
e.printStackTrace();
}
}
Die obige Methode showData() dient zum Aufbau
einer URL-Verbindung und dem anschließenden Anzeigen von Daten.
Die URL wird folgendermaßen erzeugt:
myURL = new URL(
"http", getCodeBase().getHost(), "/URLDemo.txt");
Der
Konstruktor bekommt das Protokoll, den Host-Namen und den Dateinamen mit
Pfad übergeben.
Der Host-Name wird in diesem Fall durch
getCodeBase().getHost()
angegeben.
Das ist von Vorteil, da in diesem Fall der angegebene Host-Name immer
mit dem Host-Namen identisch ist, von dem das Applet geladen wurde.
Wird das Applet auf einen Rechner mit einem anderen Host-Namen installiert, dann
ist keine Änderung am Host-Namen beim Laden der URL notwendig, vorausgesetzt, die zu
ladende Datei befindet sich bei diesem Rechner wieder im selben Verzeichnis.
Die Methode getHost() ist in der Klasse URL definiert
und kann bei jedem URL-Objekt dazu verwendet werden, den Host-Namen
des Rechners zu erfragen, auf den die URL verweist.
Normalerweise besitzt jeder Dienst
eine fest zugeordnete Port-Nummer, an der er zu erreichen ist, wie z. B. bei einem HTTP-Server der Port 80.
Auf diesem Port wird versucht, eine
Verbindung zum Server aufzubauen.
Dennoch kann es vorkommen, dass
die Port-Nummer bei einer URL explizit angegeben werden muss,
z. B. wenn ein Dienst auf einem Rechner auf einen anderen Port gelegt wurde.
Ist dies erforderlich, verwendet man einen anderen Konstruktor:
myURL = new URL(
"http", getCodeBase().getHost(), 8080, "/URLDemo.txt");
Diese Codesequenz versucht, den Server an Port 8080 zu kontaktieren.
In obigen Beispielen wird die
URL absolut angegeben, d. h., die Angaben beinhalten
alle relevanten Informationen, um die URL
eindeutig von jedem beliebigen Punkt aus zu erreichen.
Wenn bereits ein Exemplar von URL erzeugt ist,
kann man durch Verwendung eines anderen Konstruktors
weitere URLs angeben, die auf denselben
Host weisen. Hierzu muss man die
URL relativ zur vorhandenen URL initialisieren:
relURL = new URL(getCodeBase(), URLDemo2.txt");
Dieses Beispiel erzeugt ein neues URL-Objekt, das auf denselben Rechner und auf dasselbe Verzeichnis verweist wie das durch
getCodeBase() ermittelte, und auf eine Datei mit dem Namen URLDemo2.txt zeigt.
Wenn man die URL auf diese Weise initialisiert, ist nicht nur der Host-Name
relativ zum Applet angegeben, sondern die angegebene Datei ist auch relativ zu
dem Verzeichnis angegeben, in dem sich die Applet-Klasse befindet.
Ist die angegebene Adresse, die dem Konstruktor übergeben wird, nicht korrekt,
wird eine
MalformedURLException erzeugt.
Mit dem Erzeugen eines neuen Exemplars ist die Arbeit jedoch noch nicht
beendet. Dies würde zwar ausreichen, die Daten der URL mit der Methode
showDocument() (siehe auch Abschnitt ) anzuzeigen, es soll jedoch noch ein Schritt
weitergegangen werden:
Die Daten, welche die URL liefert, sollen
innerhalb des Applets auf dem Bildschirm ausgegeben werden. Dazu braucht man
eine Möglichkeit, um auf die Daten der URL zuzugreifen.
Es gibt hierzu verschiedene Techniken, wobei zunächst der Zugriff auf die
Rohdaten vorgestellt wird:
URLinput =
new BufferedReader(new InputStreamReader(myURL.openStream()));
Jede URL besitzt die Methode openStream(). Diese liefert
ein Ergebnis vom Typ InputStream. Diesen
InputStream konvertiert man in einen BufferedReader, um
auf Methoden zugreifen zu können, die höheren Komfort bieten.
Schlägt das Erzeugen des Streams fehl, wird eine IOException
ausgelöst.
Die Zeilen
String line = "";
while ((line = URLinput.readLine()) != null)
URLTextArea.append(line+"\n");
lesen die Daten zeilenweise aus dem Stream aus und
zeigen sie in einer TextArea an.
Das Dokument URLDemo.txt, auf das obiges Beispiel verweist, ist
eine einfache Textdatei, die folgende Zeilen enthält:
This is a little demo
showing the abilities of
a java applet accessing
an URL.
Sind alle Daten gelesen, wird der Stream wieder geschlossen:
URLinput.close(); // Schließen des Streams
Das Applet besitzt einen Button »Get Data« am unteren Rand.
Wird dieser betätigt, wird die Methode showData()
aufgerufen und die Daten werden in der TextArea angezeigt.
Wurde alles richtig implementiert, ist folgendes Bild zu sehen:
Abbildung 13.1: Zugriff auf die Daten einer URL
 |
Material zum Beispiel
So können Daten auf einfache Art und Weise auch zur Laufzeit
eines Applets bereitgestellt werden.
Eine Anwendung ist z. B. in Applets sinnvoll, die
einen Bestellservice realisieren.
Die Daten, die für diesen Bestellservice
relevant sind (z. B. Speisekarte), müssten nicht mittels
<PARAM>-Tag
übergeben werden, sondern könnten auch noch zur Laufzeit
geladen werden.
Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.