Interaktion Java und JavaScript Eliane Müller Inhalt • JavaScript • LiveConnect • Aufruf von Java aus JavaScript via client-side LiveConnect • Aufruf von JavaScript aus Java via client-side LiveConnect • Anwendung: Physlets • Fazit 2 Interaktionsdreieck JavaScript Java Browser HTML 3 JavaScript • Microsoft entwickelte eigene JavaScript Version: JScript • Starke Auseinanderentwicklung von JavaScript und JScript • ECMAScript von ECMA: seit 1998 internationaler Standard, um dieser Entwicklung entgegenzuwirken ⇒ JavaScript und JScript als Implementationen von ECMAScript 4 Aktuelle Versionen • JavaScript 1.5 (2. 2001) • JScript 5.5 (4. 2000) 5 Client-side JavaScript • JavaScript, das in einem Browser auf dem Computer des Anwenders ausgeführt wird • JavaScriptfähige Browser: Netscape Communicator (Version 2.0+), Microsoft Internet Explorer (JScript) (Version 3.0+), Opera (ECMAScript),... 6 Server-side JavaScript • JavaScript-Code wird auf dem Server ausgeführt • Anwendungen: – Dateien auf Server schreiben/auslesen – Datenaustausch zwischen verschiedenen Clients – E-Mails versenden – Datenbanken ansprechen 7 Interaktionsdreieck JavaScript Java Browser HTML 8 Applets • können in HTML-Seiten eingebunden werden ⇒ ansprechendere, funktionellere HTMLSeiten ⇒ Anwendung ist verfügbar für alle, die Zugang zum WWW/Intranet haben 9 LiveConnect JavaScript Java Methoden JavaScript Methoden Java Browser HTML 10 Java-JavaScriptKommunikation • Java und JavaScript waren ursprünglich unabhängig voneinander • stärkere Zusammenarbeit war geplant ⇒ LiveConnect 11 LiveConnect • LiveConnect ist eine Technologie, die Java, JavaScript und Plug-Ins verbindet • unsichtbare Architektur, die im Hintergrund läuft • kein grosser zusätzlicher Aufwand notwendig: – JavaScript-Code muss nicht abgeändert werden, – Java-Applets unterstützen LiveConnect, wenn sie public sind. 12 LiveConnect • ist eine Technik von Netscape, wird auch vom Microsoft Internet Explorer unterstützt • client-side LiveConnect • server-side LiveConnect 13 Von JavaScript nach Java via Client-side LiveConnect • Aufruf von vordefinierten Java-Methoden • Zugriff mit JavaScript auf Java-Applets 14 Aufruf von vordefinierten Methoden • Mit JavaScript hat man im Netscape Navigator (seit der Version 3.0) Zugriff auf alle vordefinierten Java-Pakete und -Klassen. • Java-Pakete und -Klassen werden in JavaScript als Eigenschaften des Packages- Objekts betrachtet • Zugriff: [Packages.]packageName.className.methodName 15 Beispiel 1: Ausgabe auf der Java-Konsole <html> <head> <script language="JavaScript"> function gruss() { System = java.lang.System; System.out.println(“Gruss von JavaScript“); } </script> </head> <body> <form> <input type=“button“ value=“bitte dr&uuml;cken“ onclick=“gruss()“> </form> </body> </html> 16 Zugriff mit JavaScript auf JavaApplets • Es gibt Situationen, in denen sich eine Kombination aus Java und JavaScript anbietet: – Java ist bezgl. Grafikausgabe flexibler als JavaScript – Java besitzt keine so enge Verknüpfung zur HTML-Seite, wie JavaScript 17 Zugriff mit JavaScript auf JavaApplets • Gegenüber einem Java-Applet hat ein JavaScript-Programm die gleichen Freiheiten wie eine andere Java-Klasse. ⇒ JavaScript hat Zugriff auf alle Elemente und Methoden des Applets, die public sind. • Static Methoden eines Applets sind für JavaScript als Methoden des Applet Objekts verfügbar 18 Zugriff mit JavaScript auf JavaApplets • JavaScript hat Zugriff auf alle Applets, die auf einer HTML-Seite eingebettet sind. • Einzelne Applets werden wie normale JavaScript-Objekte adressiert: document.appletName bzw. document.applets[0] 19 Beispiel 2: HelloWorld.html <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function newString() { document.TestApplet.setString(document.form1.str.value); } </SCRIPT> </HEAD> <BODY> <APPLET CODE="HelloWorld.class" NAME="TestApplet" WIDTH=150 HEIGHT= 25> </APPLET> <FORM NAME="form1"> <INPUT TYPE="button" "VALUE="Set String" onClick="newString()“ > <BR> <INPUT TYPE="text" SIZE="20" NAME="str"> </FORM> </BODY> </HTML> 20 Applet HelloWorld.java import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { String myString; public void init() { myString = new String("Hello, world!"); } public void paint (Graphics g) { g.drawString(myString, 50, 25); } public void setString(String aString) { myString = aString; repaint(); } } 21 Datentyp-Konvertierung von JavaScript nach Java JavaScript Java string, number, boolean string, float, boolean Wrapper (um Java-Objekt) Objekt JavaScript-Objekt netscape.javascript. JSObject 22 <html> <head> <script language="JavaScript"> Beispiel 3: Balken.html var meinApplet; function init() { meinApplet = document.BalkenApplet; } function neuerBalken(formular) { var laenge = parseInt(formular.x1.value)*3.1; if (laenge < 0) alert("Nur positive Zahlen"); else if (laenge > 310) alert("Nur bis 100"); else if (meinApplet != null) meinApplet.zeichneBalken(laenge); } </script> <body onLoad="init()"> <applet code="BalkenApplet.class" name="BalkenApplet" width="360" height="360"></applet> <form name="eingabe"> Wert: <input type="text" name="x1" value="10" size="5"> <input type="button" value="Wert setzen (in Prozent)“ onClick="neuerBalken(this.form)"> </form> 23 </body> </html> import java.awt.*; import java.applet.Applet; Beispiel 3 public class BalkenApplet extends Applet { int x, y, width, height; Color color[] = {new Color(150, 0, 0), new Color(255, 128, 0), new Color(255, 255, 0), new Color(0, 255, 0), new Color(0, 150, 0), new Color(0, 150, 150), new Color(0, 0, 255), new Color(0, 0, 150), new Color(128, 0, 128), new Color(0, 0, 0), }; int index = 9; public void paint(Graphics g) { boolean opaque = true; g.setColor(color[index++ % 10]); g.fillRect(x, y, width, height); } public void update(Graphics g) { paint(g); } public void zeichneBalken(int width) { this.x = 10; this.y += 40; this.width = width; this.height = 20; repaint(); } 24 Von Java nach JavaScript via Client-side LiveConnect • Um auf JavaScript-Methoden von einem Java-Applet aus zuzugreifen, muss das Netscape javascript package importiert werden: import.netscape.javascript.* • netscape.javascript definiert die Klasse JSObject und das Objekt JSException. 25 Von Java nach JavaScript via Client-side LiveConnect • Zugriff auf das Browserfenster: um auf JavaScript Objekte zugreifen zu können, muss zuerst ein Objekt JSObject erstellt werden, das das Browserfenster repräsentiert: JSObject win=JSObject.getWindow(this); 26 Von Java nach JavaScript via Client-side LiveConnect • Mit dem Attribut MAYSCRIPT des <APPLET>Tags in der HTML-Seite wird dem Applet Zugang zu JavaScript erlaubt. 27 Datentyp-Konvertierung von Java nach JavaScript Java JavaScript boolean JavaScript-boolean byte, char, short, int, long, float, double Number String JavaScript-String JSObject JavaScript-Objekt Java-Objekte und Java-Arrays Wrapper (um JavaObjekt) 28 <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> var myApplet; function init() { myApplet = document.TestApplet; } function newString() { document.TestApplet.setString(document.form1.str.value); } </SCRIPT> </HEAD> <BODY> <APPLET CODE= "HelloWorld1.class" NAME= "TestApplet" WIDTH= 150 HEIGHT= 25 MAYSCRIPT > </APPLET> <FORM NAME="form1"> <INPUT TYPE="button" VALUE="Set String" onClick="newString()"> <BR> <INPUT TYPE="text" SIZE="20" NAME="str"> </FORM> </BODY> 29 </HTML> Beispiel 4: HelloWorld1.html import netscape.javascript.*; import java.applet.Applet; import java.awt.*; public class HelloWorld1 extends Applet String myString; Applet HelloWorld1.java { public void init() { myString = new String("Hello, world!"); } public void paint (Graphics g) { g.drawString(myString, 50, 25); JSObject win = JSObject.getWindow(this); String args = "Painting!"; win.call ("alert", args); } public void setString (String aString) myString = aString; repaint(); } } { 30 Anwendung: Physlets • „Physics applets“: – – – – relativ klein einfache Grafik können über JavaScript kontrolliert werden http://webphysics.davidson.edu/Applets/Applets.ht ml 31 Fazit • Mit LiveConnect kann ohne grossen Aufwand von JavaScript aus auf Java-Applets zugegriffen werden und umgekehrt. 32 Quellenangaben • St. Koch: JavaScript, dpunkt.verlag, 2. Auflage 1999 • D. W. Barron: The World of Scripting Languages, John Wiley & Sons Verlag, 2000 • Java, JavaScript and Plug-In interaction using clientside LiveConnect • LiveConnect • Physlets resource page 33 Interaktion Java und JavaScript Eliane Müller Von Java nach JavaScript via Client-side LiveConnect • Zugriff auf Objekte und Elemente: – JSObject erzeugen, das sich auf das documentObjekt bezieht: JSObject doc = win.getMember(“document“); – Mit getMember() können Eigenschaften und Unterobjekte eines Objekts angesprochen werden. 35 Von Java nach JavaScript via Client-side LiveConnect • Zugriff auf JavaScript-Methoden: – call: ruft JavaScript-Methode auf – eval: wertet JavaScript-Ausdruck aus 36