Applet 由多個 .class 檔案組成。傳統載入需為每個 class 建立獨立 HTTP 連線(Socket),連線建立/關閉開銷大,嚴重拖慢啟動速度。將所有 class 打包成單一封存檔,僅需**一個連線**即可下載全部。
| 格式 | 推動者 | HTML 參數 | 現狀 |
|---|---|---|---|
| JAR (Java Archive) | Sun/JavaSoft (JDK 1.1+) | archive="app.jar" | **標準、跨平台、支援簽名、壓縮、資源檔**,首選 |
| ZIP | Netscape | archive="app.zip" | 早期方案,**僅存儲不壓縮** (zip -0/pkzip -e0),已被 JAR 取代 |
| CAB | Microsoft | <param name=cabbase value="app.cab"> | IE 專用,逐漸淘汰 |
# JAR (推薦)
jar cvf app.jar *.class # 或包含圖片、音頻等資源
# ZIP (僅存儲,不壓縮)
zip -0 app.zip *.class # -0 為數字零,表示存儲模式
# 或 pkzip -e0 app.zip *.class
# CAB (需 Microsoft Cabinet SDK)
# cabarc -r app.cab *.class
<applet name="Hello" code="HelloWorld" width="50" height="50"
codebase="https://example.com/classes"
archive="hello.jar"> <!-- JAR for Java 1.1+ / 現代瀏覽器 -->
<param name="cabbase" value="hello.cab"> <!-- CAB for IE -->
</applet>
瀏覽器優先嘗試支援的格式:支援 JAR 的用 JAR,舊 IE 用 CAB,極舊 Netscape 用 ZIP(需額外指定 archive="hello.zip")。不支援封存的瀏覽器退回逐個 class 下載。
getClass().getResourceAsStream("/image.png") 讀取。jarsigner -keystore my.keystore app.jar myalias,授信後可突破沙箱限制(讀寫本地檔、連線任意主機)。MANIFEST.MF 可聲明 Main-Class、Class-Path、Sealed 等屬性。.jar 雙擊執行。java -jar app.jar(需 Manifest 指定 Main-Class)。