项目开发日志——注册功能

首先,注册流程与用户相关,业务流程的处理逻辑代码写在Service层中的UserService中。

业务处理逻辑:

  1. register方法需要传入一个User对象,对对象中的属性进行判断操作,返回的是一个Map集合,里面是一些结果;
  2. 首先判断user对象是否为空,username、password以及email是否为空,为空则返回map结果集合,键为html中的变量,值为提示的信息;
  3. 其次,都不为空,则开始判断用户名和邮箱是否和数据库中已经存在的数据相同,具体做法是调用UserMapper中的根据用户名和邮箱来查询,查询的结果为空,则说明不存在,否则向map集合添加信息并返回;
  4. 接下来,则完善该用户的其他属性,并最后执行插入操作来创建一个用户,此时返回的map为空,说明一切正常。
//注册业务
public Map<String, Object> register(User user) {
    Map<String, Object> map = new HashMap<>();
    //空值处理
    if(user == null) {
      throw new IllegalArgumentException("参数不能为空!");
    }
    if (StringUtils.isEmpty(user.getUsername())) {
      map.put("usernameMsg", "账号不能为空!");
      return map;
    }
    if (StringUtils.isEmpty(user.getPassword())) {
      map.put("passwordMsg", "密码不能为空!");
      return map;
    }
    if (StringUtils.isEmpty(user.getEmail())) {
      map.put("emailMsg", "邮箱不能为空!");
      return map;
    }
    //验证账号
    User u = userMapper.selectByName(user.getUsername());
    if (u != null) {
      map.put("usernameMsg", "该账号已存在!");
      return map;
    }
    //验证邮箱
    u = userMapper.selectByEmail(user.getEmail());
    if (u != null) {
      map.put("emailMsg", "该邮箱已被注册!");
      return map;
     }
     //注册用户
    user.setSalt(MooclubUtil.generateUUID().substring(0,5));
    user.setPassword(MooclubUtil.md5(user.getPassword() + user.getSalt()));
    user.setType(0);  //用户类型,普通用户
    user.setStatus(0);  //用户状态,未激活
    user.setActivationCode(MooclubUtil.generateUUID());
    //设置用户的默认头像,随机的
    user.setHeaderUrl(String.format("http://images.nowcoder.com/head/%dt.png",new Random().nextInt(1000)));
    user.setCreateTime(new Date());
    userMapper.insertUser(user);
}

接下来,开发Controller层的页面跳转逻辑

这里分为两种情况:

  • 一种是注册业务正常执行,返回的map是空
    • 这时需要向model域中添加msg信息和跳转的页面
    • 返回的页面是操作提示信息页面
  • 一种是注册业务有错误情况,map集合中有信息
    • 这是需要得到map集合中的内容,并添加到model域中
    • 返回的页面是注册页面,并显示提示信息
@RequestMapping(path = "/register", method = RequestMethod.POST)
public String register(Model model, User user) {
    //创建map集合来接收UserService的register方法的返回值
    Map<String, Object> map = userService.register(user);
    if (map == null || map.isEmpty()){
        model.addAttribute("msg", "注册成功,请前往邮箱激活!");
        model.addAttribute("target", "/index");
        return "/site/operate-result";
    }else {
        model.addAttribute("usernameMsg",map.get("usernameMsg"));
        model.addAttribute("passwordMsg",map.get("passwordMsg"));
        model.addAttribute("emailMsg",map.get("emailMsg"));
        return "/site/register";
    }
}

最后,编写HTML页面中的信息

操作提示信息页面

<div class="main">
    <p class="lead" th:text="${msg}">您的账号已经激活成功,可以正常使用了!</p>
    <hr class="my-4">
    <p>系统会在 <span id="seconds" class="text-danger">8</span> 秒后自动跳转,
    您也可以点此<a id="target" th:href="@{${target}}" class="text-primary">链接</a>, 手动跳转!
    <!-- @{}是跳转页面的逻辑视图; ${}是变量,是controller传来的model域中的target键的值 -->
    </p>
</div>

注册信息页面

<form class="mt-5" method="post" th:action="@{/register}">
    <div class="form-group row">
        <label for="username" class="col-sm-2 col-form-label text-right">账号:</label>
	<div class="col-sm-10">
	    <input type="text"
		   th:class="|form-control ${usernameMsg!=null?'is-invalid':''}|"
		   th:value="${user!=null?user.username:''}"
		   id="username" name="username" placeholder="请输入您的账号!" required>
	    <div class="invalid-feedback" th:text="${usernameMsg}" />
	</div>
    </div>
    <div class="form-group row mt-4">
	<label for="password" class="col-sm-2 col-form-label text-right">密码:</label>
	<div class="col-sm-10">
	    <input type="password"
		   th:class="|form-control ${passwordMsg!=null?'is-invalid':''}|"
		   th:value="${user!=null?user.password:''}"
		   id="password" name="password" placeholder="请输入您的密码!" required>
	    <div class="invalid-feedback" th:text="${passwordMsg}" />							
	</div>
    </div>
    <div class="form-group row mt-4">
	<label for="confirm-password" class="col-sm-2 col-form-label text-right">确认密码:</label>
	<div class="col-sm-10">
	    <input type="password" class="form-control"
		   id="confirm-password" placeholder="请再次输入密码!" required>
	    <div class="invalid-feedback">两次输入的密码不一致!</div>
	</div>
    </div>
    <div class="form-group row">
	<label for="email" class="col-sm-2 col-form-label text-right">邮箱:</label>
	<div class="col-sm-10">
	    <input type="email"
		   th:class="|form-control ${emailMsg!=null?'is-invalid':''}|"
		   th:value="${user!=null?user.email:''}"
		   id="email" name="email" placeholder="请输入您的邮箱!" required>
            <div class="invalid-feedback" th:text="${emailMsg}" />
        </div>
    </div>
    <div class="form-group row mt-4">
	<div class="col-sm-2"></div>
	<div class="col-sm-10 text-center">
	    <button type="submit" class="btn btn-info text-white form-control">立即注册</button>
        </div>
    </div>
</form>
posted @ 2022-10-13 15:34  Shineloner  阅读(120)  评论(0)    收藏  举报