Struts2系列登录注册的小项目之验证规则

首先先创建一个大的包com.wangyijie.struts
在这个包下面再创建四个包
这里写图片描述

在我的工程里面有个c3p0-config.xml这个是用来连接数据库使用的 自己配置好自己的参数值

//c3p0-config.xml 这是c3p0的配置 首先要创建一个数据库
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore</property>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="user">root</property>
    <property name="password">111111</property>
    <property name="acquireIncrement">3</property>
    <property name="initialPoolSize">5</property>
    <property name="minPoolSize">2</property>
    <property name="maxPoolSize">8</property>
</default-config>
</c3p0-config>

首先要先写javaBean Student类

public class Student implements Serializable {
    private int id;
    private String username;
    private String password;
    private String gender;
    private String hobby;//吃饭,睡觉,学java
    private Date birthday;
    private String email;
    private int grade;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", hobby='" + hobby + '\'' +
                ", birthday=" + birthday +
                ", email='" + email + '\'' +
                ", grade=" + grade +
                '}';
    }

    public Student() {
    }

    public Student(int id, String username, String password, String gender, String hobby, Date birthday, String email, int grade) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.hobby = hobby;
        this.birthday = birthday;
        this.email = email;
        this.grade = grade;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

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

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
}

这个是注册的jsp页面

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Created by IntelliJ IDEA.
  User: dllo
  Date: 2017/7/5
  Time: 上午11:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <s:head/>
</head>
<body>

<s:fielderror/>
<form action="${pageContext.request.contextPath}/stu/regist.action" method="post">
    <table border="1" width="438">
        <tr>
            <td>用户名:</td>
            <td>
                <input type="text" name="username"/>
            </td>
        </tr>
        <tr>
            <td>密码:</td>
            <td>
                <input type="password" name="password"/>
            </td>
        </tr>
        <tr>
            <td>性别:</td>
            <td>
                <input type="radio" name="gender" value="male" checked="checked"/>男性
                <input type="radio" name="gender" value="female"/>女性
            </td>
        </tr>
        <tr>
            <td>爱好:</td>
            <td>
                <input type="checkbox" name="hobbies" value="吃饭"/>吃饭
                <input type="checkbox" name="hobbies" value="睡觉"/>睡觉
                <input type="checkbox" name="hobbies" value="学java"/>学java
            </td>
        </tr>
        <tr>
            <td>出生日期:(yyyy-MM-dd)</td>
            <td>
                <input type="text" name="birthday"/>
            </td>
        </tr>
        <tr>
            <td>邮箱:</td>
            <td>
                <input type="text" name="email"/>
            </td>
        </tr>
        <tr>
            <td>成绩:</td>
            <td>
                <input type="text" name="grade"/>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="注册"/>
            </td>
        </tr>
    </table>
</form>

<hr>
<a href="/login.jsp">登录</a>


</body>
</html>

login登录的jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Created by IntelliJ IDEA.
  User: dllo
  Date: 17/5/10
  Time: 下午4:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <s:head/>
</head>
<body>

<s:fielderror/>
<%--<p style="color: red">${msg}</p>--%>
<form action="${pageContext.request.contextPath}/stu/login" method="post">
  用户名:  <input type="text" name="username"/><br>
  密码: <input type="password" name="password"/><input type="submit" value="登录"/>
</form>
</body>
</html>

StudentAction 动作类

public class StudentAction extends ActionSupport implements ModelDriven<Student>, ServletRequestAware {

    private StudentService studentService = new StudentServiceImpl();


    private HttpServletRequest request;
    private Student stu = new Student();


    //  特殊处理:  hobbies
    private String[] hobbies;

    public String[] getHobbies() {
        return hobbies;
    }
    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }

    public String regist(){
        try {
            // 单独处理爱好
            if (hobbies != null && hobbies.length>0){
                StringBuffer sb = new StringBuffer();
                for (int i = 0;i<hobbies.length;i++){
                    if(i>0){
                        sb.append(",");
                    }
                    sb.append(hobbies[i]);
                }
                stu.setHobby(sb.toString());
            }
            studentService.register(stu);
            System.out.println("注册成功~");
            return SUCCESS;
        }catch (Exception e){
            request.setAttribute("error", "系统发生错误! 请稍后重试!");
            return ERROR;
        }
    }

    public String login(){
        try {
            boolean flag = studentService.login(stu);
            if (flag == false){
                request.setAttribute("msg", "用户名或密码错误!");
                return LOGIN;
            }
        }catch (Exception e){
            request.setAttribute("error", "系统发生错误! 请稍后重试!");
            return ERROR;
        }
        request.getSession().setAttribute("user", stu);
        return SUCCESS;
    }


 //在这里来说验证规则

 //    输入验证:
//    1.编程式验证
//    [1] 针对动作类中所有的动作方法
//    [2] 针对动作类中部分的动作方法
//
//
//    [1]针对动作类中所有的动作方法
//    可以判断一些验证是否重复或者是否为空 直接调用该方法就可以使用判断
    @Override
    public void validate() {
        if ("".equals(stu.getUsername().trim())){
            addFieldError("stu.username", "用户名不能为空!");//向map添加错误
            //出现错误,会转向result=input 视图
        }
    }

//    [2] 针对动作类中部分的动作方法
//    a. 使用注解对方法进行忽略
//    b. 只针对该方法进行验证: 例如 regist.validateRegist 就是针对regist这个方法进行验证

    @SkipValidation //忽略的意思 可以在regist的方法中试一下方法 会输出findAll 就是忽略了这个方法
    public String findAll(){

        System.out.println("findAll");
        return null;
    }

   // 就是针对regist这个方法进行验证
    public void validateRegist() {
        if ("".equals(stu.getUsername().trim())){
            addFieldError("stu.username", "用户名不能为空!");//向map添加错误
            //出现错误,会转向result=input 视图
        }
    }

 public Student getStu() {
        return stu;
    }

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

    @Override
    public Student getModel() {
        return stu;
    }

    @Override
    public void setServletRequest(HttpServletRequest httpServletRequest) {
        this.request = httpServletRequest;
    }

创建一个StudentService接口 和 StudentServiceImplement实现类

//StudentService接口
public interface StudentService {
     void register(Student stu);
     boolean login(Student stu);

}
//StudentServiceImplement实现类
public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao = new StudentDaoImpl();
    @Override
    public void register(Student stu) {

        studentDao.addStu(stu);
    }

    @Override
    public boolean login(Student stu) {
        Student student = studentDao.queryStu(stu);
        if (student != null){
            return true;
        }
        return false;
    }

创建一个StudentDao的接口和StudentDaoImplement实现类

//StudentDao的接口
public interface StudentDao {
     void addStu(Student stu);

    Student queryStu(Student stu);
}
//StudentDaoImplement实现类 用来连接数据库 向数据库中进行增删改查
public class StudentDaoImpl implements StudentDao{
    private GxQueryRunner qr = new GxQueryRunner();
    @Override
    public void addStu(Student stu) {
        String sql = "INSERT INTO students VALUES(?,?,?,?,?,?,?,?)";
        Object[] params = {null, stu.getUsername(), stu.getPassword(), stu.getGender(), stu.getHobby(), stu.getBirthday(), stu.getEmail(), stu.getGrade()};
        try {
            qr.update(sql, params);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Student queryStu(Student stu) {
        String sql = "SELECT * FROM students WHERE username=? AND password = ?";
        Object[] params = {stu.getUsername(), stu.getPassword()};
        try {
            Student u = qr.query(sql, new BeanHandler<Student>(Student.class), params);
            return u;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

struts2.xml

<struts>
    <package name="regist" extends="struts-default" namespace="/stu">
        <action name="regist" class="com.wangyijie.struts.web.controller.StudentAction" method="regist">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
            <result name="input">/regist.jsp</result>
        </action>

        <action name="login" class="com.wangyijie.struts.web.controller.StudentAction" method="login">
            <result name="success" type="redirect">/home.jsp</result>
            <result name="input">/login.jsp</result>
            <result name="login">/login.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

验证规则

这里写图片描述
第一个.xml是只针对regist注册的这个方法进行验证

<validators>
    <validator type="regex">
        <param name="fieldName">stu.username</param>
        <param name="regexExpression">
            <![CDATA[
                 [a-zA-Z]{3,8}
        ]]>
        </param>

        <message>您的名字必须由3~8个字母组成</message>
    </validator>

    <field name="stu.password">
        <field-validator type="regex">
            <param name="regexExpression">
                <![CDATA[
                  \d{3,8}
                ]]>
            </param>
            <message>您的密码必须由3-8个数字组成</message>
        </field-validator>
    </field>

    <field name="stu.username">
        <field-validator type="requiredstring">
            <message>哈哈哈 你的用户名又空啦</message>
        </field-validator>
    </field>


    <field name="stu.gender">
        <field-validator type="required">
            <message>请选择性别的类型</message>
        </field-validator>
    </field>

    <field name="stu.email">
        <field-validator type="email">
            <message>请输入正确的邮箱</message>
        </field-validator>
    </field>

    <field name="stu.grade">
        <field-validator type="int">
            <param name="min">0</param>
            <param name="max">150</param>
            <message>年龄范围在0-150之间</message>
        </field-validator>
    </field>

    <field name="stu.birthday">
        <field-validator type="date">
            <param name="min">2010-01-01</param>
            <param name="max">2010-12-31</param>
            <message>生日在2010-01-01-01到2010-12-31之间</message>
        </field-validator>
    </field>

</validators>

第二个是针对当前的动作类的所有的验证规则 例如:包括这个小项目中login登录的方法也使用这个验证规则

<validators>
    <!--要验证的字段名-->
    <field name="stu.username">
        <!--验证规则-->
        <!--requiredstring: 空字符串-->
        <!--required: 是不是null-->
        <field-validator type="requiredstring">
            <!--报错信息-->
            <message>您的用户名不能为空</message>
        </field-validator>
    </field>

</validators>

猜你喜欢

转载自blog.csdn.net/dapyandxpy/article/details/74832812