Interaktion Java und JavaScript

Transcription

Interaktion Java und JavaScript
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