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

Flash Remoting 整合 Java Servlet:JRun 4 環境下的遠端服務呼叫實戰

     編輯:Java 相關知識

Flash Remoting 讓 Flash/Flex 客戶端透過 AMF 協議直接呼叫伺服端 Java 服務(Servlet、POJO、EJB),實現富客戶端與商業邏輯的無縫整合。本文以 JRun 4 應用伺服器為環境,示範從 Servlet 部署、Gateway 設定到 Flash ActionScript 2.0 呼叫的完整流程。

一、環境與版本資訊

二、JRun 4 部署配置步驟

2.1 註冊 Servlet:web.xml

編輯 C:\jrun4\servers\default\default-ear\default-war\WEB-INF\web.xml,在 <web-app> 內新增:

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <display-name>MyServlet</display-name>
  <description>This is a servlet of H2O</description>
  <servlet-class>MyServlet</servlet-class>
</servlet>

2.2 部署 Servlet 類別檔

將編譯後的 MyServlet.class 放置於 WEB-INF/classes/ 目錄。

2.3 Servlet 實作:MyServlet.java

import javax.servlet.*;
import java.io.IOException;

public class MyServlet implements Servlet {
    private String message = null;

    public void init(ServletConfig config) throws ServletException {
        message = "Hello from MyServlet";
    }

    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        // 關鍵:將回傳值放入 FLASH.RESULT 屬性,Flash Remoting 會自動序列化回傳
        request.setAttribute("FLASH.RESULT", message);
    }

    public String getServletInfo() { return "A test servlet."; }
    public ServletConfig getServletConfig() { return null; }
    public void destroy() { message = null; }
}

三、Flash MX 2004 ActionScript 2.0 呼叫端

import mx.remoting.NetServices;
import mx.remoting.Connection;

NetServices.setDefaultGatewayUrl("https://localhost:8100/flashservices/gateway");
var gatewayConnection = NetServices.createGatewayConnection();

// 服務名稱對應 Servlet 名稱 (MyServlet),第二參數為回應處理物件 (this)
var flashTestService = gatewayConnection.getService("MyServlet", this);

// 呼叫遠端服務 (對應 Servlet.service() 方法)
flashTestService.MyServlet();

// 回呼函數:方法名_Result 對應遠端方法名
function MyServlet_Result(result) {
    var users = result;
    trace(users);  // 輸出: Hello from MyServlet
}

四、核心機制解析

元件版本/規格
應用伺服器JRun 4 (內建 default server)
Flash RemotingComponents AS 2.0
開發工具Flash MX 2004 Professional
Gateway URLhttps://localhost:8100/flashservices/gateway

五、常見問題與除錯

環節說明
GatewayJRun 內建 Flash Remoting Gateway,接收 AMF 請求、路由至對應服務、序列化回傳
服務對應getService("MyServlet", this) 中的服務名稱對應 web.xml 的 <servlet-name>
方法映射Flash 呼叫 flashTestService.MyServlet() → Gateway 呼叫 Servlet service() 方法
回傳值傳遞Servlet 在 request.setAttribute("FLASH.RESULT", value) 設定回傳值,Gateway 自動偵測並序列化為 AMF 回傳
回呼命名慣例遠端方法名_Result(result) 自動對應非同步回應處理
現象可能原因解決方向
Connection failed / Gateway 不可達JRun 未啟動、Port 8100 被佔用、防火牆阻擋檢查 JRun 服務、netstat -an | findstr 8100、防火牆例外
Service not found: MyServletweb.xml 未註冊、Servlet 類別名稱錯誤、部署路徑錯誤驗證 web.xml、確認 MyServlet.class 在 WEB-INF/classes
呼叫無回應 / trace 無輸出Servlet 未設定 FLASH.RESULT、拋出未捕獲異常檢查 service() 實作、JRun 日誌、Flash 輸出面板
中文亂碼AMF 編碼與 Servlet 回傳編碼不一致確保 Servlet 回傳 UTF-8、Flash 系統編碼設定

六、擴展:從 Servlet 遷移至 POJO / CFC / EJB

Flash Remoting 支援多種伺服端服務類型,部署方式略有不同:

  • POJO:將類別放入 WEB-INF/classes/ 或 WEB-INF/lib/,Gateway 自動偵測公開方法
  • CFC (ColdFusion Component):放置於 ColdFusion 應用目錄
  • EJB:需配置 JNDI 查找、Home/Remote 介面
  • Spring Bean:整合 Spring-Flex / BlazeDS 專案

七、歷史背景與現代替代方案

本文技術基於 Flash Player 7/8 時代 (2004-2006),ActionScript 2.0、JRun 4、Macromedia Flash Remoting。現代替代方案:

  • BlazeDS / GraniteDS:開源 AMF 實作,整合 Spring、Java EE
  • Adobe LiveCycle Data Services:商業版支援 RTMP、資料管理服務
  • REST/JSON + HTTP:通用標準,取代 AMF 成為主流
  • WebSocket / Server-Sent Events:即時雙向通訊
  • GraphQL:靈活查詢、單一端點

八、結語

Flash Remoting 在 RIA 發展歷史上佔有重要地位,實現了 Flash 客戶端與 Java 後端的高效二進位通訊。雖然 Flash 生態已隨 Adobe 終止支援而退出歷史舞台,但其「Gateway 路由 + 自動序列化 + 非同步回呼」的架構模式,深深影響了後續的 BlazeDS、Spring Flex、甚至現代 GraphQL Gateway 的設計哲學。理解此經典整合模式,有助於掌握富客戶端與後端服務解耦的核心思想。

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