一個(gè)Java小程序是一個(gè)小的應(yīng)用程序?qū)懭氲腏ava編程語(yǔ)言或其他編程語(yǔ)言編譯為Java字節(jié)碼,并在Java中的形式交付給用戶(hù)的字節(jié)碼。用戶(hù)從網(wǎng)頁(yè)啟動(dòng)Java applet ,然后在與Web瀏覽器本身分開(kāi)的進(jìn)程中在Java虛擬機(jī)(JVM)中執(zhí)行applet 。Java小程序可以出現(xiàn)在網(wǎng)頁(yè)的框架,新的應(yīng)用程序窗口,Sun的AppletViewer或用于測(cè)試小程序的獨(dú)立工具中。
Java小程序是在1995年發(fā)布的第一版Java語(yǔ)言中引入的。自2017年Java 9以來(lái),Java小程序被棄用,并從2018年9月發(fā)布的Java SE 11(18。9)中刪除。[6] [7] [ 8] [9] [10]
Java applet通常用Java編寫(xiě),但也可以使用其他語(yǔ)言,如Jython,JRuby,Pascal,[11] Scala或Eiffel(通過(guò)SmartEiffel)。
Java applet運(yùn)行速度非?,直到2011年,它們的速度比JavaScript慢很多倍。與JavaScript不同,Java applet可以訪問(wèn)3D 硬件加速,使其非常適合非平凡的計(jì)算密集型可視化。由于采用了畫(huà)布技術(shù)(或者特別是3D圖形中的WebGL),[12] [13]以及即時(shí)編譯的 JavaScript,[14]速度差異,瀏覽器已經(jīng)獲得了對(duì)硬件加速圖形的支持。變得不那么引人注目了。[ 引證需要 ]
由于Java字節(jié)碼是跨平臺(tái)的(或平臺(tái)無(wú)關(guān)的),Java applet可以由瀏覽器(或其他客戶(hù)端)執(zhí)行,用于許多平臺(tái),包括Microsoft Windows,F(xiàn)reeBSD,Unix,macOS和Linux。它們不能在不支持Java的現(xiàn)代移動(dòng)設(shè)備上運(yùn)行。
內(nèi)容
1 概述
2 技術(shù)信息
2.1 類(lèi)似技術(shù)
3 嵌入網(wǎng)頁(yè)
4 例子
5 優(yōu)點(diǎn)
6 缺點(diǎn)
7 與兼容性相關(guān)的訴訟
7.1 1997:Sun vs Microsoft
7.2 2002:Sun vs Microsoft
7.3 2010:Oracle與Google
8 安全
8.1 未簽名
8.2 簽名
8.3 自簽名
9 替代品
10 另見(jiàn)
11 參考文獻(xiàn)
12 外部鏈接
概述
Applet用于為Web應(yīng)用程序提供交互式功能,這些功能無(wú)法僅由HTML提供。它們可以捕獲鼠標(biāo)輸入,還具有按鈕或復(fù)選框等控件。響應(yīng)于用戶(hù)動(dòng)作,applet可以改變提供的圖形內(nèi)容。這使得applet非常適合演示,可視化和教學(xué)。有在線(xiàn)applet集合,用于研究從物理學(xué)到心臟生理學(xué)的各種科目。
applet也可以只是一個(gè)文本區(qū)域; 例如,為某個(gè)遠(yuǎn)程系統(tǒng)提供跨平臺(tái)命令行界面。如果需要,applet可以離開(kāi)專(zhuān)用區(qū)域并作為單獨(dú)的窗口運(yùn)行。但是,applet對(duì)applet專(zhuān)用區(qū)域之外的網(wǎng)頁(yè)內(nèi)容幾乎沒(méi)有控制權(quán),因此與其他類(lèi)型的瀏覽器擴(kuò)展不同,它們對(duì)于改善網(wǎng)站外觀不太有用(而新聞代碼或WYSIWYG編輯器等applet 也是眾所周知的)。Applet還可以播放瀏覽器本身不支持的格式的媒體。
用HTML編碼的頁(yè)面可以在其中嵌入傳遞給applet的參數(shù)。因此,相同的applet可能具有不同的外觀,具體取決于傳遞的參數(shù)。
由于applet在CSS和DHTML標(biāo)準(zhǔn)之前可用,它們也被廣泛用于諸如翻轉(zhuǎn)導(dǎo)航按鈕之類(lèi)的微不足道的效果。這種方法在可訪問(wèn)性和濫用系統(tǒng)資源方面造成了重大問(wèn)題,已不再使用,甚至在當(dāng)時(shí)也非常勸阻。
技術(shù)信息
Java applet在大多數(shù)Web瀏覽器的沙箱中執(zhí)行,阻止它們?cè)L問(wèn)剪貼板或文件系統(tǒng)等本地?cái)?shù)據(jù)。applet的代碼從Web服務(wù)器下載,之后瀏覽器將 applet 嵌入到網(wǎng)頁(yè)中或打開(kāi)一個(gè)顯示applet 用戶(hù)界面的新窗口。
Java applet擴(kuò)展了類(lèi)java.applet.Applet,或者在Swing applet 的情況下javax.swing.JApplet。必須覆蓋applet類(lèi)中的方法以在其自身內(nèi)部設(shè)置用戶(hù)界面的類(lèi)(Applet)是其后代的Panel后代Container。由于applet繼承自容器,因此它與普通Java應(yīng)用程序具有相同的用戶(hù)界面可能性,包括具有用戶(hù)特定可視化的區(qū)域。
第一個(gè)實(shí)現(xiàn)涉及按類(lèi)下載applet類(lèi)。雖然類(lèi)是小文件,但通常有很多,因此applet被稱(chēng)為緩慢加載的組件。但是,由于引入了.jars,applet通常作為單個(gè)文件提供,其大小類(lèi)似于圖像文件(數(shù)百千字節(jié)到幾兆字節(jié))。
的域從其中小應(yīng)用程序可執(zhí)行程序被下載是其通常的(無(wú)符號(hào))小應(yīng)用程序被允許進(jìn)行通信的唯一的域。此域可以與托管周?chē)鶫TML文檔的域不同。
Java 系統(tǒng)庫(kù)和運(yùn)行時(shí)是向后兼容的,允許用戶(hù)編寫(xiě)在Java虛擬機(jī)的當(dāng)前版本和未來(lái)版本上運(yùn)行的代碼。
類(lèi)似技術(shù)
許多Java開(kāi)發(fā)人員,博客和雜志都建議使用Java Web Start技術(shù)代替applet。[15] Java Web Start允許啟動(dòng)未修改的applet代碼,然后在單獨(dú)的窗口(不在調(diào)用瀏覽器內(nèi))中運(yùn)行。
一個(gè)Java Servlet的有時(shí)非正式相比,是“喜歡”的服務(wù)器端小程序,但它在它的語(yǔ)言,不同的功能,并且在每個(gè)這里描述的關(guān)于小應(yīng)用程序的特性。
嵌入網(wǎng)頁(yè)
通過(guò)使用不推薦使用的appletHTML元素[16]或推薦object元素,可以在網(wǎng)頁(yè)上顯示applet 。[17]該embed元素可以與Mozilla系列瀏覽器一起使用[18](embed在HTML 4中已棄用,但包含在HTML 5中)。這指定了applet的源和位置。兩者object和embed標(biāo)簽也可以下載和安裝Java虛擬機(jī)(如果需要)或者至少導(dǎo)致插件頁(yè)面。applet和object標(biāo)簽還支持加載以某種特定(而非初始)狀態(tài)開(kāi)始的序列化小程序。如果瀏覽器由于任何原因無(wú)法運(yùn)行,則標(biāo)簽還會(huì)指定顯示代替applet的消息。
然而,盡管object正式推薦標(biāo)簽,截至2010年,object標(biāo)簽的支持在瀏覽器中尚未保持一致,并且Sun一直建議在舊的applet多瀏覽器環(huán)境中部署舊標(biāo)簽[19],因?yàn)樗匀皇俏ㄒ灰恢轮С值臉?biāo)簽。流行的瀏覽器。為了支持多個(gè)瀏覽器,object標(biāo)簽當(dāng)前需要JavaScript(識(shí)別瀏覽器并調(diào)整標(biāo)簽),使用其他特定于瀏覽器的標(biāo)簽或從服務(wù)器端提供適應(yīng)的輸出。棄用applet標(biāo)簽一直受到批評(píng)。Oracle現(xiàn)在提供了一個(gè)維護(hù)的JavaScript代碼[20]來(lái)啟動(dòng)具有跨平臺(tái)解決方案的applet。
Java瀏覽器插件依賴(lài)于NPAPI,許多Web瀏覽器供應(yīng)商因其年齡和安全問(wèn)題而棄用。2016年1月,Oracle宣布基于JDK 9的Java運(yùn)行時(shí)環(huán)境將停止使用瀏覽器插件。[21]
示例
以下示例說(shuō)明了通過(guò)java.applet包使用Java applet。該示例還使用Java Abstract Window Toolkit(AWT)中的類(lèi)來(lái)生成消息“ Hello,world! ”作為輸出。
import java.applet。* ;
import java.awt。* ;
//“Hello,world!”的Applet代碼 例。
//這應(yīng)保存在名為“HelloWorld.java”的文件中。
公共 類(lèi) HelloWorld 擴(kuò)展 Applet {
//在屏幕上打印一條消息(x = 20,y = 10)。
public void paint (Graphics g ) {
g 。drawString之(“你好,世界!” , 20 , 10 );
//在屏幕上繪制一個(gè)圓圈(x = 40,y = 30)。
g 。drawArc (40 , 30 , 20 , 20 , 0 , 360 );
//在屏幕上繪制一個(gè)矩形(x1 = 100,y1 = 100,x2 = 300,y2 = 300)。
g 。drawRect中(100 , 100 , 300 , 300 );
//在屏幕上繪制一個(gè)正方形(x1 = 100,y1 = 100,x2 = 200,y2 = 200)。
g 。drawRect中(100 , 100 , 200 , 200 );
}
}
簡(jiǎn)單的applet可以在Internet上自由共享,用于自定義支持插件的應(yīng)用程序。
編譯之后,生成的.class文件可以放在Web服務(wù)器上,并使用<applet>或<object>標(biāo)記在HTML頁(yè)面中調(diào)用。例如:
<!DOCTYPE html>
< html >
< head >
< title > HelloWorld_example.html </ title >
</ head >
< body >
< h1 > Java applet示例</ h1 >
< p >
這里是:
< applet code = “HelloWorld.class” height = “40” width = “200” >
這是HelloWorld.class運(yùn)行的地方。
</ applet >
</ p >
</ body >
</ html >
訪問(wèn)該頁(yè)面時(shí),其內(nèi)容如下:
一個(gè)Java applet示例
這是:你好,世界!
為了大限度地縮短下載時(shí)間,可以以jar文件的形式提供applet 。對(duì)于此示例,如果將所有必需的類(lèi)放在壓縮歸檔example.jar中,則可以使用以下嵌入代碼:
< p >
這里是:
< applet archive = “example.jar” code = “HelloWorld” height = “40” width = “200” >
這是HelloWorld.class運(yùn)行的地方。
</ applet >
</ p >
Sun的官方頁(yè)面中詳細(xì)介紹了Applet包含有關(guān)APPLET標(biāo)記的內(nèi)容。[22]
優(yōu)點(diǎn)
Java applet可以具有以下任何或所有優(yōu)點(diǎn):[23]
使它在FreeBSD,Linux,Microsoft Windows和macOS上運(yùn)行很簡(jiǎn)單 - 也就是說(shuō),使它跨平臺(tái)。在21世紀(jì)的前十年,大多數(shù)網(wǎng)絡(luò)瀏覽器都支持小程序; 然而,從那以后,出于安全原因,大多數(shù)瀏覽器都放棄了applet支持。
同一個(gè)applet可以同時(shí)處理“所有”安裝的Java版本,而不僅僅是新的插件版本。但是,如果applet需要更高版本的Java Runtime Environment(JRE),則客戶(hù)端將在大型下載期間被迫等待。
大多數(shù)Web瀏覽器都會(huì)緩存 applet,因此在返回網(wǎng)頁(yè)時(shí)可以快速加載它們。Applet也隨著使用而改進(jìn):運(yùn)行第一個(gè)applet后,JVM已經(jīng)運(yùn)行并快速啟動(dòng)(每次瀏覽器重新啟動(dòng)時(shí)JVM都需要重新啟動(dòng))。當(dāng)瀏覽器從包含applet的一個(gè)HTML頁(yè)面導(dǎo)航到包含applet的另一個(gè)HTML頁(yè)面時(shí),JRE 1.5及更高版本會(huì)停止JVM并重新啟動(dòng)它。
它可以將工作從服務(wù)器轉(zhuǎn)移到客戶(hù)端,使得Web解決方案可以根據(jù)用戶(hù)/客戶(hù)端的數(shù)量進(jìn)行擴(kuò)展。
如果獨(dú)立程序(如Google Earth)與Web服務(wù)器通信,則該服務(wù)器通常需要為尚未更新其客戶(hù)端軟件的用戶(hù)支持所有先前版本。相反,正確配置的瀏覽器會(huì)加載(和緩存)新的applet版本,因此不需要支持舊版本。
applet自然支持不斷變化的用戶(hù)狀態(tài),例如棋盤(pán)上的數(shù)字位置。
開(kāi)發(fā)人員可以直接通過(guò)創(chuàng)建主例程(在applet的類(lèi)中或在單獨(dú)的類(lèi)中)并在applet上調(diào)用init()和start()來(lái)直接開(kāi)發(fā)和調(diào)試applet,從而允許在他們喜歡的Java SE開(kāi)發(fā)環(huán)境中進(jìn)行開(kāi)發(fā)。之后所有人都必須在AppletViewer程序或Web瀏覽器中重新測(cè)試applet,以確保它符合安全限制。
一個(gè)不受信任的小應(yīng)用程序到本地機(jī)器不能訪問(wèn),只能訪問(wèn)它來(lái)自服務(wù)器。這使得這樣的applet比它可以替換的獨(dú)立可執(zhí)行文件更安全。但是,如果用戶(hù)同意,簽名的applet可以對(duì)其運(yùn)行的計(jì)算機(jī)具有完全訪問(wèn)權(quán)限。
Java applet很快,甚至可以與本機(jī)安裝的軟件具有相似的性能。
缺點(diǎn)
此部分需要額外引用以進(jìn)行驗(yàn)證。請(qǐng)通過(guò)向可靠來(lái)源添加引文來(lái)幫助改進(jìn)本文。無(wú)法查證的內(nèi)容可能被提出異議而移除。查找來(lái)源:“Java applet” - 新聞· 報(bào)紙· 書(shū)籍· 學(xué)者· JSTOR
(2015年8月)(了解如何以及何時(shí)刪除此模板消息)
與其他客戶(hù)端Web技術(shù)相比,Java applet可能具有以下任何缺點(diǎn):
Java applet依賴(lài)于Java Runtime Environment(JRE),這是一個(gè)相當(dāng)復(fù)雜和重量級(jí)的軟件包。它通常還需要Web瀏覽器的插件。某些組織僅允許管理員安裝的軟件。因此,某些用戶(hù)只能查看足夠重要的applet,以便與管理員聯(lián)系以請(qǐng)求安裝JRE和插件。
如果applet需要比系統(tǒng)上可用的更新的JRE或特定的JRE,則第一次運(yùn)行它的用戶(hù)將需要等待大型JRE下載完成。
iOS或Android上的移動(dòng)瀏覽器根本不運(yùn)行Java小程序。[24]隨著移動(dòng)操作系統(tǒng)的興起,桌面瀏覽器逐步淘汰Java applet支持。
與舊applet標(biāo)記不同,object標(biāo)記需要使用變通方法來(lái)編寫(xiě)跨瀏覽器的HTML文檔。
沒(méi)有標(biāo)準(zhǔn)可以讓屏幕閱讀器可以使用applet的內(nèi)容。因此,applet可能會(huì)損害具有特殊需求的用戶(hù)訪問(wèn)網(wǎng)站的可能性。
與任何客戶(hù)端腳本一樣,安全性限制可能使不受信任的applet難以甚至不可能實(shí)現(xiàn)所需的目標(biāo)。但是,只需編輯JAVA JRE安裝中的java.policy文件,就可以授予對(duì)本地文件系統(tǒng)或系統(tǒng)剪貼板的訪問(wèn)權(quán)限,也可以授予除向applet提供給瀏覽器的網(wǎng)絡(luò)源以外的其他網(wǎng)絡(luò)源。
與兼容性相關(guān)的訴訟
Sun已經(jīng)做出了相當(dāng)大的努力來(lái)確保Java版本之間的兼容性得以保持,并在必要時(shí)依法強(qiáng)制實(shí)施Java可移植性。Oracle似乎在繼續(xù)采用相同的策略。
1997年:Sun對(duì)微軟
1997年的訴訟[25]是在微軟創(chuàng)建了自己的改進(jìn)的Java虛擬機(jī)之后提交的,該虛擬機(jī)隨Internet Explorer一起提供。Microsoft 在java.awt,java.lang和java.io包中的類(lèi)中添加了大約50個(gè)方法和50個(gè)字段[25]。其他修改包括刪除RMI功能和將Java本機(jī)接口從JNI 替換為RNI,這是一種不同的標(biāo)準(zhǔn)。RMI被刪除,因?yàn)樗荒茌p松支持Java到Java通信并與Microsoft DCOM競(jìng)爭(zhēng)技術(shù)。依賴(lài)這些更改或只是無(wú)意中使用它們的小程序僅在Microsoft的Java系統(tǒng)中起作用。Sun起訴違反商標(biāo),因?yàn)镴ava的重點(diǎn)是不應(yīng)該有專(zhuān)有擴(kuò)展,并且代碼應(yīng)該在任何地方都可以使用。微軟同意向Sun支付2000萬(wàn)美元,并且Sun同意授予Microsoft有限許可,僅在有限的時(shí)間內(nèi)不使用Java進(jìn)行修改。[26]
2002年:Sun與微軟
微軟繼續(xù)發(fā)布自己未經(jīng)修改的Java虛擬機(jī)。多年來(lái)它變得非常過(guò)時(shí)但仍然是Internet Explorer的默認(rèn)設(shè)置。后來(lái)的一項(xiàng)研究表明,這次的applet經(jīng)常包含自己的類(lèi),它們以有限的方式反映Swing和其他新功能。[27] 2002年,Sun提起反壟斷訴訟,聲稱(chēng)微軟試圖非法壟斷已經(jīng)損害了Java平臺(tái)。Sun要求微軟將Sun當(dāng)前的二進(jìn)制Java技術(shù)實(shí)施作為Windows的一部分進(jìn)行分發(fā),將其作為舊版Microsoft桌面操作系統(tǒng)的推薦更新進(jìn)行分發(fā),并停止分發(fā)微軟的虛擬機(jī)(因?yàn)槠湓谥暗脑V訟中同意的許可時(shí)間已經(jīng)過(guò)過(guò)期)。[26]微軟為未決的反托拉斯問(wèn)題支付了7億美元,為專(zhuān)利問(wèn)題支付了9億美元,并為將來(lái)使用Sun的軟件支付了3.5億美元的特許權(quán)使用費(fèi)。[28] [ 需要非主要來(lái)源 ]
2010年:甲骨文與谷歌
另請(qǐng)參閱:Oracle訴谷歌
Google開(kāi)發(fā)了自己的Android平臺(tái),該平臺(tái)使用Java功能和概念,但與標(biāo)準(zhǔn)庫(kù)不兼容。這可能違反Sun授予OpenJDK專(zhuān)利的條件,以便為所有人使用開(kāi)源Java。2010年,甲骨文起訴谷歌[29]以“錯(cuò)誤的方式”使用Java,聲稱(chēng)“谷歌的Android與甲骨文美國(guó)的Java競(jìng)爭(zhēng)”以及“谷歌已經(jīng)意識(shí)到Sun的專(zhuān)利組合......”因?yàn)楣雀杵刚?qǐng)了某些前Sun公司Java工程師“。2012年5月,該案件的陪審團(tuán)發(fā)現(xiàn)谷歌沒(méi)有侵犯甲骨文的專(zhuān)利,審判法官裁定谷歌使用的Java API結(jié)構(gòu)不具有版權(quán)。[30] [31]
安全
有兩種applet類(lèi)型具有非常不同的安全模型:簽名小程序和未簽名小程序。[32]自Java SE 7 Update 21(2013年4月)起,鼓勵(lì)小程序和Web-Start應(yīng)用程序使用受信任的證書(shū)進(jìn)行簽名,并在運(yùn)行未簽名的小程序時(shí)顯示警告消息。[33]進(jìn)一步從Java 7 Update 51開(kāi)始,默認(rèn)情況下會(huì)阻止未簽名的applet; 可以通過(guò)在Java控制面板中創(chuàng)建異常來(lái)運(yùn)行它們。[34]
未簽名
對(duì)未簽名的小程序的限制被理解為“嚴(yán)苛的”:他們無(wú)法訪問(wèn)僅限于applet下載站點(diǎn)的本地文件系統(tǒng)和Web訪問(wèn); 還有許多其他重要的限制。例如,他們無(wú)法訪問(wèn)所有系統(tǒng)屬性,使用自己的類(lèi)加載器,調(diào)用本機(jī)代碼,在本地系統(tǒng)上執(zhí)行外部命令,或者重新定義屬于作為Java版本一部分包含的核心包的類(lèi)。雖然它們可以在獨(dú)立框架中運(yùn)行,但這樣的框架包含一個(gè)標(biāo)頭,表明這是一個(gè)不受信任的小程序。成功初始調(diào)用禁止方法不會(huì)自動(dòng)創(chuàng)建安全漏洞,因?yàn)樵L問(wèn)控制器會(huì)檢查整個(gè)堆棧 調(diào)用代碼以確保呼叫不是來(lái)自不正確的位置。
與任何復(fù)雜系統(tǒng)一樣,自Java首次發(fā)布以來(lái),已發(fā)現(xiàn)并修復(fù)了許多安全問(wèn)題。其中一些(如日歷序列化安全性錯(cuò)誤)持續(xù)了很多年,沒(méi)有人知道。其他人在野外被惡意軟件使用。[ 引證需要 ]
一些研究提到applet崩潰瀏覽器或過(guò)度使用CPU資源但這些被歸類(lèi)為麻煩而不是真正的安全漏洞。但是,未簽名的applet可能涉及組合攻擊,這些攻擊利用系統(tǒng)其他部分中的多個(gè)嚴(yán)重配置錯(cuò)誤的組合。未簽名的applet在托管它的服務(wù)器上直接運(yùn)行也會(huì)更危險(xiǎn),因?yàn)殡m然代碼庫(kù)允許它與服務(wù)器通信,但在其內(nèi)部運(yùn)行可以繞過(guò)防火墻。applet也可能在托管它的服務(wù)器上嘗試DoS攻擊,但通常管理該網(wǎng)站的人也管理applet,這使得這不合理。社區(qū)可以通過(guò)源代碼審查或在專(zhuān)用域上運(yùn)行applet 來(lái)解決此問(wèn)題。
未簽名的小程序還可以嘗試下載托管在原始服務(wù)器上的惡意軟件。但是,它只能將此類(lèi)文件存儲(chǔ)到臨時(shí)文件夾中(因?yàn)樗撬矐B(tài)數(shù)據(jù)),并且無(wú)法通過(guò)執(zhí)行它來(lái)完成攻擊。有人嘗試使用applet以這種方式傳播Phoenix和Siberia漏洞,[ 引證需要 ]但是這些漏洞利用內(nèi)部不使用Java,并且還以其他幾種方式分發(fā)。
簽名
簽名的小程序[35]包含一個(gè)簽名,瀏覽器應(yīng)通過(guò)遠(yuǎn)程運(yùn)行的獨(dú)立證書(shū)頒發(fā)機(jī)構(gòu)服務(wù)器進(jìn)行驗(yàn)證。生成此簽名涉及專(zhuān)門(mén)的工具以及與權(quán)威服務(wù)器維護(hù)人員的交互。驗(yàn)證簽名并且當(dāng)前計(jì)算機(jī)的用戶(hù)也批準(zhǔn)后,簽名的applet可以獲得更多權(quán)限,變得等同于普通的獨(dú)立程序。理由是,小程序的作者現(xiàn)在已知,并將對(duì)任何故意損害負(fù)責(zé)。[ 含糊 ]這種方法允許applet用于許多客戶(hù)端腳本無(wú)法實(shí)現(xiàn)的任務(wù)。但是,這種方法需要用戶(hù)承擔(dān)更多責(zé)任,決定他或她信任誰(shuí)。相關(guān)的問(wèn)題包括無(wú)響應(yīng)的授權(quán)服務(wù)器,在頒發(fā)證書(shū)時(shí)對(duì)簽名者身份的錯(cuò)誤評(píng)估,以及仍然做出用戶(hù)不會(huì)批準(zhǔn)的事情的已知applet發(fā)布者。因此,從Java 1.1出現(xiàn)的簽名小程序?qū)嶋H上可能有更多的安全問(wèn)題。
自簽名
自簽名applet是開(kāi)發(fā)人員自己簽署的applet,可能會(huì)帶來(lái)安全風(fēng)險(xiǎn); java插件在請(qǐng)求自簽名applet的授權(quán)時(shí)提供警告,因?yàn)閍pplet的功能和安全性?xún)H由開(kāi)發(fā)人員本身保證,并且尚未經(jīng)過(guò)獨(dú)立確認(rèn)。此類(lèi)自簽名證書(shū)通常僅在發(fā)布之前的開(kāi)發(fā)期間使用,其中第三方確認(rèn)安全性并不重要,但大多數(shù)applet開(kāi)發(fā)人員將尋求第三方簽名以確保用戶(hù)信任applet的安全性。
Java安全問(wèn)題與任何客戶(hù)端腳本平臺(tái)的類(lèi)似問(wèn)題沒(méi)有根本的區(qū)別[36] [ 引證需要 ]。特別是,與簽名小程序相關(guān)的所有問(wèn)題也適用于Microsoft ActiveX組件。
截至2014年,常用的Java插件或Java Web Start不再接受自簽名和未簽名的applet。因此,希望部署Java小程序的開(kāi)發(fā)人員別無(wú)選擇,只能從商業(yè)來(lái)源獲取可信證書(shū)。
替代品
存在替代技術(shù)(例如,JavaScript),其滿(mǎn)足applet可能的全部或更多范圍。其中,JavaScript并不總是被視為競(jìng)爭(zhēng)的替代品[ 由誰(shuí)?] ; JavaScript可以與同一頁(yè)面中的applet共存,協(xié)助啟動(dòng)applet(例如,在單獨(dú)的框架中或提供平臺(tái)解決方法),然后從applet代碼調(diào)用。JavaFX是Java平臺(tái)的擴(kuò)展,也可以作為替代方案。