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

以 Flash Remoting 強化 J2EE 表示層:富客戶端架構新選擇

     編輯:Java 程式設計入門

動機:J2EE 表示層的兩難

  • JSP/HTML:部署輕鬆、跨瀏覽器,但互動體驗受限於 HTTP 請求-回應模型,複雜 UI 需大量 JavaScript/CSS Hack,跨瀏覽器相容性維護成本高。
  • Swing/Applet:豐富元件、客戶端運算分擔伺服器壓力,但需用戶安裝 JRE、下載 Applet、啟動緩慢,桌面部署門檻高。

Macromedia (後為 Adobe 併購) Flash Player 擁有 98%+ 瀏覽器滲透率、啟動近乎即時、原生支援向量圖形/動畫/影音,若能直接呼叫 J2EE 後端業務邏輯,將兼具「零安裝部署」與「豐富互動體驗」。Flash Remoting MX 正是為此而生。

Flash Remoting 架構原理


+----------------+      AMF over HTTP       +-------------------------+
|  Flash Client  | <---------------------> |  J2EE App Server        |
|  (ActionScript)|   NetServices/Gateway   |  (Servlet/JSP/EJB/POJO) |
+----------------+                         +-------------------------+
  • 閘道 Servlet:部署於 J2EE 伺服器 (flashgateway.war),接收 AMF 封包,反序列化為 Java 物件,呼叫目標服務,將回傳值序列化為 AMF 回應。
  • ActionScript NetServices:客戶端程式庫,負責建立連線、服務代理、非同步呼叫與回調處理。
  • AMF (Action Message Format):二進制序列化格式,比 XML/SOAP 體積小 60%~80%,解析速度快,原生支援類型對應 (Number↔int/double、String↔String、Array↔List、Object↔JavaBean/Map)。

客戶端整合範例 (ActionScript 2.0)


// 1. 載入 NetServices 庫 (編譯期包含)
#include "NetServices.as"

// 2. 設定閘道 URL (對應 web.xml servlet-mapping /gateway)
NetServices.setDefaultGatewayUrl("https://localhost:8080/myapp/gateway");

// 3. 建立閘道連線
var gatewayConn = NetServices.createGatewayConnection();

// 4. 取得遠端服務代理 (對應 Java 類別完整名稱)
var userService = gatewayConn.getService("com.example.service.UserService", this);

// 5. 非同步呼叫方法,指定回調函數
userService.getUserById(123);

// 6. 回調函數命名慣例:方法名 + "_Result"
function getUserById_Result(userVO) {
    trace("收到用戶: " + userVO.name + ", email: " + userVO.email);
    // 更新 UI 元件...
}

// 7. 錯誤回調 (可選)
function getUserById_Status(error) {
    trace("呼叫失敗: " + error.code + " - " + error.description);
}

伺服器端 Java 服務實作 (POJO)


package com.example.service;

public class UserService {
    public UserVO getUserById(int id) {
        // 呼叫 DAO/EJB/Spring Bean 取得資料
        UserDAO dao = new UserDAO();
        UserPO po = dao.findById(id);
        if (po == null) return null;
        // 轉換為傳輸物件 (VO) - 必須為 public 屬性或 getter/setter
        UserVO vo = new UserVO();
        vo.id = po.getId();
        vo.name = po.getName();
        vo.email = po.getEmail();
        return vo;
    }
}

// 傳輸物件 (Value Object) - 需實作 Serializable 或 public 欄位
package com.example.vo;
public class UserVO {
    public int id;
    public String name;
    public String email;
}

XML 資料綁定與客戶端圖表渲染範例

Flash 原生支援 XML 解析與 DOM 操作,適合圖表、報表等資料密集型視覺化。


// 伺服器端產生 XML 文件 (ActionScript 可直接解析)
public XML getSalesChartData() {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.newDocument();
    Element root = doc.createElement("chart");
    root.setAttribute("caption", "月銷售趨勢");
    root.setAttribute("xAxisName", "月份");
    root.setAttribute("yAxisName", "金額(萬)");
    String[] months = {"Jan","Feb","Mar","Apr","May","Jun"};
    int[] values = {42, 38, 55, 60, 48, 72};
    for (int i=0; i

// 客戶端解析 XML 並繪製圖表 (使用免費 ActionScript 圖表庫)
function getSalesChartData_Result(xmlDoc) {
    var nodes = xmlDoc.firstChild.childNodes; //  列表
    var categories = [], series = [];
    for (var i=0; i

優勢總結

現狀與替代方案 (歷史視角)

本文技術基於 Flash Remoting MX (約 2004-2006 年)。Adobe 於 2017 年宣布停止更新 Flash Player,2021 年完全停用。現代替代方案:

  • RIA 富客戶端:JavaFX (桌面)、Vaadin/GWT (編譯為 JS)、Angular/React/Vue + REST/GraphQL。
  • 二進制協議:Protocol Buffers、gRPC、Hessian、Kryo 取代 AMF。
  • 即時通訊:WebSocket、Server-Sent Events、WebRTC。

理解 Flash Remoting 的設計思想——「客戶端運算前移、二進制高效序列化、後端服務無縫暴露」——對設計現代微服務前端網關、BFF (Backend for Frontend) 架構仍具啟發意義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度Flash RemotingJSP/HTMLSwing/Applet
部署門檻極低 (Flash Player 普及)極低高 (需 JRE)
互動豐富度高 (向量圖形/動畫/影音)中 (受限 HTML/JS)高
客戶端運算分擔是 (XML解析/圖表渲染在客戶端)否 (伺服器端渲染)是
資料傳輸效率高 (AMF 二進制)低 (HTML/JSON)中 (RMI/序列化)
後端整合無縫 (POJO/EJB/Spring/JMS)原生原生
安全性JVM SecurityManager + HTTPS標準 Web 安全JVM SecurityManager