# Java-Applet

Ein Java-Applet ist ein Computerprogramm, das mittels Java-Technologie erstellt und normalerweise in einem Webbrowser ausgeführt wird. Applets wurden eingeführt, um Programme in Webseiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten zum Server senden zu müssen. Java-Applets waren Ende der 1990er Jahre mit ein Grund für den Erfolg und die schnelle Verbreitung von Java.
Neben Applets existieren auch Servlets; das sind ebenfalls Java-Programme, die allerdings auf dem Server ausgeführt werden.
Appletbezogene Klassen der Java Standardbibliothek werden seit Version 9 als veraltet (engl. deprecated) markiert, was eine Warnung zur Kompilierungszeit generiert. Ab Version 11 hat Oracle den Support für Applets ganz entfernt.

## Java-Applets im Webbrowser

Üblicherweise werden Java-Applets von HTML-Seiten aufgerufen. Um sie ausführen zu können, muss der jeweilige Webbrowser über eine entsprechende Java-VM verfügen. Diese VM, die Laufzeitumgebung für das Java-Applet, kann entweder Teil des entsprechenden Browsers sein oder in Form eines Java Plug-ins nachträglich installiert werden (z. B. JRE von Oracle). Eine weitere Möglichkeit besteht darin, dass der Browser – wie im Fall historischer Versionen von Opera – direkt mit der VM in Verbindung tritt, also ohne Umweg über ein Plugin.

### Beispiele für Webbrowser mit integrierter Java-VM

Der Funktionsumfang dieser VMs entspricht nur der JDK-Version 1.1, sie sind aus heutiger Sicht veraltet. Eine aktuelle VM lässt sich aber nachinstallieren.
* Internet Explorer 3, 4, 5 und 5.5 (Java-1.1.4 ohne RMI/JNI). Microsoft hat die Weiterentwicklung und den Vertrieb der MSJVM eingestellt.
* Netscape Navigator 3.x und 4.x (Java-1.1.5)

### Beispiele für Webbrowser ohne integrierte Java-VM

Um mit diesen Browsern Applets nutzen zu können, muss eine VM nachinstalliert werden.
* Mozilla und alle darauf basierenden Browser wie Netscape Navigator 6.x und 7.x, Mozilla Firefox
* Opera
* Apple Safari
* Internet Explorer ab Version 6

## Appletprogrammierung

Die Einbindung des Applets in den HTML-Code von Webseiten erfolgt per 2015 mit dem object-Element, das gegenüber dem embed-Element zu bevorzugen ist. Das früher eingesetzte applet-Element gilt mit HTML4 als deprecated und mit HTML5 als obsolete. Alle Java-Applets werden von der Java-Klasse java.applet.Applet abgeleitet. Sie verfügen unter anderen über die folgenden Methoden, jedoch nicht über eine Methode main, wie sie für Java-Anwendungen benötigt wird.
* init – wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird.
* start – wird jedes Mal aufgerufen, wenn das Applet sichtbar wird.
* paint(…) – Zeichenmethode für die Anzeigefunktionen des Applet
* stop – wird jedes Mal aufgerufen, wenn das Applet verdeckt wird, z. B. weil das Browser-Fenster von einem anderen Fenster überdeckt wird.
* destroy – wird aufgerufen, wenn das Applet aus dem Hauptspeicher entladen wird.
Für die Programmierung der Benutzeroberfläche können die beiden Techniken Swing oder AWT verwendet werden. Jedoch ergibt sich die Einschränkung, dass das in die HTML-Oberfläche eingebettete Fenster nicht programmgesteuert geschlossen werden kann, man kann aber zusätzliche Fenster öffnen.

## Sicherheit

Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher – wie jedes lokal ausführbare Programm – ein Sicherheitsrisiko dar (Java Drive-By Exploit). Da die Applets in einer abgeschotteten Laufzeitumgebung (Sandbox) laufen, ist dieses Risiko jedoch gut beherrschbar. Ein Sicherheitsrisiko durch „böswillige“ Applets besteht nur, wenn die Sandbox fehlerhaft ist.
Wegen zahlreicher Sicherheitslücken werden Java-Applets ohne Zertifikat durch die neueren Java-Versionen blockiert. Mozilla Firefox hat mit Version 52 die Java-Unterstützung total eingestellt.

## Einsatzbereiche, Vorteile und Nachteile

Die Applet-Technologie bietet dem Programmierer unter Berücksichtigung der Sicherheitsregeln den vollen Funktionsumfang aus der J2SE-API und eignet sich sehr gut für Anwendungen in gepflegten Unternehmensnetzen, bei denen alle Anwender die gleiche Java-Version haben. In Zusammenarbeit z. B. mit Servlets oder Application Servern lassen sich komplexe Anwendungen erstellen, die auf diese Weise auf die Installation lokaler Software verzichten und ohne großen Aufwand mit unterschiedlichen Browsern und Betriebssystemen laufen können.
Ein Nachteil für den Einsatz im Internet und an langsamen Netzwerkanschlüssen ist aber die Größe der JRE mit 12,5 MB (Stand JRE 6.0). Ein weiterer Nachteil ist die vergleichsweise lange Initialisierungszeit für die JVM, wenn diese noch nicht geladen ist, sowie die Zeit, um das Applet herunterzuladen und zu initialisieren. Mit der Einführung des sogenannten Java-Kernels in Java SE 6 Update 10 kann die Ladezeit der JVM jedoch deutlich verkürzt werden.
Zu beachten ist auch, dass Inhalte von Java-Applets nicht von Suchmaschinen erfasst werden können.

## Hybrides Applet

Indem ein Java-Applet um eine main-Methode erweitert wird, kann es per Doppelklick auf die entsprechende jar-Datei auch als gewöhnliche Java-Anwendung gestartet werden. Dies ist einerseits für Testzwecke praktisch, da das Applet nicht in einen Webbrowser eingebunden werden muss, zum anderen wird eine Java-Anwendung nicht in einem geschützten Bereich ausgeführt, sondern erhält (abgesehen von lokalen Sicherheitsbeschränkungen) grundsätzlich Vollzugriff auf das System. Letzteres kann jedoch zum Nachteil werden, da ein bösartiges Applet somit problemlos Schadcode ausführen kann.

## Einsatz von Applets

Neben vielen Einsätzen in firmeninterner Software finden Applets auch Einsatz in öffentlich umfangreich genutzter Software. Beispiele hierfür sind:
* Fotodienstleister, welche den Upload und die Bearbeitung mit Applets abwickeln