1.首先定义user这个实体类以及他的实现方式
public class User {
private int id;
private String username;
private String password;
private String salt;
private String email;
private int type;
private int status;
private String activationCode;
private String headerUrl;
private Date createTime;
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 getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getActivationCode() {
return activationCode;
}
public void setActivationCode(String activationCode) {
this.activationCode = activationCode;
}
public String getHeaderUrl() {
return headerUrl;
}
public void setHeaderUrl(String headerUrl) {
this.headerUrl = headerUrl;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + ''' +
", password='" + password + ''' +
", salt='" + salt + ''' +
", email='" + email + ''' +
", type=" + type +
", status=" + status +
", activationCode='" + activationCode + ''' +
", headerUrl='" + headerUrl + ''' +
", createTime=" + createTime +
'}';
}
}
2.访问注册页面
点击顶部区域的链接,要打开注册页面,该动态跳转路径
3.在SERVICE层
对提交后的数据的处理逻辑。
首先我们需要验证表单里面的选项,用户名,密码,邮箱等等是否为空,处理这些情况。
然后根据传进来的用户对象的用户名称判断数据库里面是否有同名的。
我们把这些处理结果放进一个map表里面返回去。
最后是用户信息填写正确,可以注册了,用一个user对象,把相应的注册信息都设置一下,比如密码使用MD5加密一下。
用户信息填写正确,我们需要向注册邮箱发送一封确认邮件,
public Mapregister(User user){ Map map = new HashMap<>(); //空值处理 if(user==null) { throw new IllegalArgumentException("参数不能为空!"); } if(StringUtils.isBlank(user.getUsername())) { map.put("usernameMsg","账号不能为空"); return map; } if(StringUtils.isBlank(user.getPassword())) { map.put("passwordMsg","密码不能为空"); return map; } if(StringUtils.isBlank(user.getEmail())) { map.put("emailMsg","邮箱不能为空"); } //判断是否已经存在 User user1 = userMapper.selectByName(user.getUsername()); if(user1!=null) { map.put("usernameMsg","用户账号已经存在!"); return map; } User user2 = userMapper.selectByEmail(user.getEmail()); if(user2!=null) { map.put("emailMsg","该邮箱已经注册!"); return map; } //注册用户 user.setSalt(CommunityUtil.generateUUID()); user.setPassword(CommunityUtil.md5(user.getPassword()+user.getSalt())); user.setType(0); user.setStatus(0); user.setActivationCode(CommunityUtil.generateUUID()); user.setHeaderUrl(String.format("http://image.nowcoder.com/head/%dt.png",new Random().nextInt(1000))); user.setCreateTime(new Date()); Context context=new Context(); context.setVariable("email",user.getEmail()); String url=domain+contextPath+"/activation/"+user.getId()+"/"+user.getActivationCode(); context.setVariable("url",url); String content=templateEngine.process("mail/activation.html",context); return map; }
4.Controller层
调用service层的register函数,如果返回的map为空,说明注册信息是合法的
如果map不为空,识别是什么类型的错误,通过model往前台传数据,通过el表达式 ${}可以获取到。
@RequestMapping(path = "/register",method = RequestMethod.POST)
public String register(Model model, User user){
Mapmap = 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";
}
}
5.前台代码,主要是register这个页面的代码,这是一些主要内容
注 册



