關於Applets
Applet的基本工作原理
Applet:
Applet是一種很重要的java程序,是工作在瀏覽器上的java程序。編寫Applet小程序必須要用到java.applet包中的Applet類,該類是java.awt.Panel類的子類。Applet默認的基本工作原理:編譯好的字節碼文件保存在特定的www服務器上,同一個或另一個服務器上保存著嵌入了該字節碼文件名的html文件。
當某一個瀏覽器向服務器請求下載嵌入了Applet的html文件時,該文件從服務器上下載到客戶端,由瀏覽器解釋html,當遇到<applet>,表明它嵌有一個Applet,瀏覽器會根據這個Applet的名字和位置自動把字節碼從服務器上下載到本地,並利用瀏覽器本身擁有的java解釋器執行字節碼。
Applet類:
Applet程序在結構上必須創建一個用戶類,該類的父類是系統的Applet類。通過這個子類,完成Applet與瀏覽器的配合。
import java.applet.Applet;
public class MyApplet extends Applet;
1、Applet類
該類存在於java.applet包中,具有的作用:
1)包容和排列其他的界面元素,如按鈕、文本框等。
2)響應它所包容範圍內的事件,或把事件向更高層傳遞。
另外它還有一些與瀏覽器和Applet生命周期有關的方法。
Applet類的主要方法
在實際運行Applet中,瀏覽器在下載字節碼的同時,會動創建一個用戶Applet子類的實例,並在適當事件發時自動調用該實例的幾個主要方法:
init():用來完成主類的初始化工作。字節碼下載後,瀏覽器將創建一個Applet類的實例並調用它從Applet類那裏繼承來的init方法。用戶程序可以重載父類的init方法,定義一些初始化操作。
start():用來啟動瀏覽器運行Applet的主線程。瀏覽器在調用init()初始化Applet類的實例後,將接著自動調用start()方法,加入當前實例被激活時要實現的功能。
除了在init初始化後被調用外,start方法在Applet被重新啟動時也會被自動調用:一是用戶使用了Reload操作;二是瀏覽器重新加載,那麽其中的Applet實例就會被重新啟動並調用start方法,但是init方法只能被調用一次。
paint():在Applet的界面中顯示文字、圖形和其他界面元素。在下列情況下使用paint():
1)Applet被啟動之後,自動調用paint()來重繪
2)Applet所在的瀏覽器窗口改變時使用paint重畫界面。
paint方法有一個Graphics類的對象g作為參數。它用來完成一些較低級的圖形用戶界面操作,當一個Applet類實例被初始化並啟動時,瀏覽器將自動生成一個Graphics類的實例g,並把g作為參數傳遞給Applet的paint方法,就可以繪制Applet的界面。
stop():當用戶瀏覽其他網頁,或切換到其他應用時,瀏覽器會暫停執行的Applet線程,暫停前首先自動調用stop方法。
destroy():當用戶退出瀏覽器時,瀏覽器會自動調用Applet實例的destroy方法來完成一些釋放資源、關閉連接等操作。
HTML 文件參數
Applet 時需要嵌入在HTML 文件並依賴瀏覽器運行的程序。在HTML 文檔中嵌入Applet 需要使用一組約定好的特殊標記:<applet<</applet>, 至少需要三個參數code,height,width。
總結,Applet由瀏覽器自動調用的主要方法init(),statr(),stop(),destroy()分別對應了Applet從初始化,啟動,暫停到消亡的生命周期的各個階段。
Applet安全基礎
Applet被設計為從遠程站點下載然後在本地執行,所以安全問題非常重要。如果用戶在遊覽器中啟用了Java,那麽瀏覽器就會自動下載網頁中的Applet代碼並執行。用戶沒有機會來確認或者停止Applet的運行。基於這樣的原因,與Application應用程序相比,Applet被作了限制。
Applet的限制執行環境常常稱作“沙箱(sandbox )”。運行在沙箱中的Applet不能更改或探查用戶的系統。
當運行在沙箱中時:
(1)Applet不能讀寫本地計算機的文件系統,也不能運行任何本地可執行程序。
(2)Applet不能同除它們的下載處的服務器(該服務器稱作原始主機)以外的其他任何主機通信。這條規則使得Applet不能探查企業內部網上的資源。
(3)Applet只能獲取本地計算機中的以下信息:當前使用的Java版本;操作系統的名字和版本;用來分離文件、路徑以及行的字符。除此以外,Applet不能獲取任何其它關於本地計算機的信息。
(4)Applet彈出的所有窗口都會帶有一警告消息,告訴用戶這是一個Applet。
因為Java解釋器會檢查所有的危險指令和程序區域,所以一個帶有敵意的Applet不能覆蓋系統內存、改變操作系統賦予的特權或者使計算機崩潰。
在某些情況下,這些限制顯得過於嚴格。為了充許在不同情況下使用不同的安全級別,Java引入了簽名Applet。
一個簽名Applet帶有一個能夠表明簽名者特征的證書。加密技術保證了這樣的證書不可能被偽造。如果信任簽名者,那麽可以選擇給該Applet額外的特權。被完全信任的Applet可以獲得同本地應用程序一樣的訪問特權。
關於Applets