IDEA 中用 Struts2 框架实现注册登录校验器

新建 Struts2 项目

new project —> Java Enterprise —> Struts2
在这里插入图片描述

新建好的项目目录如下:

在这里插入图片描述

然而我在运行时 Tomcat 报错说“one or more Filters failed to start ...”,往上检查错误 log 发现是少了一个 javassist-3.*.*-ga.jar 的 jar 包,所以添加了它:

在这里插入图片描述
这个jar包可以到我的GitHub上下载。

Struts2 校验器使用流程

  1. 在 src 下编写 action 类的代码,实现所要校验的属性的 get/set 方法
  2. src 下的 struts.xml 配置 action 类
  3. 在 web 下编写 jsp
  4. 在 action 类的同级目录下新建以 action类名-validation.xml 为名的校验器配置文件并配置校验器

一. 在 src 目录下新建 action 包和 bean 包,action 包用于编写 action 类处理 jsp 表单和校验器的请求,一般要继承 ActionSupport类,并重写execute()方法。bean 包主要是 Pojo(简单的 Java 对象)类,封装各个属性的 get/set 方法。

  1. bean 包中的 User.java 如下:
import java.util.Date;

public class User {
    String ID;
    String name;
    String sex;
    Date birth;
    String major;
    String grade;
    String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }
}
  1. action 包中的 ValidateAction.java 如下:
import com.opensymphony.xwork2.ActionSupport;
import org.easybooks.test.bean.User;

public class ValidateAction extends ActionSupport {
    private User stu;

    public User getStu() {
        return stu;
    }

    public void setStu(User stu) {
        this.stu = stu;
    }

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

二、src 下的 struts.xml 配置如下:

如果 jsp 文件是在 web 的子目录下,则需要设置好相对路径

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="default" extends="struts-default">
        <action name="validate" class="org.easybooks.test.action.ValidateAction">
            <!-- 校验成功 -->
            <result name="success">/structs2_week5/success.jsp</result>
            <!-- 校验失败后 -->
            <result name="input">/structs2_week5/validate.jsp</result>
        </action>
    </package>
</struts>

三、在 web 下编写 jsp

  • validate.jsp :
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2019/4/26
  Time: 10:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册校验器</title>
</head>
<body>
<div align="center">
    <!-- action 要填写在 struts.xml 中配置的 action-name -->
    <form action="validate.action" method="post">
        <table>
            <caption>注册校验器</caption>
            <tr>
                <td>学号:</td>
                <td><input type="text" name="stu.ID"/> </td>
                <td>
                    <!-- 使用 <S: fielderror fieldName="stu.ID"/> 输入相应的字段错误信息 -->
                    <h3 style="color:red"> <s:fielderror fieldName="stu.ID"/> </h3>
                </td>
            </tr>
            <tr>
                <td>姓名:</td>
                <td>
                    <input type="text" name="stu.name"/>
                </td>
                <td>
                    <s:fielderror fieldName="stu.name"/>
                </td>
            </tr>
            <tr>
                <td>性别:</td>
                <td>
                    <input type="radio" name="stu.sex"><input type="radio" name="stu.sex"></td>
                <td>
                    <s:fielderror fieldName="stu.sex"/>
                </td>
            </tr>
            <tr>
                <td>出生年月日</td>
                <td>
                    <input type="date" name="stu.birth">
                </td>
                <td>
                    <s:fielderror fieldName="stu.birth"/>
                </td>
            </tr>
            <tr>
                <td>邮箱:</td>
                <td>
                    <input type="text" name="stu.email"/>
                </td>
                <td>
                    <s:fielderror fieldName="stu.email"/>
                </td>
            </tr>
            <tr>
                <td>专业:</td>
                <td>
                    <input type="text" name="stu.major">
                </td>
                <td>
                    <s:fielderror fieldName="stu.major"/>
                </td>
            </tr>
            <tr>
                <td>总分:</td>
                <td>
                    <input type="text" name="stu.grade"/>
                </td>
                <td>
                    <s:fielderror fieldName="stu.grade"/>
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="提交">
                </td>
                <td></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>
  • success.jsp:
<%@ page isELIgnored="false" %>
<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2019/4/25
  Time: 21:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>校验成功</title>
</head>
<body>
<p>校验成功!</p> ${sessionScope.stu.name}
</body>
</html>

四、action 同级目录下新建以action类名-validation.xml 为名的校验器配置文件

  • ValidateAction-validation.xml 如下:

头部的 <!DOCTYPE validators ....>可以在 lib 目录下的 struts2-core.jar包下的 xwork-validator-1.0.2.dtd中复制粘贴。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
    <field name="stu.ID">
        <field-validator type="requiredstring">
            <message>学号必须填!</message>
        </field-validator>
        <!--
        <field-validator type="regex">
            <param name="regexExpression"> <![CDATA[([A-Z]\w*)]]></param>
            <message>学号第一位为大写字母,后面每一位为字母、数字、下划线</message>
        </field-validator>
        -->
        <field-validator type="regex">
            <param name="regexExpression"> <![CDATA[([1-9][6-9]\d{6})]]> </param>
            <message>学号前两位大于"15"并且后 6 位必须为数字!</message>
        </field-validator>
    </field>
    
    <!-- 需要校验的字段名-->
    <field name="stu.name">
        <!-- type值为校验器名,非空字符串校验器,即必填 -->
        <field-validator type="requiredstring">
            <!-- 去空格 -->
            <param name="trim">true</param>
            <!-- 错误提示信息 -->
            <message>姓名必须填!</message>
        </field-validator>
    </field>

    <field name="stu.major">
        <field-validator type="requiredstring">
            <message>专业信息必须填!</message>
        </field-validator>
    </field>

    <field name="stu.birth">
        <field-validator type="date">
            <param name="min">1995-01-01</param>
            <param name="max">2001-04-25</param>
            <message>生日必须在1995-01-01 至 2001-04-25 之间</message>
        </field-validator>
    </field>
    
    <field name="stu.grade">
        <field-validator type="requiredstring">
            <message>成绩必须填!</message>
        </field-validator>
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[(stu.grade >= 0 && stu.grade <= 80)]]></param>
            <message>成绩在 0 - 80 之间</message>
        </field-validator>
    </field>

    <field name="stu.email">
        <!-- 非空校验器 -->
        <field-validator type="requiredstring">
            <message>邮箱不能为空!</message>
        </field-validator>
        <!-- 一个字段可以配置多个校验器 -->
        <field-validator type="email">
            <message>邮箱格式不正确!</message>
        </field-validator>
    </field>
</validators>

直接运行 validate.jsp 文件,直接点击提交会弹出提示:
在这里插入图片描述


填写不符合校验器中的正则表达式则会弹出提示:
在这里插入图片描述

有时候没有在代码上出错,比如 jsp 或者 Javaclass文件找不着:ClassnotfoundException 这种,那就直接新建个 jsp 文件把源码复制进去再运行吧。一般耐心一点翻看 Tomcat 的 server-log 的错误提示,可能是 jar 包的问题,可能是空指针(NPE)的问题。但无论怎么样,至少排除掉源码上的错误。

发布了26 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Run_Bomb/article/details/89600310