1 Applet的定義
Applet是Java語言編寫的,無法獨立運行,但可以嵌入到網頁中執行。它擴展了傳統的編程結構和方法,可以通過互聯網發布到任何具有Java編譯環境瀏覽器的個體計算機上。
如下所示是獨立的Java應用程序和applet程序之間重要的不同:
- Java中applet類繼承了 java.applet.Applet類
- Applet類沒有定義main(),所以一個 Applet程序不會調用main()方法,
- Applets被設計為嵌入在一個HTML頁面。
- 當用戶瀏覽包含Applet的HTML頁面,Applet的代碼就被下載到用戶的機器上。
- 要查看一個applet需要JVM。 JVM可以是Web瀏覽器的一個插件,或一個獨立的運行時環境。
- 用戶機器上的JVM創建一個applet類的實例,並調用Applet生命周期過程中的各種方法。
- Applets有Web瀏覽器強制執行的嚴格的安全規則,applet的安全機制被稱為沙箱安全。
- applet需要的其他類可以用Java歸檔(JAR)文件的形式下載下來。
2 Applet的用途
用戶可以靜態顯示Applet,像顯示一幅圖片或者一段文本一樣;Applet也可以是一個動態交互過程,用戶輸入簡單的數據,就會產生相應的響應。
3 Applet的編寫格式
編寫Applet時,首先要引入java.applet包中的類,這個類里包含三個接口和Applet的類:
import java.applet.*;
import java.applet.Applet;
類頭定義為:
public class MyApplet extends Applet;
用來聲明自定義類是從Applet類擴展而來的。
4 Applet的生命周期
public void init(); 初始化—在這個方法中設置一些變量的初始化,像界面布局設置等。目的是為你的applet提供所需的任何初始化。在Applet標記內的param標簽被處理后調用該方法。
public void start() 啟動—Applet開始執行。瀏覽器調用init方法后,該方法被自動調用。每當用戶從其他頁面返回到包含Applet的頁面時,則調用該方法。
public void stop() 停止—Applet停止執行。當用戶從包含applet的頁面移除的時候,該方法自動被調用。因此,可以在相同的applet中反復調用該方法。
public void destroy() 撤消—銷毀Applet。此方法僅當瀏覽器正常關閉時調用。因為applets只有在HTML網頁上有效,所以你不應該在用戶離開包含Applet的頁面后遺漏任何資源.
paint: 該方法在start()方法之后立即被調用,或者在applet需要重繪在瀏覽器的時候調用。paint()方法實際上繼承於java.awt。
例:該類顯示系統當前時間
1 import java.applet.Applet; 2 import java.awt.Frame; 3 import java.awt.Graphics; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 8 9 public class UseApplet extends Applet { 10 /** 11 * @Applet應用程序 12 */ 13 private static final long serialVersionUID = 1548429421196793116L; 14 String strTime; 15 public void init() 16 { 17 Frame f=new Frame("歡迎"); 18 f.setSize(800,300); 19 } 20 public void start() 21 { 22 Date d = new Date(); 23 SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 24 strTime=time.format(d); 25 repaint(); 26 } 27 public void paint(Graphics g) 28 { 29 g.drawString("當前時間為:" + strTime,10,30); 30 } 31 32 }
5 Applet的顯示
Applet是嵌入在HTML網頁中顯示的。首先從服務器請求HTML網頁,檢測到Applet的類請求時,將所需類下載到本地,然后運行。
HTML頁面中引用Applet的標簽為<applet></applet>,瀏覽器中執行Applet的步驟如下:
(1) 瀏覽器請求HTML頁面。
(2) 讀HTML頁面的過程中發現<applet>標簽,然后繼續向服務器請求標簽中聲明的類文件。
(3) 瀏覽器獲取該類文件。
(4) 字節碼驗證這個類是否合法。
(5) 如果合法就開始執行類文件。
為上面的UseApplet.class類寫一個最簡單的網頁UseApplet.html:
1 <html> 2 <body> 3 <applet code = "UseApplet.class" height = 200 width = 300> 4 </applet> 5 </body> 6 </html>
6 參數設置
在HTML頁面中嵌入Applet類文件時,可以在<applet>標簽中設置屬性以控制Applet類文件的外觀顯示,也可以傳遞一些用戶自定義屬性。嵌入的格式為:
<applet attributes1>
<param attributes2>
...
</applet>
其中:
(1) <applet></applet>標簽內為Applet的信息。
(2) <param>標記在<applet></applet>之間進行設置,然后由Applet自帶的方法獲取。
(3) <param>標記有兩個自己的屬性:name和value。例如:
<param name ="aaa"value = "bbb">
(4) attribute1和attribute2的屬性設置如表所示。

其中,code屬性是必須的,height和width屬性用來設置高度和寬度,如果都為0,那么Applet將隱藏。
對於例4.1中UseApplet.html,如果有
<applet code = "UseApplet.class" height = 200 width = 300>
</applet>
那么說明網頁加載的類名為UseApplet.class,類顯示的高度為200像素點,寬度為300像素點。
表中列出的attibute1屬性為<applet>定義的屬性。用戶還可以根據Applet程序的需要,傳遞一些程序自身屬性,這些屬性通過attribute2中name屬性給出所需參數的名,value屬性給出所需參數的值。
public String getParameter(String name)
例:在加載類的網頁上設置一個用戶名,使得Applet輸出為“HaHa,你好,當前時間為:(具體時間)”
1 import java.awt.*; 2 import java.applet.Applet; 3 import java.util.Date; 4 public class UsePara extends Applet 5 { 6 String strTime = new String(); 7 String strUser = new String(); 8 public void init() 9 { 10 //得到網頁的參數:用戶名 11 strUser = getParameter("USER"); 12 } 13 public void start() 14 { 15 Date d = new Date(); 16 SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 17 strTime=time.format(d); 18 repaint(); 19 } 20 public void paint(Graphics g) 21 { 22 g.setColor(Color.red); 23 g.drawString(strUser + " 你好,當前時間為:" + strTime,20,30); 24 } 25 }
在UseApplet.html中添加一個用戶參數設置:<param name = "USER" value = HaHa>
1 <html> 2 <body> 3 <applet code = "UsePara.class" height = 200 width = 400> 4 <param name = "USER" value = HaHa> 5 </applet> 6 </body> 7 </html>
7 載入圖片
在java.applet包中存在一個接口AppletStub。當一個Applet創建之后,一個Applet Stub使用setStub方法附加到Applet上,這個Stub用來充當Applet和瀏覽器環境之間的接口。在這個接口中一個重要的方法:
public URL getDocumentBase()
該方法返回的是Applet類文件所在網頁的網絡路徑。
例如,如果一個Applet類文件嵌入在下面網頁中
http://java.sun.com/products/jdk/1.2/index.html
那么返回的路徑為
http://java.sun.com/products/jdk/1.2/
通過這個網絡路徑可以得到圖片,從而由Applet類載入,載入圖片的方法為:
public Image getImage(URL url, String name)
其中:
(1) url給出圖片所在的網路路徑。
(2) name給出圖片的名字。
例如:url路徑可以為http://java.sun.com/products/jdk/1.2/,而name可以為路徑下的圖片index_01.gif。
例:編寫Applet,載入Applet類文件所在路徑下的圖片index_01.gif,然后如圖所示顯示圖片。
1 import java.awt.*; 2 import java.applet.Applet; 3 import java.net.*; 4 public class UseImage extends Applet 5 { 6 //定義圖像對象 7 Image testImage; 8 public void init() 9 { 10 //得到圖片 11 testImage = getImage(getDocumentBase(),"index_01.gif"); 12 } 13 public void paint(Graphics g) 14 { 15 g.drawImage(testImage,0,0,this); 16 } 17 }
載入UseImage.class類的UseImage.html文件如下:
1 <html> 2 <body> 3 <applet code = "UseImage.class" height = 200 width = 300> 4 </applet> 5 </body> 6 </html>
8 載入聲音
Applet類提供一個用於載入聲音的方法,即
public AudioClip getAudioClip(URL url, String name)
該方法返回由url和name決定的AudioClip對象。
其中:
(1) url:音頻剪輯的絕對URL地址;
(2) name:相對於上面的url,為音頻剪輯的相對地址,通常指名字。
例:編寫載入聲音的Applet。
1 import java.awt.*; 2 import java.applet.Applet; 3 public class UseAudio extends Applet 4 { 5 public void init() 6 { 7 } 8 public void start() 9 { 10 //播放Applet所在目錄下的tiger.au聲音文件 11 getAudioClip(getDocumentBase(),"tiger.au").play(); 12 } 13 };
載入類的HTML文件如下:
1 <html> 2 <body> 3 <applet code = "UseAudio.class" height = 200 width = 300> 4 </applet 5 </body> 6 </html>
在瀏覽器加載或者appletviewer命令啟動時可以聽見老虎的叫聲,但必須保證tiger.au在UseAudio.class類文件所在的目錄。
9 Applet控制瀏覽器環境
java.applet包中提供一個接口AppletContext,對應着Applet的環境,主要指包含Applet的網頁文檔等,在這個接口內有兩個重要方法:
pubilc void showDocument(URL url)
瀏覽器下載Applet時,showDocument可以將當前Applet頁面用於顯示url網址的內容。 url 給出頁面的絕對網絡路徑。
public void showDocument(URL url, String target)
target可以表明url顯示的位置,有四種情況,如表所示。

public void showStatus(String status)
字符串status顯示在狀態欄中,告知用戶當前類文件運行中的狀態。
例:編寫Applet,在狀態欄顯示鼠標單擊Applet的次數
1 import java.applet.*; 2 import java.applet.Applet; 3 import java.awt.event.*; 4 public class ShowStatus extends Applet 5 { 6 int count = 0; 7 public void init() 8 { 9 } 10 public boolean mouseClicked(MouseEvent e) 11 { 12 count ++; 13 getAppletContext().showStatus("你好,你已經點擊了" + count + "次了!"); 14 return true; 15 } 16 }
例:編寫Applet,在一個框架中顯示不同來源的網頁信息,如圖所示。左框架為西安交通大學首頁,右框架為新浪網首頁。
1 import java.applet.*; 2 import java.applet.Applet; 3 import java.net.URL; 4 5 public class ShowHtml extends Applet 6 { 7 public void init() 8 { 9 } 10 public void start() 11 { 12 try 13 { 14 //創建URL對象 15 URL urlName=new URL("http://www.xjtu.edu.cn"); 16 //在左框架顯示網頁 17 getAppletContext().showDocument(urlName,"left"); 18 urlName = new URL("http://www.sina.com.cn"); 19 //右框架顯示網頁 20 getAppletContext().showDocument(urlName,"right"); 21 } 22 catch(MalformedURLException e) 23 { 24 System.out.println(e.getMessage()); 25 } 26 } 27 }
載入Applet的網頁Head.html的代碼如下:
1 <html> 2 <body> 3 <applet code = "ShowHtml.class" height = 0 width = 0> 4 </applet>
<h3>這是一個框架網頁,上面的框架隱藏載入applet類文件,由applet控制左框架顯示西安交通大學的主頁,右框架顯示新浪網的主頁。
</body>
</html>
裝配的框架網頁ShowHtml.html的源代碼如下,可以看見其中框架名字左邊的為left而右邊的為right。
<html>
<frameset rows="21%,*">
<frame name="guid" src="Head.html">
<frameset cols="50%,*" frameborder="YES" border="1" framespacing="1">
<frame name="left" src="">
<frame name="right" src="">
</frameset>
</frameset>
</html>
10 服務器下配置Applet文件
由於Applet文件是客戶端瀏覽器從服務器端下載的HTML網頁,所以將文件配置到服務器端,由客戶進行訪問。
本機中使用的服務器為Tomcat 4.0,安裝成功后重啟動,則服務器開始運轉,在瀏覽器的網址欄鍵入http://10.167.27.139:8080/index.html,如果出現如圖所示的Tomcat主網頁,則證明服務器測試正常。
11 JAR文件
在JDK的安裝目錄的bin子目錄下有一個jar.exe文件,這就是JAR文件的操作工具,用它及一系列選項來實現對JAR文件的操作。jar命令的格式如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
其中:
(1) ctxu四者必選其一,各選項的含義如下:
-c 創建新的存檔;
-t 列出存檔內容的列表;
-x 展開存檔中命名的(或所有的)文件;
-u 更新已存在的存檔。
(2) vfm0M為可選項,各選項的含義如下:
-v 生成詳細輸出到標准輸出上;
-f 指定存檔文件名;
-m 包含來自標明文件的標明信息;
-0 只存儲方式,未用ZIP壓縮格式;
-M 不產生所有項的清單(manifest)文件;
-C 改變到指定的目錄,並且包含下列文件。
(3) 清單(manifest)文件名和存檔文件名都需要指定,指定的順序依照命令行中“m”和“f”標志的順序。
例如:
① 將兩個class文件存檔到一個名為“classes.jar”的存檔文件中:
jar cvf classes.jar Foo.class Bar.class
② 用一個存在的清單(manifest)文件“mymanifest”將foo/目錄下的所有文件存檔到一個名為“classes.jar”的存檔文件中:
jar cvfm classes.jar mymanifest -C foo/ .
對JAR文件常用的操作有三種:創建JAR文件、列出JAR文件和抽取JAR文件。
1). 創建JAR文件
jar cvf UseImage.jar UseImage.class index_01.gif
當用JAR工具創建新的檔案時,自動增加一個聲明文件到文檔中。如果用戶需要創建自己的聲明文件時,則指定m選項。可以看到本目錄下多了一個UseImage.jar文件。
2). 列出JAR文件的內容
jar tvf UseImage.jar
執行命令后列出JAR文件中的內容。
3). 抽取JAR文件
jar xvf UseImage.jar
抽取JAR文件是將JAR中包含的類以及相關文件逐一恢復。在某個目錄下建立JAR文件夾,將JAR文件放入此文件夾,然后進行抽取,可以看見JAR目錄下除了UseImage.class和index_01.gif,還有META-INF子目錄,下面有一個文件MANIFEST.MF。
4). 客戶端使用jar文件
<applet>標簽中添加一個屬性名字為archive,它的值為要載入的.jar文件。例如archive="UseImage.jar"。
例如,將某個目錄下的UseImage.html文件代碼改為:
<html>
<body>
<applet code = "UseImage.class" archive="UseImage.jar" height = 200 width = 300>
</applet>
</body>
</html>
12 Applet和應用程序
例:
1 import java.awt.*; 2 import java.awt.event.*; 3 import java.applet.Applet; 4 import java.util.Date; 5 public class AppPara extends Applet 6 { 7 String strTime = new String(); 8 static String strUser = new String(); 9 static boolean inApplet = true; 10 public void init() 11 { 12 //如果從Applet載入,從網頁得到參數 13 if(inApplet) 14 strUser = getParameter("USER"); 15 } 16 public void start() 17 { 18 Date d = new Date(); 19 strTime = d.toString(); 20 repaint(); 21 } 22 public void paint(Graphics g) 23 { 24 g.setColor(Color.red); 25 g.drawString(strUser + " 你好,當前時間為:" + strTime,20,30); 26 } 27 public static void main(String[] args) 28 { 29 inApplet = false; 30 //如果從命令行提示符狀態進入,獲取參數 31 if (args.length < 1) 32 { 33 System.out.println("缺少用戶參數"); 34 System.exit(0); 35 } 36 else 37 strUser = new String(args[0]); 38 //創建一個框架 39 Frame f = new Frame("時間"); 40 //關閉窗口時退出系統 41 f.addWindowListener(new WindowAdapter() 42 { 43 public void windowClosing(WindowEvent evt) 44 { 45 System.exit(0); 46 } 47 }); 48 //創建一個AppletApp對象 49 AppPara a = new AppPara(); 50 //初始化 51 a.init(); 52 //將對象載入框架 53 f.add("Center",a); 54 //設置框架大小 55 f.setSize(400,200); 56 //顯示框架 57 f.show(); 58 //啟動對象 59 a.start(); 60 } 61 }
在命令提示符狀態鍵入命令“java AppPara 王飛”后按回車鍵,可彈出界面。
