首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Web Start (JWS) 應用部署全流程指南

     編輯:Java 程式設計入門

什麼是 Java Web Start

Java Web Start (JWS) 是 JSR-56 規範的參考實現,旨在解決「富客戶端應用一鍵部署、自動更新、脫離瀏覽器獨立運行」的難題。JDK 1.4+ 已內置 JWS,無需額外安裝。

核心特性對比

特性JWSApplet傳統桌面安裝
部署方式點擊 .jnlp 鏈接,自動下載啟動網頁嵌入手動運行安裝包
緩存與更新本地緩存,啟動時檢查服務器版本,增量更新瀏覽器緩存,難控制需手動檢查/推送更新
JRE 隔離每應用獨立 JVM,可指定 JRE 版本共享瀏覽器 JVM需捆綁或依賴系統 JRE
安全模型簽名 JAR 授權訪問本地資源(I/O、網絡)沙箱嚴格受限完全信任
桌面集成生成桌面快捷方式/開始菜單,離線啟動無原生支持

第一個 JWS 應用:HelloJNLP

1. 編寫應用代碼

import javax.swing.*;
import java.awt.*;

public class HelloJNLP extends JFrame {
    public HelloJNLP() {
        super("Hello JNLP");
        String loadedFrom = this.getClass().getClassLoader().toString();
        JLabel label = new JLabel("Loaded by: " + loadedFrom);
        add(label);
        setSize(300, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new HelloJNLP().setVisible(true));
    }
}

2. 打包簽名

javac HelloJNLP.java
jar cvf HelloJNLP.jar HelloJNLP.class
# 生成密鑰庫
keytool -genkey -keystore mykeystore -alias mysigner
# 簽名
jarsigner -keystore mykeystore HelloJNLP.jar mysigner

3. 編寫 JNLP 描述文件

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://yourserver.com/apps/" href="HelloJNLP.jnlp">
    <information>
        <title>Hello JNLP Demo</title>
        <vendor>Your Company</vendor>
        <homepage href="https://yourserver.com"/>
        <description>First JWS Application</description>
        <icon href="icon.gif"/>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/> <!-- 需簽名 -->
    </security>
    <resources>
        <j2se version="1.8+" href="https://java.sun.com/products/autodl/j2se"/>
        <jar href="HelloJNLP.jar" main="true"/>
    </resources>
    <application-desc main-class="HelloJNLP"/>
</jnlp>

4. 服務器部署要點

  • Web 服務器需配置 MIME 類型:application/x-java-jnlp-file .jnlp
  • 所有 JAR、JNLP、圖標放在同一 codebase 目錄下。
  • HTTPS 部署時,證書必須被客戶端信任,否則安全警告阻攔啟動。

進階主題

資源緩存與懶加載

在 <resources> 中標記 download="lazy" 的 JAR 將在首次使用時下載,適合插件模塊、大型數據文件。

原生庫支持

<resources os="Windows" arch="x86_64">
    <nativelib href="native-windows-amd64.jar"/>
</resources>

應用程序參數傳遞

<application-desc main-class="com.example.Main">
    <argument>arg1</argument>
    <argument>arg2</argument>
</application-desc>

主類通過 String[] args 接收。

自動更新策略

  • <shortcut online="true"/>:有網時檢查更新。
  • <update check="background" policy="always"/>:後台靜默更新,下次啟動生效。
  • 版本號管理:JNLP href 建議包含版本(如 app-v1.2.jnlp),服務器端維護最新版本入口。

常見問題排查

  1. 無法啟動「Application Error」:檢查 Java 控制台(Control Panel → Java → Advanced → Show Console)輸出異常堆棧。
  2. 簽名驗證失敗:確認 JAR 簽名鏈完整、時間戳有效、證書未吊銷。
  3. JRE 版本不匹配:JNLP <j2se version="1.8*" 支持通配,客戶端無合適 JRE 會自動引導下載。
  4. 桌面快捷方式不生成:需在 JNLP <information> 中聲明 <shortcut>,且用戶首次啟動時確認授權。

總結

JWS 為 Java 富客戶端提供了「Web 化部署、桌面級體驗」的最佳平衡。雖然 Java 9 起模塊化系統帶來新挑戰,且 Oracle 計劃長期移除 JWS(推遷移至 jlink/jpackage 或 Web 技術),但在存量系統維護、內網桌面應用分發場景,JWS 依然是成熟可靠的選擇。掌握 JNLP 結構、簽名發布、緩存更新機制,能讓你從容應對遷移前的運維需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved