web后端注册功能实现
一、注册功能思路
- 首先验证验证码是否正确
- 验证码不正确:重定向回到register.jsp
- 验证码正确
- 查询用户名/手机号是否存在
- 存在,重定向回到register.jsp
- 不存在,完成注册功能并跳转到login.jsp
- 查询用户名/手机号是否存在
二、代码实现
前端页面部分代码
<form action="${pageContext.request.contextPath}/user/register" method="post">
<table cellpadding="0" cellspacing="0" border="0"
class="form_table">
<tr>
<td valign="middle" align="right">
用户名:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="username" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
真实姓名:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="realname" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
密码:
</td>
<td valign="middle" align="left">
<input type="password" class="inputgri" name="password" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
性别:
</td>
<td valign="middle" align="left">
男
<input type="radio" class="inputgri" name="gender" value="1" checked="checked"/>
女
<input type="radio" class="inputgri" name="gender" value="0"/>
</td>
</tr>
<tr>
<td valign="middle" align="right">
验证码:
<img id="num" src="${pageContext.request.contextPath}/user/generateImageCode" />
<a href="javascript:;" onclick="document.getElementById('num').src = '${pageContext.request.contextPath}/user/generateImageCode?'+(new Date()).getTime()">换一张</a>
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="code" />
</td>
</tr>
</table>
<p>
<input type="submit" class="button" value="Submit »" />
<input type="button" class="button" onclick="location.href='${pageContext.request.contextPath}/login.jsp'" value="Login »" />
</p>
</form>
请求的路径${pageContext.request.contextPath}代表的是项目的根目录 通俗易懂就是main文件夹下一级的目录,其中包括java、resource、webapp文件夹等
Controller层
/**
* @Author: yzh
* @Description: 用户注册功能实现
* @Param: [user, code, session]
* @return: java.lang.String
* @Date: 2021/8/12
*/
@RequestMapping("register")
public String register(User user, String code,HttpSession session) throws UnsupportedEncodingException {
log.debug("接收到验证码: {}",code);
log.debug("用户名:{}, 真实姓名:{}, 密码:{}, 性别:{}",user.getUsername(),user.getRealname(),user.getPassword(),user.getGender());
try {
//1.比较验证是否一致
String sessionCode = session.getAttribute("code").toString();
if (!sessionCode.equalsIgnoreCase(code)) throw new RuntimeException("验证码输入错误!");
//2.注册用户
userService.register(user);
} catch (RuntimeException e) {
e.printStackTrace();
return "redirect:/regist.jsp?msg="+ URLEncoder.encode(e.getMessage(),"UTF-8");
}
return "redirect:/login.jsp";
}
Service层
/**
* @Author: yzh
* @Description: 用户注册功能实现
* @Param: [user]
* @return: void
* @Date: 2021/8/12
*/
@Override
public void register(User user) {
//1.根据用户查询数据库是否存在改用户名
User userDB = userDao.findByUserName(user.getUsername());
//使用Springboot工具类判断user是否为空
if (!ObjectUtils.isEmpty(userDB)) throw new RuntimeException("用户名已存在!");
//2.//使用Springboot工具类进行注册之前给明文加密
String passwordSecret = DigestUtils.md5DigestAsHex(user.getPassword().getBytes(StandardCharsets.UTF_8));
user.setPassword(passwordSecret);
userDao.save(user);
}
DAO层(Mapper.xml文件)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="此处一定要绑定对的接口">
<!--根据用户名查询用户-->
<select id="findByUserName" parameterType="String" resultType="User">
select id,username,realname,password,gender from `user`
where username = #{username}
</select>
<!--注册用户-->
<insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into `user` values(#{id},#{username},#{realname},#{password},#{gender})
</insert>
</mapper>
前端接收后端返回msg信息并使用
<h1>
注册 ---> ${param.msg}
</h1>
由于是通过重定向携带返回信息,所以信息会显示在地址栏中 通过 ${param.msg}即可获取到后端返回的信息