Einbinden von Java-Applets in HTML-Dateien: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (Multi-Browser-Einbindung mit HTML5)
K
 
(10 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
'''Autor: Gernot Segieth'''
 +
 
Damit ein Webbrowser Java-Applets zur Anzeige bringen und ausführen kann, gibt es derzeit zwei verschiedene HTML-Tags.
 
Damit ein Webbrowser Java-Applets zur Anzeige bringen und ausführen kann, gibt es derzeit zwei verschiedene HTML-Tags.
  
Tipp: Mehr über [[Java Applets starten - ab Java 7 Update 51]]
+
*Das [[Einbinden_von_Java-Applets_in_HTML-Dateien#Das_Object-Tag|<object>-Tag]] ist spätestens seit HTML5 das Standard-Tag zum Einbinden von Java-Applets.
 +
*das [[Einbinden_von_Java-Applets_in_HTML-Dateien#Das_Applet-Tag|<applet>-Tag]] gilt seit HTML 4.01 als veraltet, wurde aber weiterhin unterstützt. Seit HTML5 wird es von den meisten Browsern nicht mehr unterstützt.
  
=<span style="color:green;">Multi-Browser-Einbindung mit HTML5</span>=
+
Aktuelle Browser unterstützen Java-Applets wegen der Sicherheitsproblematik im Java-Plugin nicht mehr. Außerdem ist das [[Java-Plugin]] seit Java 9 nicht mehr Teil der [[JRE]].
Aktuell (April 2014) gibt es ein kleines Durcheinander bei der Einbindung von Java Applets in Browsern. Die eine Partei (z.B. IE11 + Chrome) möchte gern ein <b><applet></b>-Tag, die andere (z.B. Firefox und Opera) ein <b><object></b>-Tag.<br>
 
Dieses Problem kann man mit Javascript und einer Browserweiche lösen.<br>
 
Es gibt aber auch eine statische Lösung in reinem HTML 5 die für den Aufruf eines signierten Applets wie folgt aussieht:
 
<pre><object classid="java:Meinjava.class" codebase="../java" archive="Meinjava.jar"
 
  codetype="application/x-java-applet" width="100" height="100">
 
    <param name="code" value="Meinjava.class">
 
    <param name="permissions" value="all-permissions">
 
    <comment>
 
        <applet code="Meinjava.class" codebase="../java" archive="Meinjava.jar"
 
          type="application/x-java-applet;version=1.6"
 
          pluginspage="http://www.java.com/de/" width="100" height="100">
 
            <param name="code" value="Meinjava.class">
 
            <param name="permissions" value="all-permissions">
 
        </applet>
 
    </comment>
 
</object></pre>
 
Dieser HTML-Code zum Einbetten des Applets in die Webseite ist innerhalb des <b><body></b>-Tags zu notieren und der passende Doctype lautet <b><!DOCTYPE HTML></b>.<br>
 
Die Browser reagieren unterschiedlich auf die verwendeten Tags, (z.B. IE11 + Chrome) ignorieren das <b><object></b>-Tag, das <b><applet></b>-Tag wird interpretiert. Die anderen Browser ignorieren hingegen alles innerhalb von <b><comment></b> und führen das <b><object></b>-Tag aus.
 
  
Zu den Parametern:<br>
+
Tipp: Mehr über [[Java Applets und Java Web Start-Anwendungen starten - ab Java 7 Update 51]]
<b>Meinjava.jar</b> ist das signierte Java Applet<br>
 
<b>Meinjava.class</b> ist das im JAR befindliche Java Programm<br>
 
<b>codebase="..."</b> wird angegeben, wenn sich das JAR nicht in dem Verzeichnis befindet, in dem auch die einbettebde HTML-Datei gespeichert wurde, sondern in einem (abweichenden Unter-) ordner, oder einer anderen Webseite. Weitere Erläuterungen inklusive Fallbeispiele weiter unten.<br>
 
<b><param name="permissions" value="all-permissions"></b> muss in der value exakt mit der Angabe in der manifest.mf Datei im JAR übereinstimmen! Weitere Erläuterungen dazu weiter unten.<br>
 
<b>version=1.6</b> innerhalb des type Attributs bedeutet, dass das Applet auf dem Client mindestens die angegebene JRE Version oder eine neuere benötigt, um ausgeführt werden zu können. Wenn nicht, soll der Benutzer zu der Seite geleitet werden, die im Parameter <b>pluginspage</b> angegeben ist.<br>
 
Weitere Parameter über das <b><param></b> Tag können bei Bedarf ergänzt werden, sie müssen jeweils doppelt ergänzt werden, und zwar einmal für den <b><object></b>-Abschnitt und einmal für den '''<applet>'''-Abschnitt.<br>
 
<br>
 
Es gibt zu dem Thema diverse Seiten in den Oracle Docs, aber in keiner sind alle Informationen richtig im Sinne des Verhaltens der aktuellen Browser. Auf jeder Seite sind einige Sachverhalte richtig/aktuell und das funktionierende Endergebnis wurde hier zusammengetragen. Insbesondere die Angaben zum Thema <b><object></b> bzw. <b><embed></b> und Internet Explorer kann man als derzeit nichtig bezeichnen. Der IE zeigt bei <b><embed></b> lediglich Fehlermeldungen in der Konsole, führt das Applet aber nicht aus. Aus diesem Grund werden hier nicht alle Oracle Docs verlinkt.<br>
 
Wer dennoch gern dort lesen möchte, findet den Einstieg hier: [http://www.oracle.com/technetwork/java/javase/documentation/index.html Java SE Documentation]
 
  
 
=<span style="color:green;">Das Object-Tag</span>=
 
=<span style="color:green;">Das Object-Tag</span>=
Zeile 45: Zeile 21:
  
 
===Applets in Packages===
 
===Applets in Packages===
Normalerweise werden Java-Klassen in Packages zusammen gefasst. Bei der Erzeugung des Applet-Tags gibts dann einige Dinge zu beachten. So muss nun auch der Name des Packages in das ''code''-Attribut.
+
Normalerweise werden Java-Klassen in Packages zusammen gefasst. Bei der Erzeugung des Applet-Tags gibts dann einige Dinge zu beachten. So muss nun auch der Name des Packages in das ''classid''-Attribut.
  
 
Beispiel:
 
Beispiel:
Zeile 81: Zeile 57:
 
</object>
 
</object>
 
</pre>
 
</pre>
 +
 +
<span style="color:red;"><b>ACHTUNG:</b></span> Wenn die HTML Seite von einem Script (beispielsweise aus dem Verzeichnis /cgi-bin heraus) an den Browser gesendet wird, hat sich nur die folgende Syntax als lauffähig in allen aktuellen Versionen des Internet Explorer, Firefox, Chrome und Opera herausgestellt:
 +
<pre><object type="application/x-java-applet" codebase="../java" width="800" height="600">
 +
    <param name="code" value="MyApplet.class">
 +
    <param name="archive" value="../java/MyApplet.jar">
 +
</object></pre>
 +
In diesem Beispiel liegt das Applet im Verzeichnis /java und das Script mit dem die HTML Seite ausgegeben wird im Verzeichnis /cgi-bin<br>
 +
Das Wesentliche daran ist, dass der Pfad zur JAR Datei auf jeden Fall im <b>archive</b> Parameter mit angegeben werden muss. Das <b>codebase</b> Attribut ist in diesem Fall nicht zwingend notwendig.<br>
 +
(Stand: 28.04.2014)
  
  
Zeile 130: Zeile 115:
 
Das von Oracle bereit gestellte [http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/depltoolkit_index.html Deployment Toolkit] erleichtert dem Entwickler das Einbinden von Applets.
 
Das von Oracle bereit gestellte [http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/depltoolkit_index.html Deployment Toolkit] erleichtert dem Entwickler das Einbinden von Applets.
 
Es macht ihn unabhängig von Browser spezifischen oder Betriebssystem abhängigen Eigenheiten. Seit Java 1.6 Update 10 ist das Toolkit standardmäßig mit an Bord.
 
Es macht ihn unabhängig von Browser spezifischen oder Betriebssystem abhängigen Eigenheiten. Seit Java 1.6 Update 10 ist das Toolkit standardmäßig mit an Bord.
<code=php>
+
<syntaxhighlight lang="php">
 
<script src="http://www.java.com/js/deployJava.js"></script>
 
<script src="http://www.java.com/js/deployJava.js"></script>
 
<script>
 
<script>
Zeile 137: Zeile 122:
 
   deployJava.runApplet(attributes, parameters, '1.6');
 
   deployJava.runApplet(attributes, parameters, '1.6');
 
</script>
 
</script>
</code=php>
+
</syntaxhighlight>
Zum Start von Webstart- oder JavaFX-Anwendungen kann die JNLP-Datei und die benötigte JRE-Version bekannt gemacht werden. In unserem Beispiel wird die JRE 1.6 vorausgesetzt.
+
Zum Start von Webstart- oder JavaFX-Anwendungen kann die [[JNLP-Datei]] und die benötigte [[JRE]]-Version bekannt gemacht werden. In unserem Beispiel wird die JRE 1.6 vorausgesetzt.
 
Außerdem können über die JNLP-Datei zusätzliche Einstellungen für Berechtigungen vorgenommen werden.
 
Außerdem können über die JNLP-Datei zusätzliche Einstellungen für Berechtigungen vorgenommen werden.
  
Zeile 199: Zeile 184:
  
 
  '''Hinweis: Hilfestellungen zum Signieren gibts im Artikel [[Java-Applets und Java WebStart-Anwendungen signieren]]'''
 
  '''Hinweis: Hilfestellungen zum Signieren gibts im Artikel [[Java-Applets und Java WebStart-Anwendungen signieren]]'''
 +
 +
 +
{{Fragen stellen}}
  
 
=Weiterführende Links=
 
=Weiterführende Links=
Zeile 204: Zeile 192:
 
*[[Java-Applets und Java WebStart-Anwendungen signieren‎]]
 
*[[Java-Applets und Java WebStart-Anwendungen signieren‎]]
  
[[Kategorie:Java]]
+
[[Kategorie:Java Applets]]
 
[[Kategorie:Tutorials_(Java)]]
 
[[Kategorie:Tutorials_(Java)]]
 
[[Kategorie:HTML]]
 
[[Kategorie:HTML]]

Aktuelle Version vom 14. November 2021, 16:49 Uhr

Autor: Gernot Segieth

Damit ein Webbrowser Java-Applets zur Anzeige bringen und ausführen kann, gibt es derzeit zwei verschiedene HTML-Tags.

  • Das <object>-Tag ist spätestens seit HTML5 das Standard-Tag zum Einbinden von Java-Applets.
  • das <applet>-Tag gilt seit HTML 4.01 als veraltet, wurde aber weiterhin unterstützt. Seit HTML5 wird es von den meisten Browsern nicht mehr unterstützt.

Aktuelle Browser unterstützen Java-Applets wegen der Sicherheitsproblematik im Java-Plugin nicht mehr. Außerdem ist das Java-Plugin seit Java 9 nicht mehr Teil der JRE.

Tipp: Mehr über Java Applets und Java Web Start-Anwendungen starten - ab Java 7 Update 51

Das Object-Tag

Das Object-Tag zur Einbindung von Multimedia-Elementen in Webseiten wurde mit HTML 4.0 bzw. XHTML 1.0 in den Standard übernommen und löst nun das Applet-Tag ab. Das Applet-Tag gilt als veraltet und sollte nicht mehr verwendet werden.

Einbinden einer Applet-Klasse

Um ein Applet mit dem Object-Tag in eine Webseite einzubinden, werden folgende Zeilen notiert:

<object classid="java:MeinApplet.class" 
    codetype="application/x-java-applet" width="800" height="600">
</object>

Applets in Packages

Normalerweise werden Java-Klassen in Packages zusammen gefasst. Bei der Erzeugung des Applet-Tags gibts dann einige Dinge zu beachten. So muss nun auch der Name des Packages in das classid-Attribut.

Beispiel:

<object classid="java:applets.MyApplet.class"
   codetype="application/x-java-applet" width="400" height="300">
</object>

Das Applet deklariert ein hier ein Package applets, also muss die class-Datei im Verzeichnis applets liegen. Die HTML-Datei muss oberhalb von applets, d.h. eine Verzeichnisebene über applets liegen.

Einbinden eines Applets aus einer Jar-Datei

Applets können auch in einer Jar-Datei zusammengefasst und komprimiert werden, was einerseits die Übertragung verkürzt, andererseits bspw. zum Signieren von Applets erforderlich ist.

<object archive="MeinJar.jar" classid="java:MeinApplet.class" 
    codetype="application/x-java-applet" width="800" height="600">
</object>

Einbinden mehrerer Jar-Dateien

Manchmal benötigt man externe Bibliotheken, bspw. XML-Bibliotheken oder LookAndFeel's, die in einer Jar-Datei ausgeliefert werden.
Mehrere Jar-Dateien werden im archive-Attribut mit Kommata getrennt aufgelistet.

<object archive="MeinJar.jar, ExterneJar.jar" classid="java:MeinApplet.class" 
    codetype="application/x-java-applet" width="800" height="600">
</object>

Einbinden eines Applets aus einem anderen Verzeichnis

Beispiel 1

Wenn das Applet nicht auf dem gleichen Rechner oder in einem anderen Verzeichnis (unabhängig von deklarierten Packages) wie die einbettende HTML-Datei liegt, kommt das codebase-Attibut ins Spiel. In diesem Beispiel liegt die Jar-Datei in einem Verzeichnis namens applets - über dem Verzeichnis, in dem sich die einbettende HTML-Datei befindet.

<object codebase="../applets" archive="MeinJar.jar" classid="java:MeinApplet.class" 
    codetype="application/x-java-applet" width="800" height="600">
</object>

ACHTUNG: Wenn die HTML Seite von einem Script (beispielsweise aus dem Verzeichnis /cgi-bin heraus) an den Browser gesendet wird, hat sich nur die folgende Syntax als lauffähig in allen aktuellen Versionen des Internet Explorer, Firefox, Chrome und Opera herausgestellt:

<object type="application/x-java-applet" codebase="../java" width="800" height="600">
    <param name="code" value="MyApplet.class">
    <param name="archive" value="../java/MyApplet.jar">
</object>

In diesem Beispiel liegt das Applet im Verzeichnis /java und das Script mit dem die HTML Seite ausgegeben wird im Verzeichnis /cgi-bin
Das Wesentliche daran ist, dass der Pfad zur JAR Datei auf jeden Fall im archive Parameter mit angegeben werden muss. Das codebase Attribut ist in diesem Fall nicht zwingend notwendig.
(Stand: 28.04.2014)


Beispiel 2

<object codebase="./applets" archive="MyAppletLib.jar" classid="java:applets.MyApplet.class" 
     codetype="application/x-java-applet" width="400" height="300">
</object>

In diesem Beispiel befindet sich das Applet und alle noch benötigten Dateien und Klassen in einem Jar-Archiv namens MyAppletLib.jar. Das Jar-Archiv ist in dem im codebase-Attribut angebenen Verzeichnis relativ zur HTML-Datei gespeichert (Eine Verzeichnisebene tiefer, im Verzeichnis applets). Würde bspw. das codebase-Attribut fehlen, müsste die Jar-Datei im Verzeichnis der HTML-Datei gespeichert sein. Im Jar-Archiv existiert im Wurzelverzeichnis ein Package namens applets in welchem das Applet liegt.

Einbinden eines Applets von einem anderen Server

In diesem Beispiel liegt die Jar-Datei auf einem anderen Webserver in einem Verzeichnis namens applets.

Der Browser wird hier angewiesen, das Applet von der im codebase-Attribut angegebenen URL zu laden. Das Applet leigt in diesem Beispiel in einem Verzeichnis examples auf einem anderen Webserver. Auch hier liegt das Applet wieder in einem Package applets, welches sich innerhalb des Verzeichnisses examples befindet.

<object codebase="http://www.meine-domain.de/examples" archive="MeinJar.jar" classid="java:applets.MeinApplet.class" 
    codetype="application/x-java-applet" width="800" height="600">
</object>

Zusätzliche Attribute

param

Applets sind keineswegs starre Konstrukte. Es können von außen durch Parameter Werte eingeschleust werden, die entweder statisch festgelegt oder dynamisch, bspw. mit PHP generiert wurden.

<object classid="java:MeinApplet.class" 
    codetype="application/x-java-applet" width="400" height="300">
    <param name="bild1" value="duke.gif" />
</object>

Permission (seit Java 7 Update 51)

Oracle selbst benutzt in seinen Dokumentationen immer noch das Applet-Tag! Aber im Object-Tag sollte der neue Pflichtparameter auch funktionieren.
Seit Version 7 Update 51 der JRE ist im Applet-Tag ein ganz bestimmter Parameter Pflicht, der mit den Einstellungen des Manifests (Applets müssen nun immer signiert sein) übereinstimmen muss. Anderenfalls wird das Applet blockiert.

<applet code="MeinApplet.class" width="800" height="600">
<param name="permissions" value="sandbox" />
</applet>

Zwei Werte kommen für Permission zur Auswahl:

  • sandbox - zur Kennzeichnung, dass das Applet keine weiteren Rechte auf dem Client benötigt
  • all-permissions - zur Kennzeichnung, dass das Applet volle Rechte auf dem Client benötigt

Zusätzlich müssen Applets nun signiert werden. Im Manifest der Jar-Datei muss der gleiche Wert für permission eingetragen werden, sonst wird das Applet blockiert, bzw. nicht gestartet.

Hinweis: Hilfestellungen zum Signieren gibts im Artikel Java-Applets und Java WebStart-Anwendungen signieren

Einbinden per Javascript

Das von Oracle bereit gestellte Deployment Toolkit erleichtert dem Entwickler das Einbinden von Applets. Es macht ihn unabhängig von Browser spezifischen oder Betriebssystem abhängigen Eigenheiten. Seit Java 1.6 Update 10 ist das Toolkit standardmäßig mit an Bord.

<script src="http://www.java.com/js/deployJava.js"></script>
<script>
   var attributes = {code:'applets.MyApplet.class', width: 400, height: 300};
   var parameters = {jnlp_href: 'myapplet_demo.jnlp'};
   deployJava.runApplet(attributes, parameters, '1.6');
</script>

Zum Start von Webstart- oder JavaFX-Anwendungen kann die JNLP-Datei und die benötigte JRE-Version bekannt gemacht werden. In unserem Beispiel wird die JRE 1.6 vorausgesetzt. Außerdem können über die JNLP-Datei zusätzliche Einstellungen für Berechtigungen vorgenommen werden.

Das Applet-Tag

Bis zur Verabschiedung des HTML 4.0-Standards, war das Applet-Tag zum Einbinden von Java-Applets in Webseiten vorgesehen. Inzwischen gilt es als veraltet und wurde vom W3C mit dem Object-Tag ersetzt. In HTML5 funktioniert es gar nicht mehr.

Einbinden einer Applet-Klasse

<applet code="MeinApplet.class" width="800" height="600">
</applet>

Einbinden eines Applets aus einer Jar-Datei

<applet archive="MeinJar.jar" code="MeinApplet.class" width="800" height="600">
</applet>

Einbinden mehrerer Jar-Dateien

<applet archive="MeinJar.jar,ExternesJar.jar" code="MeinApplet.class" width="800" height="600">
</applet>

Einbinden eines Applets aus einem anderen Verzeichnis

In diesem Beispiel liegt die Jar-Datei in einem Verzeichnis namens applets - über dem Verzeichnis, in dem sich die einbettende HTML-Datei befindet.

<applet codebase="../applets" archive="MeinJar.jar" code="MeinApplet.class" width="800" height="600">
</applet>

Einbinden eines Applets von einem anderen Server

In diesem Beispiel liegt die Jar-Datei auf einem anderen Webserver in einem Verzeichnis namens applets.

<applet codebase="http://www.meine-domain.de/applets" archive="MeinJar.jar" code="MeinApplet.class" width="800" height="600">
</applet>

Zusätzliche Attribute

param

Mit dem Parameter-Attribut können in der Webseite beliebige Werte von außen ins Applet eingeschleust und verarbeitet werden.

<applet code="MeinApplet.class" width="800" height="600">
<param name="bild1" value="duke.gif">
</applet>

Permission (seit Java 7 Update 51)

Oracle selbst benutzt in seinen Dokumentationen immer noch das Applet-Tag! Seit Version 7 Update 51 der JRE ist im Applet-Tag ein ganz bestimmter Parameter Pflicht, der mit den Einstellungen des Manifests (Applets müssen nun immer signiert sein) übereinstimmen muss. Anderenfalls wird das Applet blockiert.

<applet code="MeinApplet.class" width="800" height="600">
<param name="permissions" value="sandbox" />
</applet>

Zwei Werte kommen für Permission zur Auswahl:

  • sandbox - zur Kennzeichnung, dass das Applet keine weiteren Rechte auf dem Client benötigt
  • all-permissions - zur Kennzeichnung, dass das Applet volle Rechte auf dem Client benötigt

Zusätzlich müssen Applets nun signiert werden. Im Manifest der Jar-Datei muss der gleiche Wert für permission eingetragen werden, sonst wird das Applet blockiert, bzw. nicht gestartet.

Hinweis: Hilfestellungen zum Signieren gibts im Artikel Java-Applets und Java WebStart-Anwendungen signieren


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.


Weiterführende Links