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

来源:互联网 发布:统计学,概率论软件 编辑:程序博客网 时间:2024/05/02 23:07

首先先创建一个大的包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>
阅读全文
0 0
原创粉丝点击