Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


13.1.3

URL


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
Abbildung 13.1


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.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.