Wie lässt sich Java Webstart verwenden?

Webstart ist ein Hilfsprogramm, das es ermöglicht, automatisch die jeweils aktuellste Version einer Desktop-Applikation aus dem Internet zu laden und zu starten. Dies geschieht durch den Download einer kleinen *.jnlp-Datei, die ihrerseits das Webstart-Programm startet, was dann wiederum die gewünschte Applikation aus dem Netz lädt und ausführt.
Die Vorteile dieses Verfahrens bestehen u.a. darin, dass Applikationen in signierter Form und in der jeweils neuesten Version ausgeführt werden können. Zudem sind sie weitgehend versionsunabhängig, werden lokal zwischengespeichert, sodass sie nicht jedes Mal nachgeladen werden müssen und laufen in einer Umgebung ab, die den strengen Java-Sicherheitsstandards entsprechen.
Um Java-Webstart zu nutzen muss zunächst eine beliebige Java-Applikation hergestellt und als *.jar-Datei gepackt werden.
Der nächste Schritt ist das Erstellen einer *.jnlp-Datei. Das ist eine einfache XML-Datei mit der Endung *.jnlp, die dem folgenden Beispiel folgt (gezeigt ist hier diejenige des hiesigen Webstart-Angebots von Cent).
<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+"
codebase="http://www.javabeginners.de/webstart/"
href="http://www.javabeginners.de/webstart/jnlp/Cent.jnlp"> 
    <information> 
        <title>Cent</title> 
        <vendor>yourwebs.de</vendor> 
        <homepage href="http://javabeginners.de/Projekte/Applications/Cent.php"/> 
        <description>
            Cent - Konvertierung von Sonderzeichen zu HTML- oder numerischen Unicode-Entities
        </description> 
        <description kind="short">
            Cent Sonderzeichenkonvertierer
        </description> 
        <offline-allowed/> 
    </information> 
    <security>
        <all-permissions/>
     </security>
    <resources> 
        <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+"/> 
        <jar href="http://www.javabeginners.de/webstart/Cent.jar"/> 
    </resources> 
    <application-desc main-class="Cent"/> 
</jnlp>
Gehen wir die Datei der Reihe nach durch:
  • codebase definiert die URL des Ablageortes der *.jar-Datei auf dem Server, das href-Attribut die URL der *.jnlp-Datei.
  • der Bereich information speichert einige allgemeine Informationen zum Zielprogramm. Die hier unter homepage angegebene URL kann auf eine Webseite leiten, die weitere Informationen für interessierte Nutzer bereitstellt.
    offline-allowed bezeichnet ein Element, das festlegt, ob die Applikation offline betrieben werden kann, damit ggfs. auf den Cache des Webbrowsers zugegriffen werden kann.
  • Der Bereich security definiert die Sicherheitseinstellungen. Die Standardeinstellungen erlauben der geladenen Applikation keinen Zugriff auf das Dateisystem des Client-Rechners, Netzwerkzugriffe, etc. Dies kann durch die Eigenschaft all-permissions umgangen werden. Allerdings ist die digitale Signatur der ausgeführten *.jar-Datei hierfür zwingend nötig. Sie wird unten erläutert.
  • resources legt fest, welche *.jar-Dateien mit dem auszuführenden Programm geladen werden müssen und wo sie gefunden werden können. Es muss unbedingt darauf geachtet werden, dass die Java-Versionsangaben innerhalb einer *.jar-Angabe, ebenso wie im einleitenden jnlp-Tag die korrekte Syntax aufweisen. Eine Angabe von z.B. 1.6.0 führt dazu, dass die Applikation u.U. nicht gestartet werden kann.
Weiterführende Informationen zur Syntax einer *.jnlp-Datei sind in englischer Sprache z.B. hier oder hier zu finden.

*.jar signieren

Zur Verifizierung der ausführbaren *.jar-Datei muss zunächst ein Schlüssel erstellt werden, mit dem in einem zweiten Schritt die Datei signiert wird. Hierzu werden zwei Kommandozeilen-Programme benötigt, die jedoch bereits mit dem Java-SDK mitgeliefert werden:
Keytool erstellt einmalig einen sog. Keystore im Home-Verzeichnis des Nutzers in der Datei .keystore, der den Schlüssel enthält und passwortgeschützt ist. Ist der Schlüssel abgelaufen, kann die Datei einfach gelöscht und neu angelegt werden:
# -genkey erstellt den Schlüssel
# -validity legt die Gültigkeit in Tagen fest
# -keyalg bestimmt den Verschlüsselungsalgorithmus
# -alias legt den Namen des Schlüssels fest
keytool -genkey -validity 365 -keyalg rsa -alias meinKey
Nun kann die *.jar-Datei signiert werden. Hierzu wechselt man in das Verzeichnis mit der *.jar-Datei
cd pfadZurJarDatei
und führt die Signatur mit dem jarsigner aus:
jarsigner meineDatei.jar meinKey
Die Einbindung in die Webseite erfolgt dann durch Aufruf der *.jnlp-Datei:
<a href="pfadZurJnlpDatei.jnlp">start</a>
letzte Änderung an:
switch-case-Verzweigung