Java 平台技術演進路徑與初衷大相逕庭:最初設計為客戶端 Applet 增添網頁互動,現今主戰場轉向伺服器端 J2EE。但隨著頻寬與客戶端算力提升,結合新舊技術的混合架構重新喚醒客戶端 Java 潛力。本文系統解析 Applet 困境、JavaScript 整合、Weblet 新技術與 Servlet 協同模式,構建高互動、低延遲的豐富客戶端體驗。
| 阻礙因素 | 說明 |
|---|---|
| 企業防火牆 | 封鎖 Applet 類別檔案傳輸 (非標準 HTTP 端口/協定) |
| JVM 相容性 | 瀏覽器內建 JVM 版本老舊、不完整、廠商實作差異大 |
| 安全沙箱限制 | 無法存取本地檔案、印表機、系統資源,功能嚴重受限 |
| 下載體積大 | 完整 UI 類別庫下載耗時,使用者等待體驗差 |
| 跨平台 UI 重造 | 列印、檔案管理等需各平台重寫,開發成本高 |
netscape.javascript.JSObject:Applet 呼叫 JavaScript 函數、操作 DOM| 場景 | 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..."; // 即時回傳
}
}
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。
<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 顯示/隱藏表單
}
}
Applet 雖非主流,但結合 JavaScript (LiveConnect)、Servlet 物件序列化傳輸、Weblet DOM 操作等新舊技術,能構建「薄伺服器、厚客戶端、高互動、低延遲」的現代化架構。關鍵在於:正確分工——安全核心留伺服器,展現邏輯下客戶端,非同步通訊隱藏延遲。這正是發揮 Java 平台完整價值的關鍵路徑。