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.4

URLConnection


Das Beispiel aus dem vorherigem Abschnitt deckt noch lange nicht alle Möglichkeiten ab, die eine URL-Verbindung bietet. Um auf diese Möglichkeiten näher einzugehen, wird zuerst die bereits im Beispiel des letzten Abschnitts verwendete Methode showData() etwas modifiziert:
  public void showData(String data) {
    // Stream zum Einlesen der Daten von der URL
    BufferedReader URLinput;
    // Zum Schreiben der Daten an das CGI-Skript
    DataOutputStream URLoutput;
    // CGI-Skript
    URL cgiURL;
    // Entsprechende URLConnection zum CGI-Skript
    URLConnection cgiConnection;
    try {
      // Anlegen der URL
      cgiURL = new URL("http",getCodeBase().getHost(),
                       "/cgi-bin/URLConnectionDemo.sh");
      try {
        // URLConnection anlegen
        cgiConnection = cgiURL.openConnection();
        // Daten an das CGI-Skript schicken
        cgiConnection.setDoOutput(true);
        URLoutput =
           new DataOutputStream(cgiConnection.getOutputStream());
        URLoutput.writeBytes(data+"\n");
        URLoutput.close();
        // InputStream erzeugen
        URLinput = new BufferedReader(
          new InputStreamReader(cgiConnection.getInputStream()));
        // Löschen schon vorhandener Elemente in der List
        if (dataList.getItemCount() > 0)
          dataList.removeAll();
        // Daten vom CGI-Skript lesen und in der List anzeigen
        String line = "";
        while ((line = URLinput.readLine()) != null) {
          dataList.add(line);
        }
        URLinput.close();
      }
      catch (IOException ex) {
       ex.printStackTrace();
      }
    }
    catch(MalformedURLException e) {
      e.printStackTrace();
    }
  }

In diesem Beispiel ermittelt man den InputStream, durch den man die Daten der URL erhält, nicht durch die Methode openStream() der URL, sondern über die Zwischenstufe einer URLConnection:
  // URLConnection anlegen
  cgiConnection = cgiURL.openConnection();
  // Daten an das CGI-Skript schicken
  cgiConnection.setDoOutput(true);
  URLoutput =
     new DataOutputStream(cgiConnection.getOutputStream());
  URLoutput.writeBytes(data+"\n");
  URLoutput.close();
  // InputStream erzeugen
  URLinput = new BufferedReader(
    new InputStreamReader(cgiConnection.getInputStream()));
Die Klasse URLConnection spielt eine große Rolle, wenn z. B. Daten an ein CGI-Skript übergeben werden müssen. Allgemein kann dies auf zwei Arten geschehen: Wie leicht zu sehen ist, benutzt obiges Beispiel letztere Methode:
  // Daten an das CGI-Skript schicken
  cgiConnection.setDoOutput(true);
  URLoutput =
     new DataOutputStream(cgiConnection.getOutputStream());
  URLoutput.writeBytes(data+"\n");
  URLoutput.close();
Bei der Benutzung einer URLConnection sind immer folgende Schritte durchzuführen: In obigem Beispiel muss eine Option für die Kommunikation mit dem Server gesetzt werden:
  cgiConnection.setDoOutput(true);
Mit setDoOutput(boolean) wird eingestellt, ob eine Ausgabe vom Client bei der Kommunikation mit dem Server erfolgt. Per Voreinstellung ist dieses Flag auf false gesetzt, d. h., es ist von Client-Seite keine Ausgabe zum Server möglich. Bei der Verwendung der POST-Methode müssen die Daten über einen OutputStream an den Server geschickt werden. Deshalb ist ein vorheriger Aufruf von setDoOutput() notwendig.

Neben der oben geschilderten Einstellung gibt es noch weitere Möglichkeiten, die Eigenschaften einer URLConnection zu verändern (z. B. kann festgelegt werden, ob bei der Verbindung Caches verwendet werden dürfen). Sie können im Einzelnen in der Referenz nachgeschlagen werden.

Nach dem Aufruf von setDoOutput(boolean) wird ein DataOutputStream erzeugt, dessen Ausgabe auf Server-Seite von einem CGI-Skript von der Standardeingabe gelesen werden kann. Der String, den showData() als Parameter besitzt, wird von diesem DataOutputStream ausgegeben. Je nach geschriebener Zeichenkette schickt das CGI-Skript unterschiedliche Daten zurück.

Sind die Daten alle vom DataOutputStream ausgegeben, wird dieser mit close() geschlossen.

Danach können die Daten auf Client-Seite analog zum Beispiel im letzten Abschnitt abgefragt werden. Der OutputStream muss aber vor dem Zugriff auf die Daten unbedingt geschlossen werden.

Das CGI-Skript auf Server-Seite muss die Fähigkeit besitzen, die ankommenden Daten zu lesen.

Das hier verwendete Shell-Skript sieht folgendermaßen aus:
  #!/bin/sh

  read data
  file=$data".data"
  echo "Content-Type: text/plain"
  echo
  cat $file
Mit read data wird der übergebene Parameter von der Standardeingabe gelesen. Danach erfolgt die Ausgabe der Daten. Die Daten sind in einer Datei gespeichert, deren Name sich aus dem Parameter und einem angehängten .data zusammensetzt. Diese Datei wird mit cat $file ausgegeben.

In diesem Beispiel wird entweder eine Liste von Getränken oder von Speisen angefordert. Für jede Liste besitzt das Applet einen Button. Drückt man einen Button, wird die entsprechende Liste geladen und in einer List angezeigt.

Abbildung 13.2: Daten einer URLConnection
Abbildung 13.2


Material zum Beispiel

Die Datendatei Food.data enthält in jeder Zeile einen Eintrag:
  Fish
  Pork
  Chicken
  Beef
Drinks.data ist entsprechend aufgebaut.


 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.