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

Struts2 驗證框架實戰:用戶註冊完整範例解析

     編輯:Java 相關知識

前言

Struts2 的驗證框架相較於 Struts1 更為簡潔易讀,充分發揮配置檔案的作用,實現了邏輯與驗證規則的解耦。本文將以一個完整的用戶註冊流程為例,逐步拆解 JSP 頁面、Action 處理、JavaBean 定義、驗證 XML 配置以及 Struts 核心配置檔案的編寫要點。

1. 註冊頁面 register.jsp

頁面使用 Struts2 標籤庫輸出表單欄位錯誤訊息,並建立用戶名、密碼、確認密碼、年齡、生日等輸入框。注意 <s:fielderror> 會自動顯示對應欄位的驗證錯誤。

<?xml:namespace prefix = s /><s:fielderror></s:fielderror>
<!-- 讀取顯示提示信息 -->
<TABLE>
  <TR><TD>用戶名:</TD><TD><s:textfield name="user.userName" /></TD></TR>
  <TR><TD>密碼:</TD><TD><s:password name="user.password" /></TD></TR>
  <TR><TD>確認密碼:</TD><TD><s:password name="user.rePassword" /></TD></TR>
  <TR><TD>年齡:</TD><TD><s:textfield name="user.age" /></TD></TR>
  <TR><TD>生日:</TD><TD><s:textfield name="user.birthday" /></TD></TR>
  <TR><TD colspan="2"><s:submit value="註冊" /></TD></TR>
</TABLE>

2. 歡迎頁面 welcome.jsp

註冊成功後導向此頁,透過 OGNL 表達式直接取得 Action 中 user 物件的屬性值。

congratulations! ${user.userName}

3. 處理註冊的 Action RegisterAction

繼承 ActionSupport 即可獲得驗證與國際化支援。在 execute() 中手動檢查兩次密碼是否一致,若不符則加入欄位錯誤並返回 input 結果,導回註冊頁顯示錯誤。

package org.kingtoon.action;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.kingtoon.bean.User;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

    private User user;

    @Override
    public String execute() throws Exception {
        if (!(user.getPassword().equals(user.getRePassword()))) {
            this.addFieldError("password", "請輸入相同的密碼");
            return INPUT;
        } else {
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("user", user);
            return SUCCESS;
        }
    }

    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
}

4. 用戶 JavaBean User.java

標準 POJO,包含驗證所需的所有屬性與 Getter/Setter。

package org.kingtoon.bean;

import java.util.Date;

public class User {
    private String userName;
    private String password;
    private String rePassword;
    private Integer age;
    private Date birthday;
    // 省略 Getter/Setter ...
}

5. 驗證配置文件 RegisterAction-validation.xml

檔案命名慣例:Action類名-validation.xml。使用 <field-validator> 針對各欄位定義規則:

  • requiredstring:必填且去除空白
  • stringlength:長度範圍
  • int:整數範圍
  • date:日期範圍
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
       "https://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <!-- 用戶名 -->
  <field name="user.userName">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>用戶名不能為空</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="minLength">2</param>
      <param name="maxLength">18</param>
      <message>用戶名長度應在2到18個字符間</message>
    </field-validator>
  </field>

  <!-- 密碼 -->
  <field name="user.password">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>密碼不能為空</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="minLength">6</param>
      <param name="maxLength">18</param>
      <message>密碼長度應在6到18個字符之間</message>
    </field-validator>
  </field>

  <!-- 年齡 -->
  <field name="user.age">
    <field-validator type="int">
      <param name="min">1</param>
      <param name="max">150</param>
      <message>年齡應在1到150之間</message>
    </field-validator>
  </field>

  <!-- 生日 -->
  <field name="user.birthday">
    <field-validator type="date">
      <param name="min">1900-01-01</param>
      <param name="max">2008-10-16</param>
      <message>出生日期應在1900-01-01到2008-10-16</message>
    </field-validator>
  </field>
</validators>

6. Struts 核心配置 struts.xml

定義套件、國際化資源、Action 與結果導向。

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
       "https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <constant name="struts.custom.i18n.resources" value="messageResource" />
  <package name="default" extends="struts-default">
    <action name="register" class="org.kingtoon.action.RegisterAction">
      <result name="success">/welcome.jsp</result>
      <result name="input">/register.jsp</result>
    </action>
  </package>
</struts>

7. Web 應用部署描述符 web.xml

配置 Struts2 核心 Filter 與啟動頁面。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
  <filter>
    <filter-name>struts-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  </filter>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts-cleanup</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>register.jsp</welcome-file>
  </welcome-file-list>
</web-app>

關鍵注意事項

  1. 驗證 XML 檔名必須遵循 Action類名-validation.xml 格式,框架才會自動載入。
  2. 驗證器的 type 必須與 JavaBean 中對應屬性的類型一致,否則會拋出型別轉換錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved