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

ActionHandler WEB 應用編程技術手冊:架構、API 與實戰指南

     編輯:Java 程式設計入門

什麼是 ActionHandler

ActionHandler 是一個輕量級的 Web 應用編程框架,旨在簡化 Servlet/JSP 開發中「請求分發、參數綁定、業務調用、視圖轉發」的樣板代碼。它不依賴重型容器,可直接部署在任何 Servlet 2.3+ 容器(Tomcat、JBoss、WebLogic 等)中。

核心架構

Client Request
    ↓
GeneralHandleSvt (核心 Servlet,單例)
    ↓
解析 action 參數 → 查找 ActionHandler 實現類
    ↓
ActionHandler.execute(request, response)  ← 開發者實現業務邏輯
    ↓
返回 Forward / Redirect / Stream 結果
    ↓
GeneralHandleSvt 執行轉發/重定向/流輸出
    ↓
Client Response

關鍵組件

組件職責配置方式
GeneralHandleSvt 統一入口,生命週期管理、異常捕獲、編碼過濾、Session 檢查 web.xml 映射 *.do 或 /handler/*
ActionHandler (接口) 定義 execute(HttpServletRequest, HttpServletResponse) : ActionResult 開發者實現,配置於 actionhandler.xml
ActionResult 封裝轉發路徑、重定向 URL、二進制流、JSON 等輸出類型 框架內置類型:ForwardResult、RedirectResult、StreamResult、JsonResult
ActionHandlerFactory 單例工廠,緩存 Handler 實例,支持熱加載 啟動時掃描 actionhandler.xml

配置文件示例 (actionhandler.xml)

<?xml version="1.0" encoding="UTF-8"?>
<action-handlers>
    <handler name="userLogin" class="com.example.handler.UserLoginHandler"/>
    <handler name="userList" class="com.example.handler.UserListHandler">
        <property name="pageSize" value="20"/>
    </handler>
    <handler name="fileDownload" class="com.example.handler.FileDownloadHandler"/>
</action-handlers>

開發者實現範例

public class UserLoginHandler implements ActionHandler {
    @Override
    public ActionResult execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        
        User user = userService.authenticate(username, password);
        if (user != null) {
            req.getSession().setAttribute("currentUser", user);
            return new ForwardResult("/main.jsp");
        } else {
            req.setAttribute("error", "Invalid credentials");
            return new ForwardResult("/login.jsp");
        }
    }
}

API 參考速查

ActionHandler 接口

public interface ActionHandler {
    ActionResult execute(HttpServletRequest request, HttpServletResponse response) 
        throws Exception;
}

GeneralHandleSvt 關鍵方法

方法說明
init(ServletConfig)載入 actionhandler.xml,初始化工廠,註冊全局過濾器
service(req, resp)核心分發邏輯:提取 action 名 → 工廠獲取 Handler → 執行 → 處理 Result
destroy()釋放工廠資源,關閉數據源連接池等
getHandler(String actionName)從工廠獲取 Handler 實例,支持別名映射

ActionResult 子類

  • ForwardResult(String path):RequestDispatcher.forward
  • RedirectResult(String url):response.sendRedirect
  • StreamResult(InputStream, String contentType, String fileName):文件下載
  • JsonResult(Object data):自動序列化為 JSON(內置 JSON-lib/Gson)
  • NullResult():Handler 已自行完成響應(如直接寫 OutputStream)

進階特性

  1. 攔截器鏈:在 actionhandler.xml 定義 <interceptor>,支持 Pre/Post 處理(登錄檢查、事務邊界、日誌、權限)。
  2. 參數自動綁定:框架內置簡易綁定器,按名稱匹配請求參數到 Handler 的 setter / 字段(可選)。
  3. 異常統一處理:配置 <exception-mapping> 將異常類型映射到錯誤頁/JSON 錯誤碼。
  4. 國際化支持:基於 ResourceBundle,ActionHandler 基類提供 getMessage(key, args...) 便捷方法。

部署清單

  1. 將 actionhandler.jar、依賴包放入 WEB-INF/lib。
  2. web.xml 註冊 GeneralHandleSvt,映射 *.do。
  3. 編寫 actionhandler.xml 放入 WEB-INF/classes。
  4. 實現業務 ActionHandler 類,編譯部署。
  5. 啟動容器,訪問 https://host:port/app/userLogin.do 驗證。

總結

ActionHandler 以「單 Servlet 入口 + 配置驅動 + 接口編程」三板斧,為中小型 Web 專案提供了比 Struts 1.x 更輕量、比裸 Servlet 更結構化的開發體驗。其核心優勢在於零侵入業務代碼、學習曲線平緩、易於單元測試(Mock Request/Response 即可)。對於存量維護專案,可作為 Struts 遷移 Spring MVC 的過渡層;對於新專案,建議直接採用 Spring Boot + WebFlux/MVC 獲得生態紅利。

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