From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100255.html | 526 +++++++++++++++++++++ 1 file changed, 526 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100255.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100255.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100255.html b/Master/Reference Architectures and Patterns/hjp5/html/k100255.html new file mode 100644 index 0000000..fd8d2d4 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100255.html @@ -0,0 +1,526 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 40 - Applets II +
+
+ + + + +

40.1 Verweise auf andere Seiten

+
+ +
+ + + + +

40.1.1 Die Klasse URL

+ +

+Das Konzept der URLs ist eines der +wichtigsten im ganzen Web. Ein URL (Uniform Resource Locator) +ist ein universelles Hilfsmittel zur Darstellung von Internet-Adressen. +Hinter jedem Link, der sich auf einem HTML-Dokument verbirgt, steht +ein URL, der beim Aufrufen des Links angesprungen wird. + +

+Der Aufbau von URLs ist in seiner Vielfältigkeit recht komplex +und ermöglicht es, sehr unterschiedliche Typen von Adressen zu +verwalten. Ein URL-Link kann beispielsweise verwendet werden, um eine +andere Webseite aufzurufen, eine Datei zu laden oder elektronische +Post an einen anderen Anwender zu senden. Wir wollen hier nur auf +die URLs eingehen, die man zur Darstellung von Webseiten-Adressen +verwendet. Eine exakte Beschreibung des URL-Konzepts befindet sich +in RFC 1630 (allgemeine Hinweise zu den RFCs finden sich in Abschnitt 46.1.5). + +

+Ein Uniform Resource Locator besteht aus mehreren Teilen. Als erstes +wird ein Dienst (auch Protokoll genannt) angegeben, +der beschreibt, auf welche Art von Service die Adresse verweist. Typische +Dienste sind html für Webseiten, ftp für einen +File-Download oder mailto, um eine Mail zu versenden. + +

+Bei einer HTML-Adresse besteht der URL aus +drei weiteren Teilen: +

+ +

+Gültige URLs sind also http://java.sun.com/javase/faqs.jsp +oder auch http://www.yahoo.com. +Die meisten Browser und Server sind in der Lage, fehlende Bestandteile +eines URLs weitgehend zu ergänzen. Fehlt beispielsweise die Dateierweiterung, +wird .html angehängt. Bezeichnet +der URL lediglich ein Verzeichnis, wird ein Standard-Dateiname wie +beispielsweise index.html oder default.htm +angehängt. + +

+Java implementiert das Konzept eines Uniform Resource Locators durch +eine eigene Klasse URL, die +sich im Paket java.net +befindet. Diese dient dazu, die Syntax von URLs zu kapseln und die +einzelnen Bestandteile voneinander zu trennen. Die Klasse URL +besitzt vier Konstruktoren, die es ermöglichen, eine Adresse +auf verschiedene Art zusammenzubauen. Wir werden hier nur die Variante +verwenden, die einen String +als Argument akzeptiert: +

+ + + + + +
+ +
+public URL(String url)
+  throws MalformedURLException
+
+
+
+java.net.URL
+ +

+Bei der Anwendung dieses Konstruktors muss ein syntaktisch einwandfreier +URL als String +übergeben werden. Enthält der String einen Syntaxfehler, +löst der Konstruktor eine Ausnahme des Typs MalformedURLException +aus. + +

+An dieser Stelle wird natürlich noch nicht überprüft, +ob die angegebene Adresse wirklich existiert. Dazu wäre +eine funktionsfähige Netzwerkverbindung nötig, und es würde +ein in der Regel nicht akzeptabler Aufwand bei der Konstruktion von +URL-Objekten entstehen. Die im Konstruktor durchgeführten Überprüfungen +sind lediglich syntaktischer Natur, um sicherzustellen, dass +ein URL ein gültiges Adressenformat hat. Nachdem ein gültiges +URL-Objekt erzeugt wurde, kann +es zur Adressenübergabe verwendet werden. +

+ + + + + + + + + +
+ +

+Weitere Hinweise zur Anwendung der Klasse URL +finden sich in Abschnitt 46.4.

+ + + + +
 Hinweis 
+
+ + + + +

40.1.2 Der Applet-Kontext

+ +

+Ein anderes Konzept, das bei der Programmierung von Links eine Rolle +spielt, ist das des Applet-Kontexts. Hierunter versteht Java +das Programm, das das aktuelle Applet ausführt. Dies ist +in der Regel der Browser, der das Applet geladen hat; während +der Entwicklung und Testphase des Programms kann es natürlich +auch der Appletviewer sein. + +

+Mit Hilfe der Methode getAppletContext +kann ein Objekt des Typs AppletContext +beschafft werden: +

+ + + + + +
+ +
+public AppletContext getAppletContext()
+
+
+
+java.applet.Applet
+ +

+In der Klasse AppletContext +gibt es eine Reihe von Methoden, die dem Applet Funktionalitäten +des Browsers zur Verfügung stellen: +

+ +

+Wir wollen auf die ersten beiden Methoden nicht weiter eingehen, sondern +uns hier lediglich mit showDocument +beschäftigen. + + + + +

40.1.3 Die Methode showDocument

+ +

+Die Methode showDocument +kann dazu verwendet werden, eine andere Webseite zu laden. Dies führt +dazu, dass das aktive Applet angehalten wird und die Kontrolle über +die Webseite verliert. Befindet sich auf der neuen Webseite ein anderes +Applet, so wird dieses geladen bzw. - falls es bereits geladen war +- reaktiviert. + +

+Die Methode showDocument +steht in zwei unterschiedlichen Varianten zur Verfügung: +

+ + + + + +
+ +
+public void showDocument(URL url)
+
+public void showDocument(URL url, String name)
+
+
+
+java.applet.AppletContext
+ +

+In seiner einfachsten Form erwartet showDocument +lediglich einen einzigen Parameter, nämlich die Adresse der Zielseite. +Hier muss ein gültiges URL-Objekt +angegeben werden, also eine komplette Adresse mit Dienst, Host-Name, +Verzeichnis und Datei. In der zweiten Variante kann zusätzlich +ein target angegeben werden, also das Sprungziel innerhalb +der ausgewählten Datei. Hier können die Standard-HTML-Targets +_self, +_parent, +_top +und _blank +sowie alle benutzerdefinierten Sprungmarken verwendet werden. +

+ + + + + + + + + + + +
+ +

+Soll statt einer absoluten eine relative Adresse angegeben werden +, also beispielsweise eine andere Webseite +aus demselben Verzeichnis oder aus einem seiner Unterverzeichnisse, +muss das URL-Objekt +mit einem erweiterten Konstruktor instanziiert werden. Zusätzlich +zur Angabe des relativen URL-Strings ist als erstes Argument ein Kontext-URL +anzugeben, der das Basisverzeichnis für das zweite Argument vorgibt. +Mit Hilfe der Methoden getCodeBase +und getDocumentBase +der Klasse Applet +kann beispielsweise das Stammverzeichnis des Applets bzw. der HTML-Seite +ermittelt werden. Als zweites Argument muss dann lediglich der Dateiname +relativ zu diesem Verzeichnis angegeben werden.

+ + + + +
 Tipp 
+
+ +

+Das folgende Applet demonstriert die Anwendung von showDocument. +Es erstellt eine Reihe von Buttons und zeigt sie auf dem Bildschirm +an. Wird einer der Buttons gedrückt, verzweigt das Programm auf +die durch den Button spezifizierte Seite. Während der Initialisierung +sucht das Applet nach Parametern mit den Namen button1, +button2 usw. Jeder dieser Parameter +sollte den Namen des Buttons und die Zieladresse enthalten. Die beiden +Teile müssen durch ein Komma getrennt sein. Eine Besonderheit +besteht darin, dass auch Adressen angegeben werden können, die +mit = anfangen. In diesem Fall +wird das = entfernt und der +interne URL nicht absolut, sondern unter Verwendung des erweiterten +Konstruktors relativ zur aktuellen Webseite angelegt. + +

+Um die Buttons sowohl auf dem Bildschirm anzeigen zu können als +auch den zugehörigen URL zu speichern, wurde eine neue Klasse +URLButton definiert. URLButton +erweitert die Klasse Button +um die Fähigkeit, einen URL mitzuspeichern und bei Bedarf abzufragen. + +

+Hier ist das Listing: + + +

+ + + + + +
+ +
+001 /* URLLaden.java */
+002 
+003 import java.applet.*;
+004 import java.awt.*;
+005 import java.awt.event.*;
+006 import java.util.*;
+007 import java.net.*;
+008 
+009 class URLButton
+010 extends Button
+011 {
+012   private URL url;
+013 
+014   public URLButton(String label, URL url)
+015   {
+016     super(label);
+017     this.url = url;
+018   }
+019 
+020   public URL getURL()
+021   {
+022     return url;
+023   }
+024 }
+025 
+026 public class URLLaden
+027 extends Applet
+028 implements ActionListener
+029 {
+030   Vector buttons;
+031 
+032   public void init()
+033   {
+034     super.init();
+035     setLayout(new FlowLayout());
+036     addNotify();
+037     buttons = new Vector();
+038     for (int i=1; ; ++i) {
+039       String s = getParameter("button"+i);
+040       if (s == null) {
+041         break;
+042       }
+043       try {
+044         StringTokenizer st = new StringTokenizer(s,",");
+045         String label = st.nextToken();
+046         String urlstring = st.nextToken();
+047         URL url;
+048         if (urlstring.charAt(0) == '=') {
+049           urlstring = urlstring.substring(1);
+050           url = new URL(getDocumentBase(),urlstring);
+051         } else {
+052           url = new URL(urlstring);
+053         }
+054         URLButton button = new URLButton(label,url);
+055         button.addActionListener(this);
+056         add(button);
+057         buttons.addElement(button);
+058       } catch (NoSuchElementException e) {
+059         System.out.println("Button"+i+": "+e.toString());
+060         break;
+061       } catch (MalformedURLException e) {
+062         System.out.println("Button"+i+": "+e.toString());
+063         break;
+064       }
+065     }
+066   }
+067 
+068   public void actionPerformed(ActionEvent event)
+069   {
+070     URLButton source = (URLButton)event.getSource();
+071     Enumeration en = buttons.elements();
+072     while (en.hasMoreElements()) {
+073       URLButton button = (URLButton)en.nextElement();
+074       if (button == source) {
+075         System.out.println(
+076           "showDocument("+button.getURL().toString()+")"
+077         );
+078         getAppletContext().showDocument(button.getURL());
+079       }
+080     }
+081   }
+082 }
+
+
+URLLaden.java
+ +Listing 40.1: Laden von Webseiten aus einem Applet

+ +

+Um die wichtigsten Fälle zu demonstrieren, wurde das Applet mit +der folgenden HTML-Datei gestartet: + + +

+ + + + + +
+ +
+001 <html>
+002 <head>
+003 <title>URLLaden</title>
+004 </head>
+005 <body>
+006 <h1>URLLaden</h1>
+007 <applet code=URLLaden.class width=400 height=200>
+008 <param
+009    name="button1"
+010    value="JAVA-Home,http://java.sun.com/">
+011 <param
+012    name="button2"
+013    value="Guido-Home,http://www.gkrueger.com">
+014 <param
+015    name="button3"
+016    value="Schranke,=Schranke.html">
+017 <param
+018    name="button4"
+019    value="Jana30,=images/jana30.gif">
+020 Hier steht das Applet URLLaden.class
+021 </applet>
+022 </body>
+023 </html>
+
+
+URLLaden.html
+ +Listing 40.2: Die HTML-Datei zum Laden der Webseiten

+

+ + + + + + + + + +
+ +

+Hier werden vier verschiedene Buttons definiert: +

    +
  • Der Button JAVA-Home verzweigt auf die Java-Seite von SUN. +
  • Der Button Guido-Home verzweigt auf die Homepage des Autors. +
  • Der Button Schranke lädt das Beispiel Schranke, +das sich in demselben Verzeichnis wie die aktuelle HTML-Seite befindet. +
  • Der Button Jana30 schließlich demonstriert zwei weitere +Features. Erstens, dass es bei den meisten Browsern auch möglich +ist, Grafikdateien (beispielsweise im GIF-Format) zu laden. Zweitens, +wie man mit Unterverzeichnissen umgeht (Pfadtrennzeichen in UNIX-Manier). +
+
+ + + + +
 Hinweis 
+
+ +

+Die Ausgabe des Programms im Netscape Navigator sieht folgendermaßen +aus: +

+ + +

+ +

+Abbildung 40.1: Darstellung von URLLaden im Netscape Navigator

+
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3