必威电竞|足球世界杯竞猜平台

Applet
來源:互聯(lián)網(wǎng)

Applet是采用Java編程語言編寫的小應(yīng)用程序,該程序可以包含在 HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個應(yīng)用)頁中,與在頁中包含圖像的方式大致相同。

含有Applet的網(wǎng)頁的HTML文件代碼中部帶有 和這樣一對標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對標(biāo)記時,就將下載相應(yīng)的小應(yīng)用程序代碼并在本地計算機(jī)上執(zhí)行該Applet。

工作原理

.Java Applet 可以大大提高Web頁面的交互能力和動態(tài)執(zhí)行能力。包含Applet的網(wǎng)頁被稱為Java-powered頁,可以稱其為Java支持的網(wǎng)頁。

當(dāng) 用戶訪問這樣的網(wǎng)頁時,Applet被下載到用戶的計算機(jī)上執(zhí)行,但前提是用戶使用的是支持Java的網(wǎng)絡(luò)瀏覽器。由于Applet是在用戶的計算機(jī)上執(zhí)行的,所以它的執(zhí)行速度不受網(wǎng)絡(luò)帶寬或者M(jìn)odem存取速度的限制,用戶可以更好地欣賞網(wǎng)頁上Applet產(chǎn)生的多媒體效果。

在Java Applet中,可以實(shí)現(xiàn)圖形繪制,字體和顏色控制,動畫和聲音的插入,人機(jī)交互及網(wǎng)絡(luò)交流等功能。 Applet還提供了名為抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口環(huán)境開發(fā)工具。 AWT利用用戶計算機(jī)的GUI元素,可以建立標(biāo)準(zhǔn)的圖形用戶界面,如窗口、按鈕、滾動條等等。目前,在網(wǎng)絡(luò)上有非常多的Applet范例來生動地展現(xiàn)這些功能,讀者可以去調(diào)閱相應(yīng)的網(wǎng)頁以觀看它們的效果。

Applet 小應(yīng)用程序的實(shí)現(xiàn)主要依靠java.applet包中的Applet類。與一般的應(yīng)用程序不同,Applet應(yīng)用程序必須嵌入在HTML頁面中,才能得到解釋執(zhí)行;同時Applet可以從Web頁面中獲得參數(shù),并和Web頁面進(jìn)行交互。

Applet是一種Java的小程序,它通過使用該Applet的HTML文件,由支持Java的網(wǎng)頁瀏覽器下載運(yùn)行。也可以通過java開發(fā)工具的appletviewer來運(yùn)行。Applet 程序離不開使用它的HTML文件。這個HTML文件中關(guān)于Applet的信息至少應(yīng)包含以下三點(diǎn):

1)字節(jié)碼文件名(編譯后的Java文件,以.class為后綴)

2)字節(jié)碼文件的地址

3)在網(wǎng)頁上顯示Applet的方式。

一個HTML增加Applet有關(guān)的內(nèi)容只是使網(wǎng)頁更加富有生氣,如添加聲音、動畫等這些吸引人的特征,它并不會改變HTML文件中與Applet無關(guān)的元素。

安全性限制

為了防止這樣的問題出現(xiàn),在缺省的情況下,大多數(shù)瀏覽器在Applet安全方面受到諸多的限制,幾乎不能對系統(tǒng)進(jìn)行任何“讀”或“寫”的操作:

1. 不允許Applet訪問本地文件系統(tǒng)

2. Applet不能執(zhí)行任何本地計算機(jī)上的程序

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的機(jī)器的網(wǎng)絡(luò)連接

7. Applet不能充當(dāng)網(wǎng)絡(luò)服務(wù)器,監(jiān)聽或接收來自遠(yuǎn)程系統(tǒng)的連接請求

8. 不允許Applet裝載動態(tài)庫或定義本地方法調(diào)用

9. Applet不能操縱不在自己線程組中的任何線程

10. Applet不能關(guān)閉JavaOS

開發(fā)步驟

Applet程序開發(fā)主要步驟如下:

1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。

2)把Applet的源程序轉(zhuǎn)換為字節(jié)碼文件。

3)編制使用class 的HTML。在HTML文件內(nèi)放入必要的語句。

下面舉一個最簡單的HelloWorld 例子來說明Applet程序的開發(fā)過程:

(1) 編輯Applet 的java源文件

創(chuàng)建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java

文件的源代碼如下:

import java.awt.*;

import java.applet.*;

public class HelloWorld extends Applet //繼承Applet類,這是Applet Java程序的特點(diǎn)

{

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

注意:如果編寫的源程序違反了Java編程語言的語法規(guī)則,JAVA編譯器將在屏幕上顯示語法錯誤提示信息。源文件中必須不含任何語法錯誤,Java編譯器才能成功地把源程序轉(zhuǎn)換為appletviewer和瀏覽器能夠執(zhí)行的字節(jié)碼程序。

成功地編譯Java applet之后生成響應(yīng)的字節(jié)碼文件HelloWorld.class的文件。用File Explorer或DIR命令列出目錄列表,將會發(fā)現(xiàn)目錄C:\ghq中多了一個名為HelloWorld.class的文件。

(3)創(chuàng)建HTML

在運(yùn)行創(chuàng)建的HelloWorld.class 之前,還需創(chuàng)建一個HTML文件,appletviewer或?yàn)g覽器將通過該文件訪問創(chuàng)建的Applet。為運(yùn)行HelloWorld.class, 需要創(chuàng)建包含如下HTML語句的名為HelloWorld.html的文件。

HelloWorld! Applet

CODE="HelloWorld.class" //這里應(yīng)該是HelloWorld.class

WIDTH=200

HEIGHT=100>

HTML>

本例中,語句指明該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運(yùn)行HelloWorld.HTML,需輸入如下的命令行:

C:\ghq\>appletviewer HelloWorld.html

可以看出,該命令啟動了appletviewer并指明了HTML文件,該HTML文件中包含對應(yīng)于HelloWorld 的語句。

如果用瀏覽器運(yùn)行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。

至此,一個Applet程序的開發(fā)運(yùn)行整個過程結(jié)束了(包括java源文件、編譯的class文件、HTML以及用appletviewer或用瀏覽器運(yùn)行)。

//還可應(yīng)用程序:

import java.awt.*;

import java.applet.*;

public class Test extends Applet //繼承Appelet類,這是Applet Java程序的特點(diǎn)

{

public void paint(Graphics g)

{

people zhang;

zhang=new people();

zhang.setname("Robot");

zhang.setage(12);

g.drawString(zhang.talk(),5,35);

}

}

class people

{

private String name ;

private int age ;

String talk()

{

return "我是"+name+";今年"+age+"歲";

}

public void setname(String str)

{

name = str ;

}

public void setage(int a)

{

if(a>0)

age = a ;

else age=-a;

}

public String getname()

{

return name ;

}

public int getage()

{

return age ;

}

}

常用方法

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運(yùn)行的文件目錄的對象。

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運(yùn)行的窗口尺寸。

public void resize(Dimension d);// 調(diào)整Applet運(yùn)行的窗口尺寸。

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的運(yùn)行。

運(yùn)行狀態(tài)

Applet類中的四種基本方法用來控制其運(yùn)行狀態(tài):init()、start()、stop()、destroy()

init()方法

這個方法主要是為Applet的正常運(yùn)行做一些初始化工作。當(dāng)一個Applet被系統(tǒng)調(diào)用時,系統(tǒng)首先調(diào)用的就是該方法。通常可以在該方法中完成從網(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()方法中。可以在start()方法中開始一個線程,如繼續(xù)一個動畫、聲音等。

stop()方法

這個方法在用戶離開Applet所在頁面時執(zhí)行,因此,它也是可以被多次執(zhí)行的。它使你可以在用戶并不注意Applet的時候,停止一些耗用系統(tǒng)資源的工作以免影響系統(tǒng)的運(yùn)行速度,且并不需要人為地去調(diào)用該方法。如果Applet中不包含動畫、聲音等程序,通常也不必實(shí)現(xiàn)該方法。

destroy()方法

與對象的finalize()方法不同,Java在瀏覽器關(guān)閉的時候才調(diào)用該方法。Applet是嵌在HTML中的,所以destroty()方法不關(guān)心何時Applet被關(guān)閉,它在瀏覽器關(guān)閉的時候自動執(zhí)行。在destroy()方法中一般可以要求收回占用的非內(nèi)存獨(dú)立資源。(如果在Applet仍在運(yùn)行時瀏覽器被關(guān)閉,系統(tǒng)將先執(zhí)行stop()方法,再執(zhí)行destroy()方法。

有關(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,它可以是絕對地址。也可以是相對于當(dāng)前HTML所在目錄的相對地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 標(biāo)志,瀏覽器將使用和HTML文件相同的URL。

* ALT 標(biāo)志

雖然Java在WWW上很受歡迎,但并非所有瀏覽器都對其提供支持。如果某瀏覽器無法運(yùn)行Java Applet,那么它在遇到APPLET語句時將顯示ALT標(biāo)志指定的文本信息。

* ALIGN 標(biāo)志

ALIGN標(biāo)志可用來控制把Applet窗口顯示在HTML文檔窗口的什么位置。與HTML語句一樣,ALIGN標(biāo)志指定的值可以是TOP、MIDDLE或BOTTOM。

* VSPACE與HSPACE 標(biāo)志

VSPACE和HSPACE標(biāo)志指定瀏覽器顯示在Applet窗口周圍的水平和豎直空白條的尺寸,單位為像素。

* NAME 標(biāo)志

NAME標(biāo)志把指定的名字賦予Applet的當(dāng)前實(shí)例。當(dāng)瀏覽器同時運(yùn)行兩個或多個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文件代碼。代碼第五行中的

,是為了確保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ò)連接的速度。一旦下載以后,它便和本地計算機(jī)上的程序以相同的速度運(yùn)行了。

Applet在用戶的計算機(jī)上執(zhí)行時,還可以下載其它的資源,如聲音文件、圖像文件或更多的Java代碼,有些Applet還允許用戶進(jìn)行交互式操作。但這需要重復(fù)的鏈接與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是采用類似高速緩存的技術(shù),將每次下載的文件都臨時保存在用戶的硬盤上,雖然第一次使用時花的時間比較多,但當(dāng)再次使用時,只需直接從硬盤上讀取文件而無需再與Internet連接,便可以大大提高性能了。

調(diào)用applet

大家都知道由于java2的安全性,對applet的正常調(diào)用的HTML已經(jīng)不能再使用了,而改為ActiveX類型的調(diào)用。具體的又分ie和nescape的不同寫法,這一些在sun網(wǎng)上都能找到現(xiàn)成的教程。

重要

其中我要強(qiáng)調(diào)一點(diǎn),因?yàn)閍pplet每一次的改動都需要重新打包簽名,手續(xù)非常繁瑣,所以在具體的實(shí)現(xiàn)中要將一些會變化參數(shù)放到html文件中來,傳到applet中去,這一點(diǎn)網(wǎng)上文章好多,自己去看吧。

缺陷

另外一個就是有朋友問我,那這樣不是太麻煩了,每一個客戶端都要進(jìn)行復(fù)雜的dos命令操作,我只能說我的水平只能將一個已經(jīng)做好的客戶端文件cer文件和java.policy以及cacerts文件直接拷貝到客戶端,當(dāng)然這也有缺陷,如果別人的計算機(jī)已經(jīng)有了認(rèn)證,就會丟失。就這些問題我們可以一起探討。

優(yōu)化

另外還有一點(diǎn)優(yōu)化,就是在打包的時候,我這兒只講了把所有要用的涉及到安全性的包和源程序到要打到一個包中。這樣如果包非常大的話,會非常影響下載的速度,如果可以使用本地計算機(jī)的包就好了,這一點(diǎn)JRE也做到了,具體的要到控制面板的jre控制臺上去設(shè)置。這個就留著讀者自己去摸索吧。

實(shí)現(xiàn)方法

服務(wù)器端

1.將程序需要用到的各種包文件全部解壓(要用到weblogic的JMS包使用命令jar xf weblogicc.jar),然后使用JDK的打包命令將編譯好的監(jiān)控程序.class和剛才解壓的包一起打包到一個包中。(前提我已經(jīng)將監(jiān)控程序和解開的包都放在同一個目錄下了),都是dos狀態(tài)下的命令,具體命令見jdk1.3(1.2)的bin目錄下,

命令如下:

jar cvf monitor.jar *.class

此命令生成一個名為monitor.jar的包

2.為剛才創(chuàng)建的包文件(monitor.jar)創(chuàng)建keystore和keys。其中,keystore將用來存放密匙(private keys)和公共鑰匙的認(rèn)證,alias別名這兒取為monitor。

命令如下:

keytool -genkey -keystore monitor.keystore –alias monitor

此命令生成了一個名為monitor.keystore的keystore文件,接著這條命令,系統(tǒng)會問你好多問題,比如公司名稱,地址,要設(shè)定的密碼等等,都可以隨便寫。

3.使用剛才生成的鑰匙來對jar文件進(jìn)行簽名

命令如下:

jarsigner -keystore monitor.keystore monitor.jar monitor

這個命令將對monitor.jar文件進(jìn)行簽名,不會生成新文件。

4.將公共鑰匙導(dǎo)入到一個cer文件中,這個cer文件就是要拷貝到客戶端的唯一文件。

命令如下:

keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer

此條命令將生成monitor.cer認(rèn)證文件,當(dāng)然這幾步都有可能問你剛才設(shè)置的密碼。這樣就完成了服務(wù)器端的設(shè)置。這時就可以將jar文件和keystore文件以及cer文件(我這兒是monitor.jar,monitor.keystore,monitor.cer)拷貝到服務(wù)器的目錄下了。

客戶端

1. 首先應(yīng)該安裝jre1.3.0_01,然后將服務(wù)器端生成的monitor.cer 文件拷貝到j(luò)re的特定目錄下,我這兒是:

c:\program files\javasoft\jre\1.3.0_01\lib\security目錄下。

2. 將公共鑰匙倒入到j(luò)re的cacerts(這是jre的默認(rèn)keystore)

命令如下:

keytool -import -alias monitor -file monitor.cer

-keystore cacerts

注意這兒要你輸入的是cacerts的密碼,應(yīng)該是changeit,而不是你自己設(shè)定的keystore的密碼。

3. 修改policy策略文件,在dos狀態(tài)下使用命令 policytool

系統(tǒng)會自動彈出一個policytool的對話框,如圖4所示,在這里面首先選擇file菜單的open項(xiàng),打開c:\program files\javasoft\jre\1.3.0_01\lib\security目錄下的java.poliy文件,然后在edit菜單中選擇Change keystore ,在對話框中new keystore url:中輸入

file:/c:/program files /javasoft/jre/1.3.0_01/lib/security/cacerts, 這兒要注意反斜杠,在new keystore type 中輸入JKS,這是cacerts的固定格式,然后單擊Add Policy Entry,在出現(xiàn)的對話框中CodeBase中輸入:

http://URL:7001/*

其中的URL是服務(wù)器的IP地址,7001是weblogic的端口,如果是在別的應(yīng)用服務(wù)器上比如說是apache,那端口號就可以省略掉。

在SignedBy中輸入(別名alias):這兒是Monitor然后單擊add peimission按鈕,在出現(xiàn)的對話框中permission中選擇你想給這個applet的權(quán)限,這兒具體有許多權(quán)限,讀者可以自己找資料看看。這兒就選用allpeimission,右邊的signedBy中輸入別名:monitor

最后保存,在file菜單的save項(xiàng)。

這樣客戶端的設(shè)置就完成了。在客戶端用ie運(yùn)行該applet程序時,會詢問你是不是對該簽名授權(quán),選擇授權(quán)后,包會自動從服務(wù)器下載到本地計算機(jī),而且ie會自動啟動JRE,在右下欄中可以看見,相當(dāng)于ie的java控制臺。

4.調(diào)用applet的HTML文件

applet的正常調(diào)用的html文件已經(jīng)不能再用了。

監(jiān)控平臺


width="900" height="520" align="baseline" codebase="http://192.168.2.217:7001/J2re-1_3_0_01-win-i.exe#Version=1,3,0,0">

參考資料 >

生活家百科家居網(wǎng)