在JavaScript中使用Java

來源:互聯網
上載者:User
 

12.3 在JavaScript中使用Java

利用JavaScript可以把Java語言的小應用程式(applet),外掛程式以及包括表單、超
級連結和圖象在內的各種Web元素有機地聯絡起來。

JavaScript用一個叫做applets的applet對象數組來訪問Java的applet。applets數
組是瀏覽器對象document的一個屬性。這個數組中的每一個applet對象都按照它們
在HTML原始碼中出現的順序排列,下標值從0開始。

<applet code="Blink.class" name="Blink" width=300 height=100>

則相應的JavaScript語言中的applet對象既可以使用類似document.applets[0]形
式表示,也可以使用document.Blink來訪問,Blink是這個小應用程式的名稱。

有一種特殊的情況,在JavaScript中不能通過網路訪問Java的屬性,也就是說
JavaScript只能調用本地的Java小應用程式中的各種公用變數和屬性。這樣的設計
是為了保障Java的安全性。

除了可以在JavaScript中訪問Java的小應用程式以外,還可以利用JavaScript訪問
Java包名字空間的任何一個類。Java語言中提到的類(class)的概念同
JavaScript中的對象概念是一致的。

提示:Java中的各種對象被組織成類,類又被組織成包,包中的子類從它的基類中
繼承屬性和方法,並加以擴充和改變。

任何一個Java中的類都可以使用一個簡單的文法對應一個JavaScript中的對象。例
如:
var javaSystem=Java.lang.System;

則JavaScript中的對象javaSystem就對應Java語言中的Java.lang.System對象,從
而直接在JavaScript中訪問Java.lang.System中的各種方法和屬性。例如可以在
JavaScript中使用
javaSystem.err.println("從JavaScript中調用Java!!");
來利用Java的方法輸出一個字串。

除了可以直接使用Java提供的類以外,還可以在JavaScript中動態地建立一個Java
類的執行個體,就好象這個類是JavaScript本身定義的一樣。例如可以在JavaScript中
建立一個Java中的Date類:
var myNewDate=new Java.util.Date();
這樣建立的myNewDate對象就可以訪問所有Java類Date的資料。

通過使用JavaScript的這些直接存取Java類庫的功能,就可以大大地擴充
JavaScript的使用範圍,使它不再局限在狹小的範圍之內,而可以擁有Java語言能
夠實現的大多數功能,例如網路訪問和複雜的視窗響應等。

例:一個小應用程式
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Font;

public class ControlJava extends Applet {
Font f=new Font("TimesRoman",Font.BOLD,60);
String Text;

public void init() {
Text=new String("這是一個Java的小應用程式,可以在JavaScript中控制。");
}

public void SetText(String newText) {
Text=newText;
repaint();
}

public void paint(Graphics g) {
g.setFont(f);
g.drawString(Text,15,50);
}
}

這個小應用程式提供一個叫做SetText()的公用方法,這個方法可以設定這個小應
用程式所顯示的文字,下面在JavaScript中使用這個方法來控制Java小應用程式的
輸入。

例:
<html>
<body>
<form name="JavaScriptForm">
<input type="Text" name="text1">
<input type="Button" value="出現在Java小應用程式中"
onClick="document.Java1.SetNewText(document.JavaScriptForm.text1.value);
">
</form>

<applet name="Java1" code="ControlJava.class" width=450 height=125>
</applet>
</body>
</html>

只要在網頁中輸入一個字串,JavaScript就負責接受這個字串。由於Java小應
用程式提供一個公用的介面方法SetNewText(),這個新輸入的字串也就可以被
Java小應用程式所訪問到。

Java語言還允許從applet中直接調用JavaScript的方法和訪問JavaScript對象的屬
性。

由於Java語言本身的安全機制,必須顯式地指定讓applet訪問相對較不安全的
JavaScript代碼,這可以通過在<applet>標記中加上MAYSCRIPT屬性來實現。例
如:
<applet code="some.class" width=java Applet" mayscript>

在Java語言中處理和JavaScript通訊的類庫是netscape.javaScript.*。這個包定
義了JSObject類和JSException對象。在JavaScript中使用的對象都可以表示成
netscape.javaScript.JSObject的執行個體。

在Java中準備這個包後,訪問一個JavaScript對象的屬性可以分兩步進行:
建立一個netscape.javaScript.JSObject執行個體,用來對應JavaScript中的對象;
使用JSObject類的getMember()方法可以訪問相應JavaScript中的屬性。

提示:如果通過這樣的getMember()方法得到的JavaScript屬性是一個對象,這樣
的操作還可以進行下去。

JavaScript中的各種瀏覽器和介面對象都是分層的。處於對象從屬表最頂層的是瀏
覽器對象window,再下面是document對象,這個對象可以包容表單以及表單中的界
面對象。每一個下層對象是上層對象的一個屬性。所以,按照剛才的方法,可以采
用如下的代碼得到JavaScript語言中的一個介面對象:
JSObject windowHandle=JSObject.getWindow(this);
JSObject documentHandle=(JSObject) windowHandle.getMember("document");
JSObject formHandle=(JSObject) documentHandle.getMember("myform");
JSObject buttonHandle=(JSObject) formHandle.getMember("mybutton");
在得到這個JavaScript對象後,就可以獲得或設定對象的屬性。

為了調用JavaScript對象的有關方法,可以採用下面的兩種方法之一:
使用JSObject類中的call("methodName",arguments)方法:這個Java方法接受一個
JavaScript對象的方法名稱以及必要的參數,自動調用對應JavaScript的對象中的
方法。
使用JSObject類中的eval("expression")方法:這個Java方法接受一個字串,這
個字串由JavaScript的命令組成,這個方法自動執行這個字串中的命令,就好
象這個命令是在JavaScript中的一樣。

例:Java程式在代碼中訪問JavaScript中的window對象的alert()方法
import netscape.javascript.JSObject;
import netscape.javascript.JSException;

public class jsAlert extends java.applet.Applet implements Runnable {
JSObject windowObject;

public void init() {
windowObject=JSObject.getWindow(this);
}

public void main() {
windowObject.eval("alert(/"Hello, World!/");");
}

public void stop()
{}

public void paint()
{}

public void run()
{}
}

12.4 JavaScript的局限性以及未來的展望

這裡說的局限性首先是指JavaScript在安全處理上的局限性,其次是指JavaScript
在功能上的局限性。

已經報告的JavaScript安全性缺陷主要有:
JavaScript指令碼程式可以讀取使用者電腦上URL的曆史資訊,並在使用者不知道的情
況下把這些資訊發送到遠方的伺服器上。
JavaScript指令碼程式可以得到使用者電腦硬碟上的檔案清單。
JavaScript指令碼程式可以在使用者不知道的情況下使用使用者的E-mail帳號發送
E-mail。

由於JavaScript只能在瀏覽器的小空間中運行,所以除了特別重要的場所以外,一
般使用的使用者不必太擔心瀏覽網頁中的JavaScript程式會給使用者電腦帶來怎樣的
損失,至少JavaScript程式不能越過瀏覽器的限制而強行把使用者的硬碟格式化掉。
上面提到的一些小的安全性隱患也會在將來的JavaScript發布版本中逐步予以清
除。

JavaScript的第二個局限性體現在功能上:
由於JavaScript只是一種指令碼設計語言,在圖形和多媒體處理方面的功能非常弱。
若想實現比較完整的媒體操縱功能,目前比較好的解決方案可能是利用Java小應用
程式來補充。
JavaScript是解釋執行的,所以執行的速度非常慢,這是所有指令碼語言的通病。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.