Man kann das Horoskop-Applet an Stelle von festen Graphiken verwenden, um in einem astrologischen Text Horoskopfiguren unterzubringen. Die Stärke des Applets sind aber die Interaktionsmöglichkeiten. Wenn der Browser nicht nur Java interpretiert, sondern auch JavaScript/Java-Kommunikation zulässt (und das gilt heute für die meisten Browser, nur Safari und IE for Macintosh bilden unrühmliche Ausnahmen), kann der Benutzer über Drucktasten und Eingabefelder Funktionen des Applets anstossen. Auch eine Applet-Applet-Kommunikation mit selbstverfassten weiteren Applets ist möglich.
Die Horoskopdarstellung ist bewusst auf die sieben klassischen astrologischen Planeten Sonne, Mond, Merkur, Venus, Mars, Jupiter und Saturn (wir alle wissen, dass die Astronomen das Wort Planet anders definieren, interessieren uns aber nicht dafür) sowie auf die drei Transsaturnier Uranus, Neptun und Pluto beschränkt. Die Hausberechnung erfolgt nach dem Placidussystem, Erweiterungen auf andere Häusersysteme sind geplant.
./AstroUI/HoroApplet.class // Das Horoskop-Applet ./AstroUI/ILoadListener.class // Ein Interface (s.u.) ./AstroOL/Calculator.class // Astrologischer Rechner ./rsc/mime/SO.gif bis ./rsc/mime/PL.gif // Planetensymbole ./rsc/mime/AR.gif bis ./rsc/mime/PS.gif // Tierkreiszeichensymbole
/servlet/Ephemeris?planets&houses&jd=2451544.5&lon=7.2833&lat=52.3333
planets:279.8592,217.2933,271.1118,240.9614,327.5755,25.2331,40.4059,314.7841,303.1753,251.4372 houses:192.0288,217.1332,248.6104,285.8994,321.3361,349.8952,12.0288,37.1332,68.6104,105.8994,141.3361,169.8952
./AstroOL/LowPrecCalculator.class // Niedriggenauer Rechner ./AstroOL/Elements.class // Hilfsklasse für die Bahnelemente ./rsc/data/J1950.dat // Binärdatei für 1950-2049
Das folgende Jar-File enthält die genannten Objekte, die für den Betrieb des Applets nötig sind. Das Verzeichnis ./rsc/data enthält die Binärdateien für weitere Jahrhunderte zum Download. Sie benötigen sie nur, wenn Sie den niedriggenauen Rechner (LowPrecCalculator) einsetzen wollen.
./rsc/data
LowPrecCalculator
Solange der Internet Explorer 5.5 noch so weit verbreitet ist wie er es zur Zeit ist, muss man seine Applets mit dem ältesten noch bei Sun verfügbaren Development Kit, nämlich mit dem JDK 1.1.8 compilieren. Nimmt man stattdessen JDK 1.3 oder höher, so läuft man Gefahr, dass das Applet auf den älteren Internet Explorer Versionen nicht präsentiert wird. Daher hat man bei der Applet-Entwicklung gewisse Restriktionen zu beachten: Es dürfen nur die bereits im JDK 1.1.8 enthaltenen Sprachelemente verwendet werden, keine späteren. Man sollte für das UI daher auch AWT verwenden und nicht Swing - denn sonst müssen Benutzer älterer Browserversionen eine doch recht umfangreiche Swing Library aus dem Netz hinzuladen, um das Applet zu Gesicht zu bekommen.
Entsprechend buntgemischt (oder auch grau) sind die Resultate. Wenn ein Browser sich entscheidet, ein bestimmtes Applet nicht zu präsentieren, enthält die angezeigte Webseite anstelle der Horoskopgraphik ein hässliches graues Rechteck als Platzhalter, und die Statusleiste bringt irgendeine beängstigende Meldung (zum Beispiel "java.lang.NullPointerException").
Dazu kommt, dass die Rechner der Websurfer unterschiedlich leistungsfähig sind. Wer der Seite eher zufällig einen Besuch abstattete, hat keine Lust, grosse Mengen an Code herunterzuladen, bevor er etwas zu sehen bekommt: Hic Rhodos, hic salta: die Seite soll ohne Umschweife und vollständig erscheinen, sonst ist der Besucher wieder weg.
All dies spricht dafür, auf dem Client nur das nötigste, unumgängliche Coding zu prozessieren: den Teil des Programms nämlich, der für die Präsentation des Horoskops zuständig ist. Die Berechnungen selbst führt man besser auf dem Server aus: Die Java-Maschine, die dort läuft, hat man selber unter Kontrolle, und man kann dort auch das neueste Sprachrelease verwenden, statt sich auf den kleinsten gemeinsamen Nenner der im Internet verwendeten VM's herabbegeben zu müssen. Um Code vom Applet aus auf dem Server prozessieren, bedarf es eines Servlets, das über den eigenen Host gerufen werden kann: das sogenannte Crosshosting, also die HTTP-Kommunikation eines Applets mit einem anderen Rechner als dem, von dem es stammt, ist üblicherweise aus Sicherheitsgründen unterbunden. Zwar hat man die Möglichkeit, einem Applet mehr Rechte als üblich zu geben (durch Editieren des .policy-Files), aber auch diese Prozedur ist einem normalen Surfer nicht zuzumuten.
Am sichersten berechnen Sie die Planeten- und Hauspositionen direkt auf dem Server, indem Sie nicht ein statisches HTML-File, sondern eine Java Server Page verwenden. So haben Sie die Möglichkeit, noch bevor der Anwender die HTML-Seite zu Gesicht bekommt, serverseitige Logik zu prozessieren. In diesem Fall füllen Sie dann die Applet-Parameter planets und houses ab und geben dem Applet auf dem PC daher die anzuzeigenden Planeten- und Hauspositionen vor. Auf der Java Server Page könnte das Tag zum Beispiel so aussehen (wobei die Strings houses und planets zuvor berechnet worden sind):
<applet name = "Horoskop" code = "AstroUI.HoroApplet.class" width = "600" height = "400"> <% if (planets != null) { %> <param name="planets" value="<%=planets%>"> <% } if (houses != null) { %> <param name="houses" value="<%=houses%>"> <% } if (timePlace != null) { %> <param name="timePlace" value="<%=timePlace%>"> <% } if (sbErr != null) { %> <param name="messages" value="<%=sbErr%>"> <% } %> </applet>
<applet name = "Horoskop" code = "AstroUI.HoroApplet.class" width = "600" height = "400"> <param name="planets" value="279.8592,217.2933,271.1118,240.9614,327.5755,25.2331,40.4059,314.7841,303.1753,251.4372"> <param name="houses" value="192.0288,217.1332,248.6104,285.8994,321.3361,349.8952,12.0288,37.1332,68.6104,105.8994,141.3361,169.8952"> <param name="messages" value="Systemmeldung xy bei der Planetenberechnung"> </applet>
Und was ist mit der "Systemmeldung xy" passiert? Sie wird in der Java Konsole ausgegeben. Über den Parameter messages hat man bei dieser Verwendung des Applets also die Möglichkeit, Hintergrundinformationen mitzusenden, ohne den Benutzer zu stören (nützlich zum Beispiel für die Fehlerbehebung).
Sie können gleichzeitig mit festen Werten für Häuser und Planeten zusätzlich eine Servlet-URL mitgeben. Das hat den Sinn, die Werte nachträglich noch mittels Javascript zu beeinflussen.
jsHor
String
setTimePlace( )
timePlace
HoroApplet.class
HoroCompare.class
Ein anderes Anwendungsbeispiel ist der Geburtstagsprüfer, den Sie sich zum Beispiel in Ihre Browser-Startseite einbauen können.
<APPLET CODE = "AstroUI.HoroCompare.class" ARCHIVE = "horo.jar" NAME = "Horoskop" WIDTH = 470 HEIGHT = 360 HSPACE = 0 VSPACE = 0 ALIGN = "MIDDLE"> <PARAM NAME="tile" VALUE=".62"> <PARAM NAME="timePlace" VALUE="now"> <PARAM NAME="timePlaceOut" VALUE="31.12.1980 21h19m 13e30 52n30"> <PARAM NAME="calculator" VALUE="LowPrecCalculator"> <PARAM NAME="precision" VALUE="min"> </APPLET>