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

下一代 Java Applet 插件技術深度解析:JNLP 整合、架構重設計與 NASA World Wind 實戰案例

     編輯:Java 相關知識

Java SE 6 Update 10 引入的下一代 Java Plug-in 技術,徹底重寫 Applet 執行架構,引入 JNLP (Java Network Launching Protocol) 原生支援,解決舊版 Applet 可靠性差、啟動慢、JS 互操作弱等痛點。本文深度解析新架構、關鍵參數、兼容策略,並以 NASA World Wind Applet 為例展示企業級 3D 地球可視化應用部署實戰。

架構重設計:獨立 JVM 進程模型

新 Applet 架構:瀏覽器內 headless JVM 管理多個客戶端 JVM

  • 瀏覽器進程:載入輕量級 headless JVM,僅負責生命週期管理、JS 橋接、參數傳遞。
  • 客戶端 JVM:獨立進程運行 Applet 實例,預設單一 JVM 承載多個 Applet(同一代碼庫),可配置 separate_jvm=true 獨立隔離。
  • 通訊機制:進程間通訊 (IPC) 替代舊版進程內調用,崩潰隔離性大幅提升。

JNLP 原生支援:Applet 與 Web Start 統一

新插件直接解析 JNLP 文件啟動 Applet,複用 Java Web Start 成熟生態:

<applet width="500" height="500">
    <param name="jnlp_href" value="my_applet.jnlp"/>
</applet>

JNLP 關鍵優勢

  • 資源管理:<resources> 聲明 JAR、原生庫、屬性、JRE 版本、OS/架構過濾。
  • 擴展機制:<extension> 引用共享庫(如 JOGL、World Wind),多 Applet 共享下載、緩存、版本管理。
  • 離線/更新策略:<update check="background"/> 後台檢查更新,啟動即用緩存版本。
  • 安全沙箱:簽名 Applet 可申請全部權限,未簽名受沙箱限制,與 Web Start 一致。
  • 參數傳遞:<param> 合併 HTML <param>,HTML 同名參數優先(除 java_arguments/java_version)。

關鍵運行參數全解析

參數作用示例
jnlp_href指定 JNLP 描述符 URL,啟用新架構my_app.jnlp
java_argumentsJVM 啟動參數(堆大小、GC、系統屬性)-Xmx256m -Dsun.java2d.noddraw=true
java_version請求特定 JRE 版本(JNLP 中 <j2se version="1.7+"> 同效)1.6.0_10+
separate_jvmtrue=獨立 JVM 隔離,false=共享 JVM(預設)true
image載入中顯示的圖片(支援動畫 GIF)loading.gif
boxborderfalse=隱藏載入區域 1px 邊框,避免閃爍false
centerimagetrue=載入圖片居中顯示true

堆內存與 2D 加速實例

<applet archive="app.jar" code="Main" width="300" height="300">
    <param name="java_arguments" value="-Xmx256m -Dsun.java2d.noddraw=true"/>
</applet>

-Dsun.java2d.noddraw=true 禁用 DirectDraw,解決 Windows 上 OpenGL (JOGL) 與 Java 2D 驅動衝突,3D Applet 必加。

兼容策略:漸進增強部署

舊版 JRE 忽略 jnlp_href,使用傳統 archive/code 啟動;新插件忽略 archive/code,專用 JNLP。單一 HTML 同時支援新舊環境:

<applet id="wwjApplet" width="600" height="380"
    code="gov.nasa.worldwind.examples.applet.WWJApplet"
    archive="BackwardCompatibility.jar">
    <param name="jnlp_href" value="WWJApplet.jnlp"/>
</applet>

BackwardCompatibility.jar 內含極簡啟動類,僅提示用戶更新 JRE;新環境直接走 JNLP 載入完整應用。

實戰案例:NASA World Wind Java Applet

NASA World Wind Applet 嵌入網頁

JNLP 描述符關鍵片段

<jnlp href="WWJApplet.jnlp">
    <resources os="Windows">
        <property name="sun.java2d.noddraw" value="true"/>
    </resources>
    <resources>
        <j2se version="1.4+" href="https://java.sun.com/products/autodl/j2se"/>
        <jar href="worldwind.jar" main="true"/>
        <extension name="jogl" href="https://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp"/>
    </resources>
    <applet-desc name="WWJ Applet"
        main-class="gov.nasa.worldwind.examples.applet.WWJApplet"
        width="100" height="100"/> <!-- 寬高由 HTML 覆蓋 -->
</jnlp>
  • worldwind.jar 設為 main="true",理想情況應發佈為 JNLP 擴展 (<extension name="worldwind" href="..."/>),多應用共享下載。
  • JOGL 作為擴展引用,一行配置自動解決原生庫跨平台部署。
  • Windows 必須設定 -Dsun.java2d.noddraw=true 避免驅動衝突。

JavaScript 與 Applet 深度互操作

<a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a>

function gotoLocation(locStr) {
    var params = locStr.split(';');
    if (params.length == 3) {
        getWWJApplet().gotoLatLon(parseFloat(params[1]), parseFloat(params[2]));
    }
}

JS 調用 Applet 公開方法 gotoLatLon(lat, lon),Applet 在獨立執行緒執行動畫飛行,JS 立即返回不阻塞 UI。新插件 JS-Java 橋接效能顯著提升,支援基本類型、陣列、Java 物件自動轉換。

共享 World Wind 庫的最佳實踐

<extension name="worldwind" href="https://worldwind.arc.nasa.gov/java/0.4.1/webstart/worldwind.jnlp"/>
<extension name="jogl" href=".../jogl.jnlp"/>

主 JNLP 僅引用擴展,自有 MyWWJApplet extends WWJApplet {} 打包為獨立 JAR 設為 main="true",符合 JNLP 語義要求主類在主 JNLP 定義。

部署工具包:自動化 HTML 生成

Java SE 6u10 隨附 Deployment Toolkit (deployJava.js),自動檢測 JRE 版本、生成最佳 <applet>/<object> 標籤、提示安裝/更新,簡化跨瀏覽器部署:

<script src="https://java.com/js/deployJava.js"></script>
<script>
    deployJava.runApplet({
        jnlp: "WWJApplet.jnlp",
        width: "600", height: "380"
    }, { version: "1.6.0_10+" }, {});
</script>

總結

下一代 Java Plug-in 以 JNLP 為核心,實現 Applet 與 Web Start 統一分發模型,架構重設計帶來可靠性、效能、隔離性質變。雖然瀏覽器插件技術已隨 NPAPI 淘汰退出歷史舞台,但其設計思想(獨立進程、聲明式資源、沙箱安全、JS 深度互操作)深刻影響後續 Java Web 技術演進(JavaFX、JWebSocket、GraalVM 瀏覽器運行時等)。

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