在傳統的 Java 應用程式部署模式中,使用者必須先安裝 JRE、下載 JAR 檔、設定類別路徑,過程繁瑣且易出錯。Java Web Start (JWS) 徹底改變了這一切——它讓功能完整的 Java 應用程式能直接從瀏覽器啟動,自動處理下載、快取、更新與安全沙箱,實現真正的「一次開發,隨處執行,永遠保持最新」。
JWS 的運作核心在於 JNLP (Java Network Launching Protocol) 協定。當使用者點擊網頁上的啟動連結時,瀏覽器會下載一個 `.jnlp` XML 描述檔,該檔案包含應用程式的資源位置、主類別名稱、所需 JRE 版本、權限需求等中繼資料。JWS 讀取此檔案後,會自動:
這套機制由 Sun 於 2001 年隨 Java 1.0 首次引入,自 J2SE 1.4 起已整合進 JRE 預設安裝,無需額外部署。
將既有 Java 應用程式部署至 JWS,核心變更在於資源管理:
Class.getResource() 存取,不可使用檔案系統路徑。public static void main(String[] args) 簽名。<security><all-permissions/></security>。<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="https://example.com/myapp">
<information>
<title>企業報表系統</title>
<vendor>Acme Corp</vendor>
<icon href="logo.png"/>
<offline-allowed/>
</information>
<resources>
<j2se version="1.8+"/>
<jar href="app-core.jar"/>
<jar href="lib/report-engine.jar"/>
</resources>
<application-desc main-class="com.acme.ReportApp"/>
<security><all-permissions/></security>
</jnlp>
<offline-allowed/> 後,使用者可在無網路環境下啟動已快取應用。<extension> 引用共用元件(如 JDBC 驅動、通用工具庫),避免重複下載,實現模組化部署。JWS 建立在 Java 2 安全架構之上,Java 6 強化了代碼簽章驗證:
雖然現代瀏覽器已淘汰 ActiveX/VBScript,但企業內部舊系統仍可能需偵測 JWS 安裝狀態。歷史參考代碼(僅適用 IE):
<script language="VBScript">
On Error Resume Next
javawsInstalled = IsObject(CreateObject("JavaWebStart.isInstalled"))
javaws142Installed = IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))
javaws150Installed = IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))
</script>
現代建議:改用 JavaScript 檢查 navigator.mimeTypes["application/x-java-jnlp-file"] 或直接提供直接下載連結作為備案。
| 優勢 | 限制 |
|---|---|
| 零安裝、自動更新、跨平台 | 無法像 Applet 嵌入網頁互動 |
| 解決 Java Plugin 版本衝突 | 需簽名憑證成本(完整權限時) |
| 離線支援、資源快取機制 | 瀏覽器對 JNLP MIME 支援度不一 |
對於需頻繁更新、跨平台部署的企業內部工具、客戶端管理主控台、報表系統,JWS 仍是極具價值的選擇。若面向公共網路一般用戶,建議評估現代替代方案(如 Electron、PWA、GraalVM Native Image)。