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

Struts1 入門實戰(二):從零構建登錄模塊完整流程

     編輯:Java 相關知識

上文以 Servlet 迭代引出頁面跳轉控制難題,本文正式介紹 Struts 1 框架並通過完整登錄實例演示其核心組件協作流程。

什麼是 Struts 1

Struts 1 是遵循 MVC 設計模式的開源 Web 框架,核心優勢:

  • 配置驅動:豐富的 XML 配置提升靈活性
  • 開發效率:封裝通用邏輯,縮短開發週期
  • 代碼簡潔:適度抽象減少冗餘,維護更輕鬆

組件交互圖:

Struts1 組件交互圖

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

登錄實例完整代碼

專案結構

專案文件樹

login.jsp - 視圖層

<form action="login.do" method="post">
  用戶:<input type="text" name="username" /><br/>
  密碼:<input type="text" name="password" /><br/>
  <input type="submit" value="提交"/>
</form>

LoginActionForm - 表單封裝

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 省略
}

LoginAction - 業務控制器

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"); // 始終跳轉成功頁(示例簡化)
    }
}

UserManager - 模擬業務邏輯層

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();
    }
}

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>
  <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>

struts-config.xml - 框架核心配置

<!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 顯示登錄成功:

登錄成功頁面

時序流程分析

登錄流程時序圖

  1. 用戶提交表單 → login.do
  2. Tomcat 依 web.xml 匹配 *.do → 轉交 ActionServlet
  3. ActionServlet 截取 URL /login,匹配 struts-config.xml 找到 LoginActionForm 與 LoginAction
  4. 表單數據自動填充至 LoginActionForm
  5. 執行 LoginAction.execute(),獲取轉向 success
  6. ActionServlet 執行跳轉至 login_success.jsp
  7. 渲染頁面回應用戶

以上為宏觀流程,內部執行細節請見下篇《層層遞進Struts1(五)之處理流程》。

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