標籤:java applet application html 應用程式
首先我要說的是Applet是一種應用程式,它是一種由JAVA編寫的小應用程式,通常這種應用程式都像他的名字一樣,是一個很小的程式,也許有些朋友就會問了,那麼它是用來幹什麼的呢?JAVA程式就是JAVA程式啊,為什麼要弄出個小應用程式?
一、Applet初識
Applet編程是JAVA程式設計語言至關重要的獨特功能,它不同與一般的JAVA程式的地方是,它能夠嵌入在HTML網頁中,並由支援JAVA的WEB瀏覽器來動態下載解釋執行,當然我們所使用的IE瀏覽器3.0以上的版本是支援JAVA小應用程式的,有了這種小應用程式,我們的網頁就能有一定的互動功能。
在Java Applet中,可以實現圖形繪製,字型和顏色控制,動畫和聲音的插入,人機互動及網路交流等功能。 Applet還提供了名為抽象視窗工具箱(Abstract Window Toolkit, AWT)的視窗環境開發工具。 AWT利用使用者電腦的GUI元素,可以建立標準的圖形化使用者介面,如視窗、按鈕、捲軸等等。目前,在網路上有非常多的Applet範例來生動地展現這些功能,讀者可以去調閱相應的網頁以觀看它們的效果。
Applet的工作原理
含有Applet的網頁的HTML檔案代碼中部帶有<applet> 和</applet>這樣一對標記,當支援Java的網路瀏覽器遇到這對標記時,就將下載相應的小應用程式代碼並在本機電腦上執行該Applet。
Applet的下載與圖形檔案一樣需要一定的時間,若干秒後它才能在螢幕上顯示出來。等待的時間則取決於Applet的大小和使用者的網路連接的速度。一旦下載以後,它便和本機電腦上的程式以相同的速度運行了。
Applet在使用者的電腦上執行時,還可以下載其它的資源,如音效檔、影像檔或更多的Java代碼,有些Applet還允許使用者進行互動式操作。但這需要重複的連結與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是採用類似快取的技術,將每次下載的檔案都臨時儲存在使用者的硬碟上,雖然第一次使用時花的時間比較多,但當再次使用時,只需直接從硬碟上讀取檔案而無需再與Internet串連,便可以大大提高效能了。
二、Applet和application
在JAVA語言中,能夠獨立啟動並執行程式稱為Java應用程式(Application)。Java語言還有另外一種程式——Application 程式。
JavaApplet和JavaApplication在結構方面的主要區別表現在:
(1)運行方式不同。Java Applet程式不能單獨運行,它必須依附於一個用HTML語言編寫的網頁並嵌入其中,通過與Java相容的瀏覽器來控制執行。Java Application是完整的程式,可以獨立運行,只要有支援Java的虛擬機器,它就可以獨立運行而不需要其他檔案的支援。
(2)運行工具不同。運行Java Applet程式的解譯器不是獨立的軟體,而是嵌在瀏覽器中作為瀏覽器軟體的一部分。Java Application程式被編譯以後,用普通的Java解譯器就可以使其邊解釋邊執行,而Java Applet必須通過網路瀏覽器或者Applet觀察器才能執行。
(3)程式結構不同。每個Java Application程式必定含有一個並且只有一個main方法,程式執行時,首先尋找main方法,並以此為進入點開始運行。含有main方法的那個類,常被稱為主類,也就是說,Java Application程式都含有一個主類。而Applet程式則沒有含main方法的主類,這也正是Applet程式不能獨立啟動並執行原因。儘管Applet沒有含main方法的主類,但Applet一定有一個從 java.applet.Applet派生的類,它是由Java系統提供的。
(4)Java Applet程式可以直接利用瀏覽器或AppletViewer提供的圖形化使用者介面,而Java Application程式則必須另外書寫專用代碼來營建自己的圖形介面。
(5)受到的限制不同Java Application程式可以設計成能進行各種操作的程式,包括讀/寫檔案的操作,但是 Java Applet 對網站的磁碟檔案既不能進行讀操作,也不能進行寫 操作。然而,由於 Applet的引入,使Web頁面具有動態多媒體效果和可互動效能,這使由名為超文本、實為純文字的HTML語言編寫成的Web頁面真正具有了超文本功能,不但可以顯示文本資訊,而且還可以有各種圖片效果和動態圖形效果,從而使頁面顯得生動美麗;另外,Applet使Web頁面增加了按鈕等功能,從而增加了互動性。
JavaApplet和JavaApplication在執行方面的主要區別表現在:Java Application一般是在本地機上運行,而Java Applet一般放在伺服器上,它是根據本地機的請求被下載到本地機,然後才在本地機上運行。
三、基本架構
Applet的基本架構是由一套方法組成的,它們提供了瀏覽器與Applet之間的介面以及二者執行控制的基本機制;方主要法如下:
1、init():
建立Applet時執行,該方法只被執行一次;
當Applet程式第一次被支援Java的瀏覽器載入時,便執行該方法;在Applet程式的生命週期中,該方法只被執行一次,因此可以在其中進行一些只執行一次的初始化操作,如:處理由瀏覽器傳遞進來的參數、添加使用者介面組件、載入映像和音效檔等;Applet程式有預設的構造方法,但它習慣於在init()方法中執行所有的初始化,而不是在預設的構造方法內;
2、start():
該方法多次執行,當瀏覽器從表徵圖恢複成視窗,或者是返回該首頁時執行;
系統在調用完init()方法之後,將自動調用此方法;而且每當瀏覽器從表徵圖恢複為視窗時,或者使用者離開包含該Applet程式的首頁後又再返回時,系統都會再執行一遍start()方法;因此,該方法在Applet程式的生命週期中被調用多次,以啟動Applet程式的執行,這一點與init()方法不同;該方法是Applet程式的主體,在其中可以執行一些需要重複執行的任務或者重新啟用一個線程,例如:開始動畫或播放聲音等;
3、stop():
該方法被多次執行,當瀏覽器變成表徵圖時,或者是離開首頁時執行,主要功能是停止一些耗用系統資源的工作;
與start()相反,當使用者離開Applet程式所在頁面或瀏覽器變成表徵圖時,會自動調用此方法;因此,該方法在Applet的生命週期中也被多次調用;這樣使得可以在使用者並不注意Applet程式的時候,停止一些耗用系統資源的工作(如中斷一個線程),以免影響系統的運行速度,且並不需要去人為地去調用該方法;如果你的Applet程式中不包含動畫、聲音等程式,通常也不必重載該方法;
4、destroy():
該方法用來釋放資源,在stop()之後執行;
瀏覽器正常關閉時,Java自動調用這個方法;該方法方法用於回收任何一個與系統無關的記憶體資源;當然,如果這個Applet程式仍然處於活動狀態,那麼Java會在調用該方法之前,先自動調用stop()方法;
5、其它方法:
paint(Graphicsg):該方法用於具體的介面繪製;
update():該方法用於具體的介面重新整理;
repaint():該方法用於具體的介面重繪;
四、範例程式
1、Applet代碼:
<span style="font-size:18px;">importjava.io.*;importjava.awt.*;importjava.lang.*;importjava.applet.*;publicclass MyApplet extends Applet{ private String strUserName; private String strPassword; private int iCount; private int iPosX; public void init() { strUserName =this.getParameter("username"); strPassword =this.getParameter("password"); iCount = Integer.parseInt(this.getParameter("count")); iPosX = 25; } public void paint(Graphics g) { g.drawRect(10, 10, iWidth, iHeigh); g.drawString("UserName: " +strUserName + " Count:" + iCount, iPosX, 60); g.drawString("Password: " +strPassword, iPosX, 80); }}</span>
2、HTML代碼:
<span style="font-size:18px;"><html> <head> <metahttp-equiv="Content-Type" content="text/html;charset=GB2312"> <metahttp-equiv="Content-Language" Content="zh-CN"> <title>JSP APPLET TEST</title> </head> <body> <Applet id="MyApplet"name="MyApplet" code="MyApplet.class"codebase="." height="300" width="300"> <param name="username"value="sankhya"> <param name="password"value="bdxnote"> <param name="count"value="30"> </Applet> </body></html></span>
五、Applet相關問題
1. Applet是什麼
Applet又稱為Java小應用程式,是能夠嵌入到一個HTML頁面中,並且可通過Web瀏覽器下載和執行的一種Java類。 Applet不需要main()方法,由Web瀏覽器中內嵌的Java虛擬機器調用執行。
2. Applet的安全限制
因為applet是從遠端伺服器上下載並且在本地執行,所以安全性就顯得格外重要。通過限制applet在沙箱(applet的運行環境)中運行,保證了對本地系統而言applet是安全的。
applet在沙箱中運行時:
⑴ 不能運行任何本地可執行程式;
⑵ 除了存放下載的applet的伺服器外,applet不能和其它主機進行通訊。
⑶不能對本地檔案系統進行讀寫。
3. Applet的生命週期
init():當瀏覽器載入applet,進行初始化的時候調用該方法。
start():在init()方法之後調用。當使用者從其它頁面轉到包含applet的頁面時,該方法也被調用。
stop():在使用者離開包含applet的頁面時被調用。
destroy():當applet不再被使用,或瀏覽器退出的時候,該方法被調用。
4. paint()方法這個paint還是來自於AWT
Applet本質上是圖形方式的,我們應該在圖形環境中繪製我們的顯示內容。
我們可以通過建立一個paint()方法在Applet的panel上繪圖。只要Applet的顯示需要重新整理,paint()方法就會被瀏覽器環境調用。例如,當Applet的顯示尺寸發生變化的時候,或瀏覽器視窗被最小化或被要求以表徵圖方式顯示時,這種調用就會發生。
我們應該編寫自己的paint()方法,以使它在任何時候被調用,都能正常地工作。對它的調用是非同步產生的,且由Applet的運行環境而不是程式來驅動。
paint()方法帶有一個參數,它是java.awt.Graphics類的一個執行個體。這個參數總是建立該Applet的panel的圖形上下文,我們可以用這個圖形上下文在Applet中繪圖或寫入文本。
5. applet從網頁中擷取資訊
正如應用程式可以通過命令列參數來擷取資訊一樣,通過使用param標記,applet可以從網頁中擷取資訊。
在瀏覽器中顯示資訊:調用AppletContext介面中的showStatus()方法
請求瀏覽器顯示指定的網頁:調用AppletContext介面中的showDocument()方法。
6. applet的HTML標記和屬性
n 用於定位的applet屬性
⑴ width和height:必要的屬性,以象素為單位,設定applet的寬度和高度。
⑵ align:可選的屬性,指定applet對齊的方式。
left: 把applet放在網頁左邊,後面的文本會移至applet的右邊。
right: 把applet放在網頁右邊,後面的文本會移至applet的左邊。
bottom: 把applet的底部與當前行文本底部對齊。
top: 把applet的頂部與當前行頂部對齊。
texttop: 把applet的頂部與當前行文本頂部對齊。
middle: 把applet的中部與當前行基準對齊。
absmiddle: 把applet的中部與當前行中部對齊。
baseline: 把applet的底部與當前行基準對齊。
absbottom: 把applet的底部與當前行底部對齊。
⑶vspace和hspace:可選的屬性,指定在applet上/下的象素數目(vspace)和applet兩邊的象素數目(hspace)。
用於編碼的applet屬性
⑴ code:指定applet類檔案的名字。該名字要麼是相對於codebase,那麼是相對於當前頁面。
⑵ codebase:可選的屬性,告訴瀏覽器到哪個目錄下去尋找類檔案。
⑶ archive:可選的屬性,列出Java封存檔案、包含類檔案的檔案或者applet需要的其它資源。
(4)object:用來指定applet類檔案的另外一個方法。
⑸name:可選的屬性,頁面指令碼編寫人員希望賦予applet名字屬性,這樣,在編寫指令碼的時候,就可以用為該屬性指定的名字來代表這個applet。
附錄:AWT動畫,還是討論paint(),update(),repaint()之間的關係
更新顯示由一種被稱為AWT線程的獨立的線程來完成。這個線程可用來處理與顯示更新相關的兩種情況。
第一種情況是顯露(exposure),它在首次顯示時,或在部分顯示已被破壞而必須重新整理時出現。顯示的破壞可能發生在任何時刻,因此,我們的程式必須能在任意時刻更新顯示。
第二種情況是在程式重畫帶有新內容的畫面時。這種重畫可能會要求首先擦除原來的映像。
paint(Graphicsg)方法
當組件第一次顯示,或受損的部分需要修複時被調用。除非必要,更新不會完全覆蓋整個繪圖區域,而是嚴格限制在被破壞的範圍內。
repaint()方法
對repaint()的調用可通知系統:你想改變顯示,於是系統將調用paint()。
update(Graphicsg)方法
repaint()實際上產生了一個調用另一方法update()的AWT線程。update方法通常清除當前的顯示並調用paint()。update()方法可以被修改,例如:為了減少閃爍可不清除顯示而直接調用paint()。