jsp+servlet+mysql8.0 完成网站注册功能

注册功能

1.用户表sys_user的设计

id /用户名/密码/手机号/注册日期
id:UUID varchar(60)
全是字符串类型,给合适的长度

create table zhucedenglu.sys_user
(
    id         varchar(60) not null,
    username   varchar(32) not null,
    password   varchar(18) not null,
    mobile     varchar(32) not null,
    zhuce_time varchar(32) not null,
    constraint sys_user_id_uindex
        unique (id),
    constraint sys_user_mobile_uindex
        unique (mobile),
    constraint sys_user_username_uindex
        unique (username)
);

alter table zhucedenglu.sys_user
    add primary key (id);

2.注册业务时序图

id使用UUID 生成随机
用户名不能重复,手机号也不能重复,如果有一个重复都不能完成注册,并响应给用户不能注册的具体原因
注册业务时序图

3. 代码

3.1 编写实体类

public class SysUser {

  private String id;
  private String username;
  private String password;
  private String mobile;
  private String zhuceTime;


  public String getId() {
    return id;
  }

  public void setId(String 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 getMobile() {
    return mobile;
  }

  public void setMobile(String mobile) {
    this.mobile = mobile;
  }


  public String getZhuceTime() {
    return zhuceTime;
  }

  public void setZhuceTime(String zhuceTime) {
    this.zhuceTime = zhuceTime;
  }

}

3.1 编写SysUserDao

//方法
public interface SysUserDao {
    //根据用户名查询用户对象
    SysUser selectByUserName(String username) throws SQLException;
    //根据手机号查询用户对象
    SysUser selectByMobile(String mobile) throws SQLException;
    //保存用户对象
    Integer insertSysUser(SysUser sysUser) throws SQLException;
}

3.2 编写SysUserDaoImpl

public class SysUserDaoImpl implements SysUserDao{
    @Override
    public SysUser selectByUserName(String username) throws SQLException {
        Connection conn = JDBCUtils.getConn();
        String sql = "select * from sys_user where username = ?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,username);
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            SysUser sysUser = new SysUser();
            sysUser.setId(rs.getString("id"));
            sysUser.setUsername(rs.getString("username"));
            sysUser.setMobile(rs.getString("mobile"));
            sysUser.setPassword(rs.getString("password"));
            sysUser.setZhuceTime(rs.getString("zhuce_time"));
            return sysUser;
        }

        return null;
    }

    @Override
    public SysUser selectByMobile(String mobile) throws SQLException {
        Connection conn = JDBCUtils.getConn();
        String sql = "select * from sys_user where mobile = ?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,mobile);
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            SysUser sysUser = new SysUser();
            sysUser.setId(rs.getString("id"));
            sysUser.setUsername(rs.getString("username"));
            sysUser.setMobile(rs.getString("mobile"));
            sysUser.setPassword(rs.getString("password"));
            sysUser.setZhuceTime(rs.getString("zhuce_time"));
            return sysUser;
        }
        return null;
    }

    @Override
    public Integer insertSysUser(SysUser sysUser) throws SQLException {
        Connection conn = JDBCUtils.getConn();
        String sql = "insert into sys_user(id,username,password,mobile,zhuce_time) value (?,?,?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,sysUser.getId());
        ps.setString(2,sysUser.getUsername());
        ps.setString(3,sysUser.getPassword());
        ps.setString(4,sysUser.getMobile());
        ps.setString(5,sysUser.getZhuceTime());
        int i = ps.executeUpdate();
        return i;
    }
}

3.3 编写SysUserService

public interface SysUserService {
    //注册的方法
    void register(SysUser sysUser);
}

3.4 编写SysUserServiceImpl

public class SysUserServiceImpl implements SysUserService {
    @Override
    public void register(SysUser sysUser) {
        SysUserDao sysUserDao = new SysUserDaoImpl();
        try {
            //调用SysUserDao中根据用户名查询对象的方法
            SysUser sysUser1 = sysUserDao.selectByUserName(sysUser.getUsername());
            //可以根据sysUser1是否为null进行判断
            if(sysUser1!=null){
                //用户名已存在
                //通过手动制造运行时异常,来给Servlet反馈:用户名已存在
                throw new RuntimeException("用户名已存在");
            }else{
                //用户名不存在
                //调用SysUserDao中根据手机号查询对象的方法
                SysUser sysUser2 = sysUserDao.selectByMobile(sysUser.getMobile());
                if(sysUser2!=null){
                    //手机号已存在
                    //通过手动制造运行时异常,来给Servlet反馈:手机号已存在
                    throw new RuntimeException("手机号已存在");
                }else{
                    //手机号不存在
                    //调用SysUserDao中保存用户对象的方法
                    Integer i = sysUserDao.insertSysUser(sysUser);
                }
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

3.5 编写DoRegisterServlet

@WebServlet("/sysUser/doRegister")
public class DoRegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收请求
        //处理请求的乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String mobile = req.getParameter("mobile");

        //使用UUID生成id
        String id = UUID.randomUUID().toString().replace("-","");
        String zhuceTime = "";
        //java 代码获取当前系统时间
        Date date = new Date();
        //日期类型怎么转换成字符串类型的日期
        zhuceTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

        //将这些参数封装到一个SysUser对象
        SysUser sysUser = new SysUser();
        sysUser.setId(id);
        sysUser.setUsername(username);
        sysUser.setPassword(password);
        sysUser.setMobile(mobile);
        sysUser.setZhuceTime(zhuceTime);

        //调用注册业务
        SysUserService sysUserService = new SysUserServiceImpl();
        try {
            //可能出现异常的代码使用tryCatch 进行处理
            sysUserService.register(sysUser);
            //没有异常
            //响应结果:重定向到登录的Servlet
            System.out.println("重定向到登录的Servlet");

        } catch (RuntimeException e) {
            //捕捉运行时异常
            //用户名存在
            //手机号存在
            //响应结果:转发
            req.setAttribute("msg",e.getMessage());
            req.getRequestDispatcher("/WEB-INF/sysuser/register.jsp").forward(req,resp);

        }catch (Exception e){
            //保存失败,软件系统异常
            e.printStackTrace();
            //响应结果
        }
    }
}

3.6 编写register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>
<h3>注册表单</h3>
<form action="/sysUser/doRegister" method="post">
    用户名:<input type="text" name="username" value="${param.username}"><br>
    密码:<input type="password" name="password" value="${param.password}"><br>
    手机号:<input type="text" name="mobile" value="${param.mobile}"><br>
    <input type="submit" value="注册"> <span style="color: #ff0000">${msg}</span><br>
</form>
</body>
</html>

3.7编写 RegisterServlet

@WebServlet("/sysUser/register")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      req.getRequestDispatcher("/WEB-INF/sysuser/register.jsp").forward(req,resp);
    }
}

4.项目目录结构

注册业务项目目录结构

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值