介紹
Applet(小應(yīng)用程序)采用Java創(chuàng)建的基于HTML的程序。瀏覽器將其暫時下載到用戶的硬盤上,并在Web頁打開時在本地運行。
Applet的工作原理.
含有Applet的網(wǎng)頁的HTML文件代碼中部帶有<applet> 和</applet>這樣一對標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對標(biāo)記時,就將下載相應(yīng)的小應(yīng)用程序代碼并在本地計算機上執(zhí)行該Applet。 Java Applet 是用Java 語言編寫的一些小應(yīng)用程序,這些程序是直接嵌入到頁面中,由支持Java的瀏覽器(IE 或 Nescape)解釋執(zhí)行能夠產(chǎn)生特殊效果的程序。它可以大大提高Web頁面的交互能力和動態(tài)執(zhí)行能力。包含Applet的網(wǎng)頁被稱為Java-powered頁,可以稱其為Java支持的網(wǎng)頁。
當(dāng)用戶訪問這樣的網(wǎng)頁時,Applet被下載到用戶的計算機上執(zhí)行,但前提是用戶使用的是支持Java的網(wǎng)絡(luò)瀏覽器。由于Applet是在用戶的計算機上執(zhí)行的,所以它的執(zhí)行速度不受網(wǎng)絡(luò)帶寬或者Modem存取速度的限制,用戶可以更好地欣賞網(wǎng)頁上Applet產(chǎn)生的多媒體效果。
在Java Applet中,可以實現(xiàn)圖形繪制,字體和顏色控制,動畫和聲音的插入,人機交互及網(wǎng)絡(luò)交流等功能。 Applet還提供了名為抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口環(huán)境開發(fā)工具。 AWT利用用戶計算機的GUI元素,可以建立標(biāo)準(zhǔn)的圖形用戶界面,如窗口、按鈕、滾動條等等。目前,在網(wǎng)絡(luò)上有非常多的Applet范例來生動地展現(xiàn)這些功能,讀者可以去調(diào)閱相應(yīng)的網(wǎng)頁以觀看它們的效果。
Applet 小應(yīng)用程序的實現(xiàn)主要依靠java.applet 包中的Applet類。與一般的應(yīng)用程序不同,Applet應(yīng)用程序必須嵌入在HTML頁面中,才能得到解釋執(zhí)行;同時Applet可以從Web頁面中獲得參數(shù),并和Web頁面進行交互。
含有Applet的網(wǎng)頁的HTML文件代碼中必須帶有<applet>和</applet>這樣一對標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對標(biāo)記時,就將下載相應(yīng)的小程序代碼并在本地計算機上執(zhí)行該Applet小程序。
Applet是一種Java的小程序,它通過使用該Applet的HTML文件,由支持Java的網(wǎng)頁瀏覽器下載運行。也可以通過java開發(fā)工具的appletviewer來運行。Applet 程序離不開使用它的HTML文件。這個HTML文件中關(guān)于Applet的信息至少應(yīng)包含以下三點:
1)字節(jié)碼文件名(編譯后的Java文件,以.class為后綴)
2)字節(jié)碼文件的地址
3)在網(wǎng)頁上顯示Applet的方式。
一個HTML文件增加Applet有關(guān)的內(nèi)容只是使網(wǎng)頁更加富有生氣,如添加聲音、動畫等這些吸引人的特征,它并不會改變HTML文件中與Applet無關(guān)的元素。
Applet的安全性限制
為了防止這樣的問題出現(xiàn),在缺省的情況下,大多數(shù)瀏覽器在Applet安全方面受到諸多的限制,幾乎不能對系統(tǒng)進行任何“讀”或“寫”的操作:
1. 不允許Applet訪問本地文件系統(tǒng)
2. Applet不能執(zhí)行任何本地計算機上的程序
3. 不允許Applet嘗試打開除提供Applet的服務(wù)器之外的任何系統(tǒng)的Socket
4. 不允許Applet訪問用戶名、電子郵件地址等與本地系統(tǒng)有關(guān)的信息
5. 對于Applet而言,Java環(huán)境中的某些標(biāo)準(zhǔn)系統(tǒng)屬性是只讀的
6. Applet不能創(chuàng)建或裝載Applet的機器的網(wǎng)絡(luò)連接
7. Applet不能充當(dāng)網(wǎng)絡(luò)服務(wù)器,監(jiān)聽或接收來自遠程系統(tǒng)的連接請求
8. 不允許Applet裝載動態(tài)庫或定義本地方法調(diào)用
9. Applet不能操縱不在自己線程組中的任何線程
10. Applet不能關(guān)閉JVM。
Applet程序開發(fā)步驟
Applet程序開發(fā)主要步驟如下:
1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。
2)把Applet的源程序轉(zhuǎn)換為字節(jié)碼文件。
3)編制使用class 的HTML文件。在HTML文件內(nèi)放入必要的<APPLET>語句。
下面舉一個最簡單的HelloWorld 例子來說明Applet程序的開發(fā)過程:
(1) 編輯Applet 的java源文件
創(chuàng)建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java
文件的源代碼如下:
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet //繼承Appelet類,這是Appelet Java程序的特點
{
public void paint(Graphics g )
{
g.drawString("Hello World!",5,35);
}
}
保存上述程序在C:\ghq\HelloWorld.java文件里。
(2)編譯Applet
編譯HelloWorld.java源文件可使用如下JDK命令:
C:\ghq\>javac HelloWorld.java<Enter>
注意:如果編寫的源程序違反了Java編程語言的語法規(guī)則,Java編譯器將在屏幕上顯示語法錯誤提示信息。源文件中必須不含任何語法錯誤,Java編譯器才能成功地把源程序轉(zhuǎn)換為appletviewer和瀏覽器能夠執(zhí)行的字節(jié)碼程序。
成功地編譯Java applet之后生成響應(yīng)的字節(jié)碼文件HelloWorld.class的文件。用資源管理器或DIR命令列出目錄列表,將會發(fā)現(xiàn)目錄C:\ghq中多了一個名為HelloWorld.class的文件。
(3)創(chuàng)建HTML文件
在運行創(chuàng)建的HelloWorld.class 之前,還需創(chuàng)建一個HTML文件,appletviewer或瀏覽器將通過該文件訪問創(chuàng)建的Applet。為運行HelloWorld.class, 需要創(chuàng)建包含如下HTML語句的名為HelloWorld.html的文件。
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<APPLET
CODE="JavaWorld.class" //這里應(yīng)該是HelloWorld.class
WIDTH=200
HEIGHT=100>
</APPLET>
</HTML>
本例中,<APPLET>語句指明該Applet字節(jié)碼類文件名和以像素為單位的窗口的尺寸。雖然這里HTML文件使用的文件名為HelloWorld.HTML,它對應(yīng)于HelloWorld.java的名字,但這種對應(yīng)關(guān)系不是必須的,可以用其他的任何名字(比如說Ghq.HTML)命名該HTML文件。但是使文件名保持一種對應(yīng)關(guān)系可給文件的管理帶來方便。
(4)執(zhí)行 HelloWorld.html
如果用appletviewer運行HelloWorld.html,需輸入如下的命令行:
C:\ghq\>appletviewer JavaWorld.html<ENTER>
可以看出,該命令啟動了appletviewer并指明了HTML文件,該HTML文件中包含對應(yīng)于HelloWorld 的<APPLET>語句。
如果用瀏覽器運行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。
至此,一個Applet程序的開發(fā)運行整個過程結(jié)束了(包括java源文件、編譯的class文件、html文件以及用appletviewer或用瀏覽器運行)。
Applet類中常用方法
applet的超類是panel,
public final void setStub(AppletStub stub)
//設(shè)置Applet的stub.stub是Java和C之間轉(zhuǎn)換參數(shù)并返回值的代碼位,它是由系統(tǒng)自動設(shè)定的。
public boolean isActive();// 判斷一個Applet是否處于活動狀態(tài)。
public URL getDocumentBase();// 檢索表示該Applet運行的文件目錄的對象。
public URL getCodeBase();// 獲取該Applet 代碼的URL地址。
public String getParameter(String name);// 獲取該Applet 由name指定參數(shù)的值。
public AppletContext getAppletContext();// 返回瀏覽器或小應(yīng)用程序觀察器。
public void resize(int width,int height);// 調(diào)整Applet運行的窗口尺寸。
public void resize(Dimension d);// 調(diào)整Applet運行的窗口尺寸。
public void showStatus(String msg);// 在瀏覽器的狀態(tài)條中顯示指定的信息。
public Image getImage(URL url); // 按url指定的地址裝入圖象。
public Image getImage(URL url,String name);// 按url指定的地址和文件名加載圖像。
public AudioClip getAudioClip(URL url);// 按url指定的地址獲取聲音文件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名獲取聲音。
public String getAppletInfo();// 返回Applet應(yīng)用有關(guān)的作者、版本和版權(quán)方面的信息;
public String[][] getParameterInfo();
// 返回描述Applet參數(shù)的字符串?dāng)?shù)組,該數(shù)組通常包含三個字符串: 參數(shù)名、該參數(shù)所需值的類型和該參數(shù)的說明。
public void play(URL url);// 加載并播放一個url指定的音頻剪輯。
public void destroy();//撤消Applet及其所占用的資源。若該Applet是活動的,則先終止該Applet的運行。
Applet運行狀態(tài)
Applet類中的四種基本方法用來控制其運行狀態(tài):init()、start()、stop()、destroy()
init()方法
這個方法主要是為Applet的正常運行做一些初始化工作。當(dāng)一個Applet被系統(tǒng)調(diào)用時,系統(tǒng)首先調(diào)用的就是該方法。通??梢栽谠摲椒ㄖ型瓿蓮木W(wǎng)頁向Applet傳遞參數(shù),添加用戶界面的基本組件等操作。
start()方法
系統(tǒng)在調(diào)用完init()方法之后,將自動調(diào)用start()方法。而且,每當(dāng)用戶離開包含該Applet的主頁后又再返回時,系統(tǒng)又會再執(zhí)行一遍start()方法。這就意味著start()方法可以被多次執(zhí)行,而不像init()方法。因此,可把只希望執(zhí)行一遍的代碼放在init()方法中??梢栽趕tart()方法中開始一個線程,如繼續(xù)一個動畫、聲音等。
stop()方法
這個方法在用戶離開Applet所在頁面時執(zhí)行,因此,它也是可以被多次執(zhí)行的。它使你可以在用戶并不注意Applet的時候,停止一些耗用系統(tǒng)資源的工作以免影響系統(tǒng)的運行速度,且并不需要人為地去調(diào)用該方法。如果Applet中不包含動畫、聲音等程序,通常也不必實現(xiàn)該方法。
destroy()方法
與對象的finalize()方法不同,Java在瀏覽器關(guān)閉的時候才調(diào)用該方法。Applet是嵌在HTML文件中的,所以destroty()方法不關(guān)心何時Applet被關(guān)閉,它在瀏覽器關(guān)閉的時候自動執(zhí)行。在destroy()方法中一般可以要求收回占用的非內(nèi)存獨立資源。(如果在Applet仍在運行時瀏覽器被關(guān)閉,系統(tǒng)將先執(zhí)行stop()方法,再執(zhí)行destroy()方法。
Applet應(yīng)用的有關(guān)參數(shù)說明
利用Applet來接收從HTML中傳遞過來的參數(shù),下面對這些參數(shù)作一簡單說明:
* CODE標(biāo)志
CODE標(biāo)志指定Applet的類名;WIDTH和HEIGHT標(biāo)志指定Applet窗口的像素尺寸。在APPLET語句里還可使用其他一些標(biāo)志。
* CODEBASE 標(biāo)志
CODEBASE標(biāo)志指定Applet的URL地址。Applet的通用資源定位地址URL,它可以是絕對地址 ,如www.sun.com。也可以是相對于當(dāng)前HTML所在目錄的相對地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 標(biāo)志,瀏覽器將使用和HTML文件相同的URL。
* ALT 標(biāo)志
雖然Java在WWW上很受歡迎,但并非所有瀏覽器都對其提供支持。如果某瀏覽器無法運行Java Applet,那么它在遇到APPLET語句時將顯示ALT標(biāo)志指定的文本信息。
* ALIGN 標(biāo)志
ALIGN標(biāo)志可用來控制把Applet窗口顯示在HTML文檔窗口的什么位置。與HTML<LMG>語句一樣,ALIGN標(biāo)志指定的值可以是TOP、MIDDLE或BOTTOM。
* VSPACE與HSPACE 標(biāo)志
VSPACE和HSPACE標(biāo)志指定瀏覽器顯示在Applet窗口周圍的水平和豎直空白條的尺寸,單位為像素。如下例使用該標(biāo)志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:
* NAME 標(biāo)志
NAME標(biāo)志把指定的名字賦予Applet的當(dāng)前實例。當(dāng)瀏覽器同時運行兩個或多個Applet時,各Applet可通過名字相互引用或交換信息。如果忽略NAME標(biāo)志,Applet的名字將對應(yīng)于其類名。
* PARAM 標(biāo)志
通用性是程序設(shè)計所追求的目標(biāo)之一。使用戶或者程序員能很方便地使用同一個Applet完成不同的任務(wù)是通用性的具體表現(xiàn)。從HTML文件獲取信息是提高Applet通用性的一條有效途徑。
假設(shè)編制了一個把某公司的名字在屏幕上卷動的Applet。為了使該Applet更加通用,則可以使該Applet從HTML文件獲取需要卷動的文本信息。這樣,若想顯示另一個公司的名字,用不著修改Java Applet本身,只需修改HTML文件即可。
PARAM 標(biāo)志可用來在HTML文件里指定參數(shù),格式如下所示:
PARAM Name="name" Value="Liter"
Java Applet可調(diào)用getParameter方法獲取HTML文件里設(shè)置的參數(shù)值。
上面這個例子就是一個簡單主頁的HTML文件代碼。代碼第五行中的<P>,是為了確保Applet出現(xiàn)在新的一行,若沒有它, Applet將會緊接著上一行的最后一個單詞出現(xiàn)。代碼第六、七兩行是關(guān)于Applet的一些參數(shù)。其中第六行是必需的Applet參數(shù),定義了編譯后的包含Applet字節(jié)碼的文件名,后綴通常為“.class”;和以象素為單位的Applet的初始寬度與高度。第七行則是附加的Applet參數(shù),它由一個分離的標(biāo)記來指定其后的名稱和值,在這里是img的值為“example.gif’,它代表了一個圖形文件名。
Applet的下載與圖形文件一樣需要一定的時間,若干秒后它才能在屏幕上顯示出來。等待的時間則取決于Applet的大小和用戶的網(wǎng)絡(luò)連接的速度。一旦下載以后,它便和本地計算機上的程序以相同的速度運行了。
Applet在用戶的計算機上執(zhí)行時,還可以下載其它的資源,如聲音文件、圖像文件或更多的Java代碼,有些Applet還允許用戶進行交互式操作。但這需要重復(fù)的鏈接與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是采用類似高速緩存的技術(shù),將每次下載的文件都臨時保存在用戶的硬盤上,雖然第一次使用時花的時間比較多,但當(dāng)再次使用時,只需直接從硬盤上讀取文件而無需再與Internet連接,便可以大大提高性能了。
從哪里得到Applet
自從Java日益流行之后,世界各地的愛好者們便不斷創(chuàng)造出各種各樣的Applet。這里列出了幾個較大的Applet收集站,讀者可以去逛一逛,看看這些Applet的效果如何,相信會使人流連忘返的。
http://www.
這是Intemet上最負盛名的Applet收集站,它按照小應(yīng)用程序的用途加以分類,并列出了它們的說明、功能和程序代碼,其規(guī)模和種類之多,令人嘆為觀止。
http://www./
這個站點的特色是對它收集的小應(yīng)用程序都加以評分,JARS是小應(yīng)用程序評價服務(wù)(Java Applet Rating Services)的簡稱。許多Java開發(fā)者均以能獲得其好評為榮。
http://www.yahoo.com/Computers_and_Internet/Languages/Applet/
這個URL可真夠長的!這是Yahoo公司提供的小應(yīng)用程序目錄,收集的數(shù)量雖然稍遜于Gamelan,但也很可觀了。
http://home./comprod/products/navigator/version_2.0 /java_applets/
<BR>這是網(wǎng)景公司提供的小應(yīng)用程序演示網(wǎng)頁,同時也提供一些Java信息。
http://java.wiwi.uni_frankfurt.de/
這是一個小應(yīng)用程序的信息站點,提供了許多實用信息,讀者可以借助這里的數(shù)據(jù)庫,查詢自己感興趣的小應(yīng)用程序的相關(guān)信 .