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 19 Applets, Midlets und Sound
gp 19.1 Applets und Applikationen - wer darf was?
gp 19.2 Das erste Hallo-Applet
gp 19.3 Die Zyklen eines Applets
gp 19.4 Parameter an das Applet übergeben
gp 19.4.1 Wie das Applet den Browser-Inhalt ändern kann
gp 19.4.2 Den Ursprung des Applets erfragen
gp 19.4.3 Was ein Applet alles darf
gp 19.5 Fehler in Applets finden
gp 19.6 Browserabhängiges Verhalten
gp 19.6.1 Java im Browser aktiviert?
gp 19.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
gp 19.6.3 Datenaustausch zwischen Applets und Java-Skripten
gp 19.7 Datenaustausch zwischen Applets
gp 19.8 Musik in einem Applet und in Applikationen
gp 19.8.1 Fest verdrahtete Musikdatei in einem Applet
gp 19.8.2 Variable Musikdatei über einen Parameter
gp 19.8.3 WAV- und MIDI-Dateien abspielen
gp 19.9 Webstart
gp 19.10 Java 2 Micro Edition
gp 19.10.1 Konfigurationen
gp 19.10.2 Profile


Galileo Computing

19.4 Parameter an das Applet übergebendowntop

Dem Applet können Parameter im Applet-Tag übergeben werden. Im Folgenden zeichnet ein Applet den übergebenen String einfach auf den Schirm.

Listing 19.3 DrawStringApplet.java

import java.applet.Applet;
import java.awt.Graphics;
public class DrawStringApplet extends Applet
{
  String string;
  public void init()
  {
    string = getParameter( "String" );
  }
  public void paint( Graphics g )
  {
    g.drawString( string, 50, 50 );
  }
}

Abschließend noch das kleine HTML-Listing.

Listing 19.4 index.html

<html><body>
<applet code="DrawStringApplet.class" width="200" height="200">
<param name="String" value="Himbeerpocken">
</applet>
</body></html>

Galileo Computing

19.4.1 Wie das Applet den Browser-Inhalt ändern kanndowntop

Das Applet kann mit showDocument() auf den Inhalt der Seite Einfluss nehmen. So lassen sich Applets bauen, die eine Baumstruktur der Seite anzeigen und dann zum Inhalt verweisen, falls eine Seite ausgewählt wird. Verwendet werden hier die Methoden von AppletContext. In Kurzform:

getAppletContext().showDocument( new URL(">http://www.ullilieb.com";) );

oder, falls ein spezieller Frame mit Namen angesprochen ist,

getAppletContext().showDocument( new URL(">http://ulli.org";), "Framename" );

class java.applet.Applet
extends Panel

gp AppletContext getAppletContext()
Liefert den Kontext des Applets. Dieser erlaubt es ihm herauszufinden, in welcher Umgebung, also auf welcher Web-Seite er sich bewegt.

interface java.applet.AppletContext

gp void showDocument( URL url )
Wechselt den Inhalt auf der aktuellen Seite mit einer neuen Seite der gegebenen URL.
gp void showDocument( URL url, String target )
Wechselt den Inhalt auf der aktuellen Seite mit einer neuen Seite der gegebenen URL. Dabei wird das Dokument in einen Frame abgelegt, dessen Name zusätzlich festgesetzt ist. Für target sind erlaubt:
E _self (Seite, die das Applet enthält) E _parent (bettet die neue Seite in die Vaterseite des Applets ein; falls diese nicht existiert, verhält es sich wie _self.) E _top (anzeigen im Toplevel-Frame, falls dieser nicht existiert, wie _self) E _blank (erzeugt ein neues Fenster.) E Falls der Name nicht mit den Konstanten übereinstimmt, wird die Anzeige in ein Frame gelegt, der diesen Namen trägt.
Galileo Computing

19.4.2 Den Ursprung des Applets erfragendowntop

Greift ein Applet auf Daten des Servers zu und ist ihm die Adresse nicht bekannt, so kann es nachfragen. Die Applet-Klasse stellt die Methoden getCodeBase() und getDocumentBase() zur Verfügung.


getCodeBase() Liefert die URL des Applets.
getDocumentBase() Liefert die URL der Web-Seite, die das Applet enthält.

Dann liefert getHost() eine String-Repräsentation der URL. So kommen wir mit den Methoden getCodeBase().getHost() an den Host-Namen und auch an die Daten des Servers.


Beispiel Applets können ohne Problem von Web-Seiten geklaut werden. Um dem einen Riegel vorzuschieben, können wir verlangen, dass die Zeichenkette von getDocumentBase().getHost() immer die Web-Seite unseres Servers repräsentiert.
String web = getDocumentBase().getHost();
if ( !web.equals("www.mydomain.com") )
{
  // hier meckern, dass was nicht stimmt.
}

Wir könnten die Überprüfung auch über ein InetAdress-Objekt realisieren.


class java.net.URL
implements Serializable, Comparable

gp String getHost()
Liefert den Host-Namen des URL-Objekts. Handelt es sich um das »file«-Protokoll, so ist der Rückgabewert ein leerer String.

class java.applet.Applet
extends Panel

gp URL getCodeBase()
Liefert die Basis-URL des Applets.
gp URL getDocumentBase()
Liefert die URL der Web-Seite, die das Applet enthält.

Beispiel Baue eine URL-Verbindung zu einer Grafikdatei auf. Wir nutzen hier zunächst die Methode getDocumentBase(), um an die URL des Servers zu gelangen, und anschließend den URL-Construktor, der uns relativ zur Basisadresse eine Pfadangabe erlaubt.

Listing 19.5 AppletURLConstructor.java

import java.applet.Applet;
import java.net.*;
public class AppletURLConstructor extends Applet
{
  public void init()
  {
    URL u1 = getDocumentBase();
//    System.out.println( u1 );
    try {
      URL u2 = new URL( u1, "grafik.gif" );
//      System.out.println( u2 );
    }
    catch ( MalformedURLException e ) {
      System.err.println( e );
    }
  }
}

Galileo Computing

19.4.3 Was ein Applet alles darftoptop

Ein Applet unterliegt bestimmten Sicherheitsbeschränkungen, die eine Java-Security-Einheit überprüft. In Kapitel 24 über Sicherheit werden wir dies näher beleuchten.

Viele der bekannten Fehler in Java, die potenzielle Sicherheitslücken darstellen, sind mittlerweile behoben. Und schon das Auffinden setzt eine erbarmungslose Kenntnis der Java-Quelltexte voraus. Beispielsweise der Fehler mit der Host-Adresse: Wenn ein Benutzer ein Applet von »java-tutor.com« liest, dann darf dieses Applet nur mit dem Host eine Verbindung aufbauen und mit keinem anderen. Doch leider war in den Quelltexten von Java ein Fehler, so dass das Applet nur den Rechnernamen des Hosts vergleicht, nicht aber die IP-Adresse. Ein kluges Applet kann nun dem DNS (Domain-Name-Server) eine falsche Zuordnung von Rechnername und IP-Adresse vorspielen, und nun verhält sich »java-tutor.com« wie »www.ganz-boese.com«.





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