Struts 1.x 作為經典 MVC 框架,雖已退出歷史舞台,但其設計思想 (Front Controller、ActionForm、Action、struts-config.xml) 深刻影響後世框架。本文以用戶註冊為例,完整演示 Struts 1.x 開發流程、核心配置解析、優缺點評析與實施經驗。
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
用戶註冊
登錄名:
密碼:
Email:
package org.cjea.struts.example;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
public class RegUserForm extends ActionForm {
private String logname;
private String password;
private String email;
// Getter/Setter
public String getLogname() { return logname; }
public void setLogname(String logname) { this.logname = logname; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
// 重置 (可選)
public void reset(ActionMapping mapping, HttpServletRequest request) {
logname = password = email = null;
}
// 校驗 (可選,配合 Validator)
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (logname == null || logname.trim().isEmpty()) {
errors.add("logname", new ActionMessage("error.logname.required"));
}
return errors;
}
}
package org.cjea.struts.example;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class RegUserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegUserForm userForm = (RegUserForm) form;
String logname = userForm.getLogname();
String password = userForm.getPassword();
String email = userForm.getEmail();
// 業務邏輯 (應委派給 Service)
boolean success = userService.register(logname, password, email);
return mapping.findForward(success ? "success" : "failure");
}
}
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/struts-config.xml
1
action
*.do
| 傳統 Servlet | Struts 拆分 |
|---|---|
| 單一 Servlet 處理導航、參數獲取、業務邏輯 | ActionServlet (導航) + FormBean (參數封裝) + Action (業務控制) |
| 硬編碼轉發/重定向 | struts-config.xml 聲明式導航 |
| 手工 request.getParameter() | ActionForm 自動填充、類型轉換、校驗 |
Struts 1.x 確立了 Java Web MVC 標準化範式:Front Controller + 聲明式導航 + 表單封裝校驗 + 標籤庫。雖技術棧老舊,但其架構思想在 Spring MVC、Struts 2、JSF、甚至前端路由中延續。理解 Struts 1.x 有助於掌握 MVC 本質、框架演進脈絡、遺留系統維護與遷移決策。