我的Java Web之路61 - 实现用户注册功能

我们先来考虑User实体类,前面已经提到过用户提交的注册信息至少包含用户名和密码,所以User实体类也必须有这两项。。这是因为在此业务逻辑中我们生成了用户ID,而此用户ID有可能被上层组件用到。本篇文章简单实现了用户注册的功能,还有很多可以优化改进的地方:...




<meta charset="UTF-8">
租房网 - 登录•

<body>
	

还没有注册?

网上注册这事儿,可是咱平常用网站时最基本也是最关键的功能!今儿就给大伙儿说说我是咋设计并搞定这个注册系统的,包括网页怎么显示,数据怎么存等等。

用户注册页面的设计

首先,咱们来看下注册页的设计。虽然看着简单,其实里面有不少小细节。用户得在这儿填个用户名和密码,再点下注册就搞定。这个页面的设计要注重用户体验,比如输入框的大小,按钮的位置啥的。而且还要保证在各种设备上都能正常显示,所以得做点儿响应式设计的活儿。

设计这页时,我就想到大家很容易出错,比如说输错密码格式或用户名已经有人用过了。所以,我就在页面里加上一些验证功能一旦你填入不对的信息注册机出现success,马上就能提醒你纠正哦~这种设计能让大家省去不少麻烦,提高咱们账号注册的成功率

注册请求的处理

当你点下那个注册按钮时,系统就会接收你的注册请求!这东西先要传送到控制器那块去弄一弄。控制器的活儿就是收这么个请求,然后再把它交给服务层继续处理。当中,控制器得确保请求没问题,比如看看安全措施啊之类的。




<meta charset="UTF-8">
租房网 - 注册成功!

<body>
	

注册成功!请登录

看这儿!服务层是注册系统的中心,专门处理所有的生意逻辑。这里,我们得看看用户提交的东西合不合适,比如说密码要一样,用户名不能已用等等。这些都过关后,它就会给新用户编号,然后把他们的信息存进资料库里。这一步可得小心点儿,一点点小错都会让注册泡汤。

用户ID的生成

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



<meta charset="UTF-8">
租房网 - 注册失败!

<body>

注册失败!请重新注册

失败原因:${errorMessage}

在用户注册这事儿上,咱们得慎重对待用户ID的生成。这个ID可是用户的独一无二的身份象征,说不定以后啥时候就能用到。为了保证它的唯一性和安全性,我们的系统会自动生成用户ID,这样就不用担心用户手输出错。

选用户ID的时候,要考虑到它能带多少其他属性。所以,我们选了字符串类型,能多放点东西!不过,有长处就有短板,用得爽了也可能遇到麻烦,像字符串过长,速度变慢之类的。所以,在挑数据类型的时候,咱们得多想想,找个最适合自己系统的办法才行。

数据库的设计与实现

在用户注册系统里,数据库的搭建很重要!得给每个注册用户建个档案,把他们的资料都放进去。至于这里面的门道,就涉及到怎么保证数据安全不被偷,还有同时来很多请求怎么办等等这些问题了。

那咱们这儿就是用嵌入的方式来搞用户列表,也就是得自己动手写代码来搞定它。虽然有点麻烦,但这样能保证数据的一致性和安全!

package houserenter.entity;
public class User {
	private String id;
	private String name;
	private String password;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", password=" + password + "]";
	}
	
}

业务逻辑的实现

在服务层,搞业务逻辑最关键!咱们得写代码处理用户注册这样的事情,每个步骤都要保证顺利进行,对?当然想得周全点儿,比如用户输错信息,或者数据库出毛病啥的,这些都得考虑进去。

咱们这儿有个简易的业务逻辑来应对注册申请,主要是关注两次输入的密码对不对得上,还有用户名是不是已经有人用过了。看着这玩意儿挺简单的,但其实里面有些小秘密,比如密码要多长多复杂,再比如说碰到用户名被占用该咋办?

package houserenter.mapper;
import houserenter.entity.User;
public interface UserMapper {
	int cteateTable();
	
	int insert(User user);
	
	User selectByName(String name);
}

异常处理

要写好程序,处理异常可不能少!各种可能出现的意外都得想清楚并写代码去应对。我们用Java里的异常机制来搞定各种问题,比如密码不对,用户名已存在之类的。

<?xml version="1.0" encoding="UTF-8" ?>


	
		create table if not exists user(id varchar(36) primary key, name varchar(32), password varchar(16))
	
	
		insert into user(id, name, password) values(#{id}, #{name}, #{password})
	
	
	

处理异常不光是让系统更稳重,还能帮咱们搞清楚到底哪里出了状况。就像抓小偷那样,快速抓住异常,修好它。这样一来,咱们在编程序的时候就要特别留心,对各种各样可能出现的毛病都得小心翼翼地搞定。

注册机出现success

并发请求的处理

在真实的生产环境里,系统常常要对付好多人同时来注册的情况。这些人要是同时用数据库做事儿,那就得注意并发的事儿了。比如说,假如两个人同时想注册同一个名字,那数据库可就容易出错。

为了防止这种情况发生,我们得想点办法。比如注册机出现success,咱们可以在数据库或者应用程序层上找解决方案。我们这边就选了在数据库层面给user表的name列加了个唯一性的规定。这样就能保证同样的名字不能重复注册了。当然,你也可以考虑把相关操作都放在一起组成一个大事务,让数据保持一致性。

总结与展望

package houserenter.service;
import java.util.UUID;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import houserenter.entity.User;
import houserenter.mapper.UserMapper;
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	
	@PostConstruct
	public void init() {
		userMapper.cteateTable();
	}
	
	public User register(String userName, String password, String passwordConfirmed) throws Exception {
		
		if (!passwordConfirmed.equals(password)) {
			throw new Exception("两次输入的密码不一致,请重新输入!");
		}
		
		User user = userMapper.selectByName(userName);
		if (user != null) {
			throw new Exception("用户名 " + userName + " 已经注册过,请选择其他用户名!");
		}
		
		user = new User();
		user.setId(UUID.randomUUID().toString());
		user.setName(userName);
		user.setPassword(password);
		userMapper.insert(user);
		
		return user;
	}
}

搞定!我们终于设计并实施了用户注册系统。从网页设计到数据库操作,每个环节我们都仔仔细细地考虑过咯。尽管,这个系统还能更好,但是已经足够应付最基础的用户注册要求。

未来咱们还能给这玩意儿优化升级,比如加些安全验证啥的,让它更靠谱点儿。当然了注册机出现success,也别忘了把它推广到别的地方去,好让更多人用得上。

最后,我想要问问你们:咱们做一个用户注册系统的话,哪步最关键?快来评论区说说看,顺便给文章点个赞转发一下!

相关文章

发表评论