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

DWR 遠程調用錯誤處理最佳實踐:從全局攔截到精細異常捕獲

     編輯:Java 相關知識

DWR (Direct Web Remoting) 遠程方法調用異常處理分層策略:全局錯誤處理器、調用級錯誤回調、異常轉換配置,構建健壯的 Ajax 應用體驗。

基礎調用模式


// 簡單回調 (僅成功處理)
Remote.method(params, function(data) {
  alert("返回: " + data);
});

// 多參數時 callback 為最後一個參數
Remote.method(p0, p1, function(data) { ... });

生成的 JS 框架代碼:`Remote.method = function(p0, callback) { dwr.engine._execute(Remote._path, 'Remote', 'method', p0, callback); }`

三層錯誤處理架構

第 1 層:全局錯誤處理器 (應用級)


function globalErrorHandler(errorString, exception) {
  logErrorToServer(errorString, exception);
  showUserFriendlyMessage("系統暫時不可用,請稍後重試");
}
dwr.engine.setErrorHandler(globalErrorHandler);
  • 攔截所有無調用級處理器的異常
  • 適合統一日誌記錄、通用降級提示
  • 預設行為:`alert("Error")` 體驗極差

第 2 層:調用級錯誤回調 (業務級) — 推薦主力


Remote.method(params, {
  callback: function(data) {
    // 成功處理
    updateUI(data);
  },
  errorHandler: function(errorString, exception) {
    // 業務特定錯誤處理
    if (exception.javaClassName == 'java.sql.SQLException') {
      showError("資料庫繁忙,請稍後重試");
    } else {
      showError("操作失敗: " + errorString);
    }
  },
  // 可選擴展
  warningHandler: function(warn) { ... },
  textHtmlHandler: function(html) { ... }
});
  • 精確到單個業務操作的錯誤語境
  • `errorHandler` 同時捕獲伺服端拋出異常與 `callback` 內部 JS 錯誤
  • `exception` 物件包含 `javaClassName`、`message`、`stackTrace` 等屬性

第 3 層:伺服端異常轉換配置 (dwr.xml)


<convert match="java.lang.Exception" converter="exception"/>
<convert match="com.example.BusinessException" converter="exception" />
  • 啟用後 `errorHandler` 參數 `exception` 將包含完整異常鏈
  • 可針對特定業務異常類配置,避免洩露敏感堆疊資訊
  • 配合 Spring `@ExceptionHandler` 統一異常碼映射

異常處理決策矩陣

場景推薦層級處理策略
網路中斷、伺服器 500全局靜默重試、離線隊列、友好提示
業務驗證失敗 (如庫存不足)調用級高亮表單欄位、顯示具體錯誤碼
權限不足、Session 過期調用級 + 全局調用級導向登入、全局記錄審計日誌
未預期運行時異常全局記錄完整堆疊、發送告警、顯示通用錯誤頁

進階技巧

  • 批次調用錯誤隔離:`dwr.engine.beginBatch()` / `endBatch()` 合併請求,單個失敗不影響其他
  • 異常碼標準化:伺服端拋出 `DWRException("ERR_CODE", "用戶訊息")`,前端 `exception.javaClassName == 'org.directwebremoting.extend.DWRException'` 解析碼
  • TypeScript 類型定義:為 `errorHandler` 參數定義介面,編譯期捕獲處理遺漏

官方參考

DWR 錯誤處理完整文檔:https://directwebremoting.org/dwr/other/errors.html

「錯誤是系統的一部分」,分層處理讓異常成為改善體驗的契機而非崩潰導火索。

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