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

Struts 2.1.6 實戰教程(二):使用註解實現用戶登錄模組

     編輯:Java 相關知識

用戶登錄幾乎是所有 Web 系統的核心模組。本教程將通過一個完整的登錄案例,詳細講解 Struts 2.1.6 如何利用約定優於配置的特性,結合註解來定義 Action 與 Result,實現零 XML 配置的開發模式。

專案包結構與約定掃描機制

在上一篇《Struts 2.1.6 實戰教程(一):環境搭建與 HelloSimple》中,我們將 Action 類放置於 cn.simple.action 套件下。Struts 2 的 Convention Plugin 預設會掃描包含 action、actions、struts、struts2 關鍵字的套件路徑。因此,只要將 Action 類置於如 cn.simple.action、cn.simple.struts 或 cn.simple.action.admin 等路徑下,即可無需在 struts.xml 中額外配置。詳細規則請參考官方文檔:Convention Plugin 文檔。

編寫登錄頁面

首先在 WEB-INF/content/ 目錄下建立 loginform.jsp。此處展示兩種寫法:原生 HTML 表單與 Struts 2 標籤庫版本。

原生 HTML 表單版本

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用戶登錄</title>
</head>
<body>
    <s:fielderror />
    <form action="login.action" method="post">
        賬號<input type="text" name="loginName" value="${loginName}" /><br/>
        密碼<input type="password" name="password" /><br/>
        <input type="submit" value="登錄" />
    </form>
</body>
</html>

Struts 2 標籤庫版本

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用戶登錄</title>
</head>
<body>
    <s:fielderror />
    <s:form action="login">
        <s:textfield name="loginName" label="賬號" />
        <s:password name="password" label="密碼" />
        <s:submit value="登錄" />
    </s:form>
</body>
</html>

實現登錄 Action 與註解配置

建立 cn.simple.action.LoginAction 類,使用 @Results 與 @Result 註解定義導航規則:

package cn.simple.action;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;

@Results({
    @Result(name = "success", location = "admin/index.action", type = "redirect"),
    @Result(name = "input", location = "loginform.jsp", type = "dispatcher")
})
public class LoginAction extends ActionSupport {

    private String loginName;
    private String password;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    @Override
    public void validate() {
        if (!"simple".equals(loginName)) {
            addFieldError("loginName", "登錄名不正確!");
        } else if (!"simple".equals(password)) {
            addFieldError("password", "密碼不正確!");
        }
    }

    // Getter / Setter 省略
    public String getLoginName() { return loginName; }
    public void setLoginName(String loginName) { this.loginName = loginName; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
}

核心流程解析

  1. 表單提交:請求送至 login.action,Convention Plugin 自動映射至 LoginAction。
  2. 驗證攔截:validate() 在 execute() 前執行,檢查帳號密碼是否為 "simple"。若失敗,addFieldError 將錯誤存入 Field 錯誤堆疊。
  3. 結果導向:
    • 驗證失敗:Field 堆疊有錯誤 → 直接返回 INPUT → dispatcher 轉發回 loginform.jsp,<s:fielderror> 顯示錯誤訊息。
    • 驗證通過:執行 execute() 返回 SUCCESS → redirect 重定向至 admin/index.action(後台首頁)。

目錄結構與運行效果

專案結構如下圖所示:

專案目錄結構

啟動 Tomcat 後訪問 https://localhost:8080/SimpleWeb/login.action:

  • 輸入錯誤帳號/密碼 → 頁面顯示對應錯誤提示
  • 輸入 simple / simple → 重定向至後台首頁顯示「登錄成功」

登錄失敗示例 登錄成功示例 後台首頁

提示:本教程為演示核心機制,頁面排版極簡。實際專案建議使用前端框架或可視化工具構建美觀界面,再嵌入動態標籤。

「Struts 2.1.6 實戰教程(二):使用註解實現用戶登錄模組」講解完畢,歡迎動手實作,敬請期待後續內容!

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