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

Flex 專案整合 SSH (Struts2+Spring+Hibernate) 實戰問題紀錄

     編輯:J2EE

背景

現有 SSH 專案需重用完整 Flex 專案 (透過 BlazeDS 與 Java 端通訊,服務由 Spring/SpringMVC 管理)。整合原理即將 Flex 編譯產出的 SWF/HTML/CSS 放入 Web 專案,並合併 Java 類別與 Spring 配置,但 BlazeDS 通道配置極易出錯。

整合步驟與現象

  1. 將 Flex 輸出檔案 (SWF, HTML, CSS) 複製至 SSH 專案 Web 目錄。
  2. 將 Flex 專案的 Java 服務類別、Spring 配置檔 (services-config.xml, remoting-config.xml) 合併至 SSH 對應位置。
  3. 修改 web.xml 註冊 MessageBrokerServlet 及相關 Listener。

遇到的三大問題現象

問題 1:通道配置未更新導致 "Send failed"

Flex 編譯時 .flexProperties 仍保留舊專案名:

serverContextRoot="/FlexProject"
serverRootURL="https://localhost:8080/FlexProject"

直接使用舊 SWF 整合,前端提示 Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed,控制台無輸出。原因:SWF 內嵌的端點 URL 指向舊 Context Root,找不到 BlazeDS 端點。

問題 2:配置檔放置位置與 web.xml 註冊順序影響 Session 監聽

更新 .flexProperties 為新專案名後,依配置檔放置位置不同出現兩種現象:

情況 A:配置檔放在 WEB-INF/flex/,web.xml 註冊 MessageBrokerServlet

  • 首次登入:Flex 端提示 FaultEvent faultCode="Server.Processing" faultString="No destination defined for service...",控制台噴 HttpFlexSession has not been registered as a listener in web.xml...。
  • 第二次登入:提示 Channel.Disconnected。

情況 B:配置檔放在 WEB-INF/ 根目錄,web.xml 同樣配置

  • 現象同情況 A,Session 監聽未註冊、Destination 未找到。

核心問題分析

  1. 通道端點 URL 不匹配:Flex 編譯時嵌入的 channelSet 需與部署後的實際 Context Root 一致。解決:重新編譯 Flex 專案,或執行階段動態設定 ChannelSet。
  2. HttpFlexSession Listener 缺失:web.xml 必須註冊 flex.messaging.HttpFlexSession 為 <listener>,否則 Flex Session 生命週期事件無法傳遞,導致 BlazeDS 無法正確綁定用戶 Session。
  3. Destination 定義未被載入:services-config.xml 中的 channels 定義與 remoting-config.xml 的 destination 需正確掛載,且 Spring 掃描路徑需包含服務 Bean。

後續追蹤方向

  • 驗證 web.xml 中 HttpFlexSession Listener 註冊順序 (需在 MessageBrokerServlet 之前)。
  • 檢查 Spring 配置中 MessageBrokerFactoryBean 是否正確載入 BlazeDS 設定檔。
  • 考慮使用 ChannelSet.login() 程式化登入替代表單提交,避免 Session 同步問題。

Flex+Java 整合看似簡單,實則涉及編譯期端點綁定、執行期 Session 管理、Spring 容器啟動順序等多重細節,需系統性排查。

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