上文以 Servlet 迭代引出頁面跳轉控制難題,本文正式介紹 Struts 1 框架並通過完整登錄實例演示其核心組件協作流程。
Struts 1 是遵循 MVC 設計模式的開源 Web 框架,核心優勢:
組件交互圖:

作為開源專案,深入原始碼有助於理解框架設計哲學,提升工程能力。

<form action="login.do" method="post"> 用戶:<input type="text" name="username" /><br/> 密碼:<input type="text" name="password" /><br/> <input type="submit" value="提交"/> </form>
package com.tgb.struts1;
import org.apache.struts.action.ActionForm;
@SuppressWarnings("serial")
public class LoginActionForm extends ActionForm {
private String username;
private String password;
// getter/setter 省略
}
package com.tgb.struts1;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginActionForm laf = (LoginActionForm) form;
String username = laf.getUsername();
String password = laf.getPassword();
UserManager userManager = new UserManager();
try {
userManager.login(username, password);
} catch (UserNotFoundException e) {
request.setAttribute("msg", "用戶名未找到" + username);
} catch (PasswordWrongException e) {
request.setAttribute("msg", "密碼錯誤");
}
return mapping.findForward("success"); // 始終跳轉成功頁(示例簡化)
}
}
package com.tgb.struts1;
public class UserManager {
public void login(String username, String password) {
if (!"admin".equals(username)) throw new UserNotFoundException();
if (!"admin".equals(password)) throw new PasswordWrongException();
}
}
<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>
<init-param><param-name>debug</param-name><param-value>2</param-value></init-param>
<init-param><param-name>detail</param-name><param-value>2</param-value></init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "https://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.tgb.struts1.LoginActionForm" />
</form-beans>
<action-mappings>
<action path="/login" type="com.tgb.struts1.LoginAction" name="loginForm" scope="request">
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp" />
</action>
</action-mappings>
</struts-config>
輸入 admin/admin 顯示登錄成功:


login.doweb.xml 匹配 *.do → 轉交 ActionServletActionServlet 截取 URL /login,匹配 struts-config.xml 找到 LoginActionForm 與 LoginActionLoginActionFormLoginAction.execute(),獲取轉向 successActionServlet 執行跳轉至 login_success.jsp以上為宏觀流程,內部執行細節請見下篇《層層遞進Struts1(五)之處理流程》。