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

Struts1 運行原理與整合步驟完整指南

     編輯:Java 綜合教學

Struts1 運行原理與整合步驟完整指南

Struts1 作為早期經典 MVC 框架,雖已退出歷史舞台,但其「中央控制器 + ActionForm + Action + ActionForward」架構思想深刻影響後續框架設計。本文系統梳理其運行流程與整合配置要點。

一、 Struts1 核心運行流程(8 步走)

  1. 項目初始化:Web 容器啟動,加載 web.xml,ActionServlet(中央控制器)作為 load-on-startup Servlet 啟動,讀取 struts-config.xml 初始化各模塊對象
  2. 用戶發送請求:所有 *.do 請求被 ActionServlet 攔截
  3. 請求參數封裝:控制器根據配置將表單數據自動填充到對應 ActionForm 實例
  4. 請求分發:根據 ActionMapping 找到目標 Action,將 ActionForm 傳入 execute()
  5. 業務處理:Action.execute() 執行業務邏輯(調用 Service/DAO),返回 ActionForward
  6. 返回響應標識:ActionForward 封裝跳轉邏輯名(如 "success")
  7. 查找目標資源:控制器根據 ActionForward 在配置中找到對應 JSP 路徑
  8. 響應用戶:轉發至目標 JSP 渲染輸出

二、 核心組件職責

組件角色關鍵點
ActionServlet中央控制器單例,生命週期贯穿應用,線程不安全需注意
ActionForm表單數據載體按 name 匹配自動填充,需提供無參構造器 + getter/setter
Action業務處理器每個請求對應一個 execute(),返回 ActionForward
ActionForward跳轉標識邏輯名映射物理路徑,支援重定向/轉發
struts-config.xml核心配置定義 FormBean、ActionMapping、Forward、DataSource 等

三、 整合步驟(以 Struts 1.3 為例)

1. 導入 JAR 包

核心:struts-core.jar、struts-taglib.jar、commons-beanutils.jar、commons-chain.jar、commons-digester.jar、commons-logging.jar、commons-validator.jar、oro.jar

2. 配置 web.xml

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

3. 配置 struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
  "https://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
  <form-beans>
    <form-bean name="welcomeForm" type="com.example.form.WelcomeForm"/>
  </form-beans>

  <action-mappings>
    <action path="/welcome"
            type="com.example.action.WelcomeAction"
            name="welcomeForm"
            scope="request"
            validate="true"
            input="/welcome.jsp">
      <forward name="success" path="/WEB-INF/page/welcome.jsp"/>
    </action>
  </action-mappings>

  <message-resources parameter="com.example.resources.ApplicationResources"/>
</struts-config>

4. 編寫 ActionForm

public class WelcomeForm extends ActionForm {
    private String username;
    // getter/setter 省略
    @Override
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        username = ""; // 重置表單
    }
    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (username == null || username.trim().isEmpty()) {
            errors.add("username", new ActionMessage("error.username.required"));
        }
        return errors;
    }
}

5. 編寫 Action

public class WelcomeAction extends Action {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        WelcomeForm wf = (WelcomeForm) form;
        request.setAttribute("username", wf.getUsername());
        return mapping.findForward("success");
    }
}

6. 編寫 JSP 頁面

<%@ taglib uri="https://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="https://struts.apache.org/tags-html" prefix="html" %>
<html:form action="/welcome">
  <html:text property="username"/>
  <html:errors property="username"/>
  <html:submit/>
</html:form>

<!-- welcome.jsp -->
歡迎您,<bean:write name="username"/>!

7. 測試訪問

URL:https://localhost:8080/項目名/welcome.do → 跳轉顯示歡迎頁

四、 Struts1 核心參數傳遞總結

execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)

  • mapping:封裝配置信息,提供 findForward()
  • form:已填充數據的 ActionForm
  • request/response:原生 Servlet API

五、 歷史定位與遷移建議

  • Struts1 採用 ActionForm 強綁定、Action 非線程安全、配置繁瑣等缺點
  • Struts2/Spring MVC 通過攔截器、註解、POJO Action 徹底解決上述問題
  • 維護老項目時理解其流程有助於平滑遷移
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved