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

發揮 Java 客戶端潛力:Applet、JavaScript、Weblet 與 Servlet 協同架構

     編輯:Java 相關知識

前言

Java 平台技術演進路徑與初衷大相逕庭:最初設計為客戶端 Applet 增添網頁互動,現今主戰場轉向伺服器端 J2EE。但隨著頻寬與客戶端算力提升,結合新舊技術的混合架構重新喚醒客戶端 Java 潛力。本文系統解析 Applet 困境、JavaScript 整合、Weblet 新技術與 Servlet 協同模式,構建高互動、低延遲的豐富客戶端體驗。

Applet 為何失勢?

阻礙因素說明
企業防火牆封鎖 Applet 類別檔案傳輸 (非標準 HTTP 端口/協定)
JVM 相容性瀏覽器內建 JVM 版本老舊、不完整、廠商實作差異大
安全沙箱限制無法存取本地檔案、印表機、系統資源,功能嚴重受限
下載體積大完整 UI 類別庫下載耗時,使用者等待體驗差
跨平台 UI 重造列印、檔案管理等需各平台重寫,開發成本高

破局關鍵:Applet + JavaScript 混合架構 (LiveConnect)

技術基石

  • LiveConnect (Netscape 標準):JavaScript 呼叫 Applet public 方法
  • netscape.javascript.JSObject:Applet 呼叫 JavaScript 函數、操作 DOM

協同優勢

  1. 職責分離:Applet 處理商務邏輯/加密/資料處理,JavaScript 負責 UI 呈現/互動
  2. 減少伺服器往返:客戶端預處理/驗證/加密,降低伺服器負載與延遲
  3. 繞過沙箱:透過 JavaScript 存取 DOM/列印/剪貼簿等 Applet 受限功能
  4. 非阻塞背景處理:Applet 執行緒處理伺服器通訊,UI 保持回應

實戰應用場景

場景Applet 職責JavaScript 職責
表單填寫即時查詢背景執行緒查詢資料庫地址/電話UI 回應、填入隱藏欄位
非 SSL 加密傳輸PKI 加密通訊內容觸發加密、送出表單
數位簽章DSA 簽署請求內容呈現簽章狀態、提交
行事曆同步提交變更、更新本地快取即時更新顯示、衝突解決 UI
動態列印產生列印資料流呼叫瀏覽器列印功能

程式碼範例:電話號碼驗證與格式化

// JavaScript 頁面
function validatePhone() {
    var phone = document.forms[0].phone.value;
    var formatted = document.myApplet.formatPhone(phone);  // 呼叫 Applet
    document.forms[0].hiddenPhone.value = formatted;
}

// Applet 類別
public class PhoneApplet extends Applet {
    public String formatPhone(String raw) {
        // 背景執行緒連線 Servlet 驗證格式化
        new Thread(() -> {
            String stdFormat = connectToServlet(raw);
            JSObject win = JSObject.getWindow(this);
            win.eval("setFormattedPhone('" + stdFormat + "')");  // 回呼 JS
        }).start();
        return "pending...";  // 即時回傳
    }
}

伺服器端資源下沉:Servlet 協同模式

架構原則

  • 高安全/核心資料 (信用卡、認證) 留在伺服器
  • 驗證邏輯、格式轉換、費用計算 下沉至客戶端 Applet
  • Servlet 回傳任意序列化物件,不限 HTML/XML

Servlet 回傳 Java 物件範例

public class ShippingServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) 
            throws IOException {
        String zip = req.getParameter("zip");
        ShippingCost cost = calculateShipping(zip);  // 業務邏輯
        
        res.setContentType("application/x-java-serialized-object");
        ObjectOutputStream out = new ObjectOutputStream(res.getOutputStream());
        out.writeObject(cost);  // 直接回傳 Java 物件圖
        out.flush();
    }
}

客戶端 ObjectInputStream 反序列化即得完整物件,無需解析 XML/JSON。

客戶端分工效益

  • 資料壓縮/分包上傳 → 可靠度提升
  • 多格式轉 XML 統一格式 → 伺服器解析簡化
  • 結帳頁即時試算運費/稅金 → 使用者決策輔助、減少結帳步驟
  • 背景執行緒通訊 → 感知延遲近乎零

新世代技術:Weblet (DirectDOM)

核心特性

  • 無 UI 元件,直接操作瀏覽器 DOM Tree (W3C DOM Level 2)
  • 取代複雜 JavaScript DOM 操作代碼
  • IBM alphaWorks DirectDOM 為參考實作 (Alpha 階段)
  • 需 IE 或 Mozilla (M18+) 最新版支援

應用願景

  1. 單頁結帳流程:Weblet 管理多步驟表單切換、背景同步,最後一次性提交
  2. 敏感資料保護:列印/儲存時 Weblet 清空頁面敏感欄位
  3. 報表漸進載入:摘要即時顯示,Weblet 背景下載明細,點擊即時展開
  4. 動態表單切換:單一 HTML 頁面內嵌 Weblet 切換多個表單視圖

Weblet 程式碼結構範例

<html>
<applet code="FormSwitcher.class" width="0" height="0">
    <param name="forms" value="form1,form2">
</applet>
<form id="form1">...</form>
<form id="form2" style="display:none">...</form>
</html>

// Weblet 類別
public class FormSwitcher extends Applet {
    public void switchForm(String formId) {
        JSObject doc = JSObject.getWindow(this).getMember("document");
        JSObject forms = (JSObject) doc.getMember("forms");
        // 直接操作 DOM 顯示/隱藏表單
    }
}

為何堅持客戶端 Java?

  1. 伺服器擴展成本高:單機無法支撐大量複雜運算,分散式架構 (n-tier) 需將運算下沉
  2. 減少網路往返:客戶端預處理降低回合數 (Round-trip)
  3. 提升互動層次:即時回應、離線操作、背景同步
  4. 實現伺服器難辦之事:Token-based 數位簽章、本地硬體存取、離線快取
  5. 統一平台優勢:J2EE 伺服器 + 客戶端 Java = 端到端 Java 體系

總結

Applet 雖非主流,但結合 JavaScript (LiveConnect)、Servlet 物件序列化傳輸、Weblet DOM 操作等新舊技術,能構建「薄伺服器、厚客戶端、高互動、低延遲」的現代化架構。關鍵在於:正確分工——安全核心留伺服器,展現邏輯下客戶端,非同步通訊隱藏延遲。這正是發揮 Java 平台完整價值的關鍵路徑。

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