• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

黑马旅游网-注册用户二

武飞扬头像
lambda-小张
帮助1

目录

一、注册用户-业务流程分析

1.页面效果

2.业务流程分析

二、注册用户-前端功能实现

修改register.html

1.校验用户名

 2.校验密码

3.检验邮箱

 4.使用ajax提交数据

5.完整代码参考

三、注册用户-后端功能实现

创建RegisterUserServlet

创建UserService

创建UserServiceImpl

创建UserDao

创建UserDaoImpl

四、测试


一、注册用户-业务流程分析

1.页面效果

学新通

2.业务流程分析

学新通

二、注册用户-前端功能实现

修改register.html

1.校验用户名

获取用户名

用户名格式要求,正则表达式限制

进行判断用户名是否符合

用户名合法无提示

用户名不合法,红色边框提示

学新通

 2.校验密码

获取密码

密码格式要求,正则表达式限制

进行判断密码是否符合

密码合法无提示

密码不合法,红色边框提示

学新通

3.检验邮箱

获取邮箱

邮箱格式要求,正则表达式限制,注意邮箱格式

进行判断邮箱是否符合

合法无提示

不合法,红色边框提示

学新通

 4.使用ajax提交数据

在此使用异步提交表单是为了获取服务器响应的数据。因为我们前台使用的是html作为视图层,不能够直接从servlet相关的域对象获取值,只能通过ajax获取响应数据

学新通

5.完整代码参考

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="utf-8">
  5.  
    <title>注册</title>
  6.  
    <link rel="stylesheet" type="text/css" href="css/common.css">
  7.  
    <link rel="stylesheet" href="css/register.css">
  8.  
    <!--导入jquery-->
  9.  
    <script src="js/jquery-3.3.1.js"></script>
  10.  
    <script>
  11.  
    //校验用户名
  12.  
    function checkUsername(){
  13.  
    //获取用户名
  14.  
    var username = $("#username").val();
  15.  
    //用户名 8~32
  16.  
    var reg_username = /^\w{8,32}$/;
  17.  
    //判断
  18.  
    var flag = reg_username.test(username);
  19.  
     
  20.  
    if(flag){
  21.  
    //用户名合法
  22.  
    $("#username").css("border","");
  23.  
    }else{
  24.  
    //用户名不合法,红色边框
  25.  
    $("#username").css("border","1px solid red");
  26.  
    }
  27.  
    return flag;
  28.  
    }
  29.  
     
  30.  
    //校验密码
  31.  
    function checkPassword(){
  32.  
    //获取用户名
  33.  
    var password = $("#password").val();
  34.  
    //用户名 8~20
  35.  
    var reg_password = /^\w{8,20}$/;
  36.  
     
  37.  
    //判断
  38.  
    var flag = reg_password.test(password);
  39.  
     
  40.  
    if(flag){
  41.  
    //用户名合法
  42.  
    $("#password").css("border","");
  43.  
    }else{
  44.  
    //用户名不合法,红色边框
  45.  
    $("#password").css("border","1px solid red");
  46.  
    }
  47.  
    return flag;
  48.  
    }
  49.  
    //校验邮箱
  50.  
    function checkEmail(){
  51.  
    //获取用户名
  52.  
    var email = $("#email").val();
  53.  
    //用户名 8~20
  54.  
    var reg_email = /^\w @\w .\w $/;
  55.  
     
  56.  
    //判断
  57.  
    var flag = reg_email.test(email);
  58.  
     
  59.  
    if(flag){
  60.  
    //用户名合法
  61.  
    $("#email").css("border","");
  62.  
    }else{
  63.  
    //用户名不合法,红色边框
  64.  
    $("#email").css("border","1px solid red");
  65.  
    }
  66.  
    return flag;
  67.  
    }
  68.  
     
  69.  
    //使用ajax提交数据
  70.  
    $(function (){
  71.  
    $("#registerForm").submit(function (){
  72.  
    //表单的校验
  73.  
    if(checkUsername() && checkPassword() && checkEmail()){
  74.  
    //表单数据合法 username=xxx&passwrod=xxx
  75.  
    $.post("registerUserServlet",$(this).serialize(),function (data){
  76.  
    //设计返回数据格式 data : {flag:true,errorMsg:"提示错误信息"}
  77.  
    if (data.flag){
  78.  
    //注册成功
  79.  
    location.href="register_ok.html";//跳转到首页
  80.  
    }else {
  81.  
    $("#msg").html(data.errorMsg);
  82.  
    }
  83.  
    });
  84.  
    };
  85.  
    //表单较验失败
  86.  
    return false;
  87.  
    });
  88.  
    //用户体验提升
  89.  
    $("#username").blur(checkUsername);
  90.  
    $("#password").blur(checkPassword);
  91.  
    $("#email").blur(checkEmail);
  92.  
    });
  93.  
    </script>
  94.  
    </head>
  95.  
    <body>
  96.  
    <!--引入头部-->
  97.  
    <div id="header"></div>
  98.  
    <!-- 头部 end -->
  99.  
    <div class="rg_layout">
  100.  
    <div class="rg_form clearfix">
  101.  
    <div class="rg_form_left">
  102.  
    <p>新用户注册</p>
  103.  
    <p>USER REGISTER</p>
  104.  
    </div>
  105.  
    <div class="rg_form_center">
  106.  
     
  107.  
    <!--注册表单-->
  108.  
    <form id="registerForm">
  109.  
    <!--提交处理请求的标识符-->
  110.  
    <input type="hidden" name="action" value="register">
  111.  
    <table style="margin-top: 25px;">
  112.  
    <tr>
  113.  
    <td class="td_left">
  114.  
    <label for="username">用户名</label>
  115.  
    </td>
  116.  
    <td class="td_right">
  117.  
    <input type="text" id="username" name="username" placeholder="请输入账号">
  118.  
    </td>
  119.  
    </tr>
  120.  
    <tr>
  121.  
    <td class="td_left">
  122.  
    <label for="password">密码</label>
  123.  
    </td>
  124.  
    <td class="td_right">
  125.  
    <input type="text" id="password" name="password" placeholder="请输入密码">
  126.  
    </td>
  127.  
    </tr>
  128.  
    <tr>
  129.  
    <td class="td_left">
  130.  
    <label for="email">Email</label>
  131.  
    </td>
  132.  
    <td class="td_right">
  133.  
    <input type="text" id="email" name="email" placeholder="请输入Email">
  134.  
    </td>
  135.  
    </tr>
  136.  
    <tr>
  137.  
    <td class="td_left">
  138.  
    <label for="name">姓名</label>
  139.  
    </td>
  140.  
    <td class="td_right">
  141.  
    <input type="text" id="name" name="name" placeholder="请输入真实姓名">
  142.  
    </td>
  143.  
    </tr>
  144.  
    <tr>
  145.  
    <td class="td_left">
  146.  
    <label for="telephone">手机号</label>
  147.  
    </td>
  148.  
    <td class="td_right">
  149.  
    <input type="text" id="telephone" name="telephone" placeholder="请输入您的手机号">
  150.  
    </td>
  151.  
    </tr>
  152.  
    <tr>
  153.  
    <td class="td_left">
  154.  
    <label for="sex">性别</label>
  155.  
    </td>
  156.  
    <td class="td_right gender">
  157.  
    <input type="radio" id="sex" name="sex" value="男" checked>
  158.  
    <input type="radio" name="sex" value="女">
  159.  
    </td>
  160.  
    </tr>
  161.  
    <tr>
  162.  
    <td class="td_left">
  163.  
    <label for="birthday">出生日期</label>
  164.  
    </td>
  165.  
    <td class="td_right">
  166.  
    <input type="date" id="birthday" name="birthday" placeholder="年/月/日">
  167.  
    </td>
  168.  
    </tr>
  169.  
    <tr>
  170.  
    <td class="td_left">
  171.  
    <label for="check">验证码</label>
  172.  
    </td>
  173.  
    <td class="td_right check">
  174.  
    <input type="text" id="check" name="check" class="check">
  175.  
    <img src="checkCode" height="32px" alt="" onclick="changeCheckCode(this)">
  176.  
    <script type="text/javascript">
  177.  
    //图片点击事件
  178.  
    function changeCheckCode(img) {
  179.  
    img.src="checkCode?" new Date().getTime();
  180.  
    }
  181.  
    </script>
  182.  
    </td>
  183.  
    </tr>
  184.  
    <tr>
  185.  
    <td class="td_left">
  186.  
    </td>
  187.  
    <td class="td_right check">
  188.  
    <input type="submit" class="submit" value="注册">
  189.  
    <span id="msg" style="color: red;"></span>
  190.  
    </td>
  191.  
    </tr>
  192.  
    </table>
  193.  
    </form>
  194.  
    </div>
  195.  
    <div class="rg_form_right">
  196.  
    <p>
  197.  
    已有账号?
  198.  
    <a href="#">立即登录</a>
  199.  
    </p>
  200.  
    </div>
  201.  
    </div>
  202.  
    </div>
  203.  
    <!--引入尾部-->
  204.  
    <div id="footer"></div>
  205.  
    <!--导入布局js,共享header和footer-->
  206.  
    <script type="text/javascript" src="js/include.js"></script>
  207.  
     
  208.  
    </body>
  209.  
    </html>
学新通

三、注册用户-后端功能实现

创建RegisterUserServlet

1.从session中获取验证码

2.删除session

3.验证码有误 封装返回的数据对象

4.注册失败,设置编码和类型

5.获取所有表单的数据、

6.封装user对象

7.调用service

8.验证码有误 封装返回的数据对象

9.注册用户成功

10.注册用户失败

11.设置编码和类型

  1.  
    package com.hotdas.travel.web.servlet;
  2.  
     
  3.  
    import com.fasterxml.jackson.databind.ObjectMapper;
  4.  
    import com.hotdas.travel.domain.ResultInfo;
  5.  
    import com.hotdas.travel.domain.User;
  6.  
    import com.hotdas.travel.service.UserService;
  7.  
    import com.hotdas.travel.service.impl.UserServiceImpl;
  8.  
    import org.apache.commons.beanutils.BeanUtils;
  9.  
     
  10.  
    import javax.servlet.ServletException;
  11.  
    import javax.servlet.annotation.WebServlet;
  12.  
    import javax.servlet.http.HttpServlet;
  13.  
    import javax.servlet.http.HttpServletRequest;
  14.  
    import javax.servlet.http.HttpServletResponse;
  15.  
    import java.io.IOException;
  16.  
    import java.lang.reflect.InvocationTargetException;
  17.  
    import java.util.Map;
  18.  
     
  19.  
    /**
  20.  
    * @program: IntelliJ IDEA
  21.  
    * @description:
  22.  
    * @author:
  23.  
    * @create: 2022-10-01 22:04
  24.  
    */
  25.  
    @WebServlet("/registerUserServlet")
  26.  
    public class RegisterUserServlet extends HttpServlet {
  27.  
    @Override
  28.  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  29.  
    String check = request.getParameter("check");
  30.  
    //从session中获取验证码
  31.  
    String checkcode_server = (String) request.getSession().getAttribute("CHECKCODE_SERVER");
  32.  
    //删除session
  33.  
    request.getSession().removeAttribute("CHECKCODE_SERVER");
  34.  
    if (checkcode_server!=null && !checkcode_server.equalsIgnoreCase(check)){
  35.  
    //验证码有误 封装返回的数据对象
  36.  
    ResultInfo info = new ResultInfo();
  37.  
    //注册失败
  38.  
    info.setErrorMsg("验证码有误!");
  39.  
    info.setFlag(false);
  40.  
    ObjectMapper objectMapper = new ObjectMapper();
  41.  
    String valueAsString = objectMapper.writeValueAsString(info);
  42.  
    //设置编码和类型
  43.  
    response.setCharacterEncoding("utf-8");
  44.  
    response.setContentType("application/json;charset=utf-8");
  45.  
    response.getWriter().write(valueAsString);
  46.  
    return;
  47.  
    }
  48.  
    //获取所有表单的数据
  49.  
    Map<String, String[]> parameterMap = request.getParameterMap();
  50.  
    //封装user对象
  51.  
    User user = new User();
  52.  
    try {
  53.  
    BeanUtils.populate(user,parameterMap);
  54.  
    } catch (IllegalAccessException e) {
  55.  
    e.printStackTrace();
  56.  
    } catch (InvocationTargetException e) {
  57.  
    e.printStackTrace();
  58.  
    }
  59.  
     
  60.  
    //调用service
  61.  
    UserService userService = new UserServiceImpl();
  62.  
    Boolean flag = userService.regirst(user);
  63.  
    //验证码有误 封装返回的数据对象
  64.  
    ResultInfo info = new ResultInfo();
  65.  
    if (flag){
  66.  
    //注册用户成功
  67.  
    info.setFlag(true);
  68.  
    }else{
  69.  
    //注册用户失败
  70.  
    //注册失败
  71.  
    info.setErrorMsg("注册失败!");
  72.  
    info.setFlag(false);
  73.  
    }
  74.  
     
  75.  
    ObjectMapper objectMapper = new ObjectMapper();
  76.  
    String valueAsString = objectMapper.writeValueAsString(info);
  77.  
    //设置编码和类型
  78.  
    response.setCharacterEncoding("utf-8");
  79.  
    response.setContentType("application/json;charset=utf-8");
  80.  
    response.getWriter().write(valueAsString);
  81.  
     
  82.  
    }
  83.  
    @Override
  84.  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  85.  
    this.doPost(request,response);
  86.  
    }
  87.  
     
  88.  
     
  89.  
    }
学新通

创建UserService

  1.  
    package com.hotdas.travel.service;
  2.  
     
  3.  
    import com.hotdas.travel.domain.User;
  4.  
     
  5.  
    public interface UserService {
  6.  
    Boolean regirst(User user);//实现方法
  7.  
    }

创建UserServiceImpl

1.从数据库中查询用户

2.判断用户是否存在

3.用户存在,返回false

4.激活邮箱才可以使用

5.保存信息到数据库

6.发送邮箱给用户让用户进激活,后面doing...

  1.  
    package com.hotdas.travel.service.impl;
  2.  
     
  3.  
    import com.hotdas.travel.dao.UserDao;
  4.  
    import com.hotdas.travel.dao.impl.UserDaoImpl;
  5.  
    import com.hotdas.travel.domain.User;
  6.  
    import com.hotdas.travel.service.UserService;
  7.  
    import com.hotdas.travel.util.UuidUtil;
  8.  
     
  9.  
    public class UserServiceImpl implements UserService {
  10.  
    private UserDao userDao = new UserDaoImpl();
  11.  
     
  12.  
    @Override
  13.  
    public Boolean regirst(User user) {
  14.  
    //从数据库中查询用户
  15.  
    User u = userDao.findByUsername(user.getUsername());
  16.  
     
  17.  
    //判断用户是否存在
  18.  
    if (u!=null){
  19.  
    //用户存在,返回false
  20.  
    return false;
  21.  
    }
  22.  
    //激活邮箱才可以使用
  23.  
    user.setCode(UuidUtil.getUuid());
  24.  
    user.setStatus("N");
  25.  
     
  26.  
    //保存信息到数据库
  27.  
    userDao.save(user);
  28.  
     
  29.  
    //发送邮箱给用户让用户进激活,后面doing...
  30.  
     
  31.  
     
  32.  
    return true;
  33.  
    }
  34.  
    }
学新通

创建UserDao

1.根据用户名查询用户信息

2.保存用户信息

  1.  
    package com.hotdas.travel.dao;
  2.  
     
  3.  
    import com.hotdas.travel.domain.User;
  4.  
     
  5.  
    public interface UserDao {
  6.  
    //根据用户名查询用户信息
  7.  
    User findByUsername(String username);
  8.  
     
  9.  
    //保存用户信息
  10.  
    void save(User user);
  11.  
     
  12.  
    }

创建UserDaoImpl

1.定义sql

2.用占位符替代数据

  1.  
    package com.hotdas.travel.dao.impl;
  2.  
     
  3.  
    import com.hotdas.travel.dao.UserDao;
  4.  
    import com.hotdas.travel.domain.User;
  5.  
    import com.hotdas.travel.util.JDBCUtils;
  6.  
    import org.springframework.dao.DataAccessException;
  7.  
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
  8.  
    import org.springframework.jdbc.core.JdbcTemplate;
  9.  
     
  10.  
    public class UserDaoImpl implements UserDao {
  11.  
     
  12.  
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
  13.  
     
  14.  
    @Override
  15.  
    public User findByUsername(String username) {
  16.  
    User user =null;
  17.  
    try {
  18.  
    //1.定义sql
  19.  
    String sql ="select * from tab_user where username=?";
  20.  
    user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username);
  21.  
    } catch (DataAccessException e) {
  22.  
    e.printStackTrace();
  23.  
    }
  24.  
    return user;
  25.  
    }
  26.  
     
  27.  
    @Override
  28.  
    public void save(User user) {
  29.  
    //1.定义sql,占位符
  30.  
    String sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";
  31.  
     
  32.  
    template.update(sql,
  33.  
    user.getUsername(),
  34.  
    user.getPassword(),
  35.  
    user.getName(),
  36.  
    user.getBirthday(),
  37.  
    user.getSex(),
  38.  
    user.getTelephone(),
  39.  
    user.getEmail(),
  40.  
    user.getStatus(),
  41.  
    user.getCode());
  42.  
     
  43.  
     
  44.  
    }
  45.  
    }
学新通

四、测试

运行项目,打开网页,数据不合法会出现红色框,以此检验代码是否有误 

学新通

这篇好文章是转载于:编程之路

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 编程之路
  • 本文地址: /boutique/detail/tanhgkibjj
系列文章
更多 icon
同类精品
更多 icon
继续加载