• style.css

    1. *{
    2. margin: 0;
    3. padding: 0;
    4. }
    5. body{
    6. background:#65cea7 ;
    7. }
    8. .control{
    9. width: 340px;
    10. background: white;
    11. position: absolute;
    12. top: 50%;
    13. left: 50%;
    14. transform: translate(-50%,-50%);
    15. border-radius: 5px;
    16. }
    17. .item{
    18. width: 340px;
    19. height: 60px;
    20. background: #eeeeee;
    21. }
    22. .item div{
    23. width: 340px;
    24. height: 60px;
    25. display: inline-block;
    26. color: black;
    27. font-size: 18px;
    28. text-align: center;
    29. line-height: 60px;
    30. cursor: pointer;
    31. }
    32. .content{
    33. width: 100%;
    34. }
    35. .content div{
    36. margin: 20px 30px;
    37. text-align: left;
    38. }
    39. p{
    40. color: #4a4a4a;
    41. margin-top: 30px;
    42. margin-bottom: 6px;
    43. font-size: 15px;
    44. }
    45. .content input[type="tel"]{
    46. width: 100%;
    47. height: 40px;
    48. border-radius: 3px;
    49. border: 1px solid #adadad;
    50. padding: 0 10px;
    51. box-sizing: border-box;
    52. }
    53. .content input[type="text"]{
    54. width: 55%;
    55. height: 40px;
    56. border-radius: 3px;
    57. border: 1px solid #adadad;
    58. padding: 0 10px;
    59. box-sizing: border-box;
    60. }
    61. .content input[type="password"]{
    62. width: 100%;
    63. height: 40px;
    64. border-radius: 3px;
    65. border: 1px solid #adadad;
    66. padding: 0 10px;
    67. box-sizing: border-box;
    68. }
    69. .content button{
    70. margin-top: 40px;
    71. width: 40%;
    72. height: 40px;
    73. border-radius: 5px;
    74. color: white;
    75. border: 1px solid #adadad;
    76. background: cyan;
    77. cursor: pointer;
    78. letter-spacing: 4px;
    79. margin-bottom: 40px;
    80. }
    81. .content input[type="submit"]{
    82. margin-top: 40px;
    83. width: 100%;
    84. height: 40px;
    85. border-radius: 5px;
    86. color: white;
    87. border: 1px solid #adadad;
    88. background: cyan;
    89. cursor: pointer;
    90. letter-spacing: 4px;
    91. margin-bottom: 40px;
    92. }
    93. .active{
    94. background: white;
    95. }
    96. .item div:hover{
    97. background: #f6f6f6;
    98. }

    6.后端代码

    entity层

    1. @Data
    2. @EqualsAndHashCode(callSuper = false)
    3. @Accessors(chain = true)
    4. @TableName("user")
    5. public class User implements Serializable {
    6. private static final long serialVersionUID = 1L;
    7. @TableId(value = "id", type = IdType.AUTO)
    8. private Integer id;
    9. private String phone;
    10. private String password;
    11. private String code;

    mapper

    1. @Mapper
    2. public interface UserMapper extends BaseMapper {
    3. }

     sevice层

    业务层接口

    1. public interface IUserService extends IService {
    2. String register(User user, HttpSession session);
    3. String sendCode(String phone, HttpSession session);
    4. }

    业务层实现类

    1. @Slf4j
    2. @Service
    3. public class UserServiceImpl extends ServiceImpl implements IUserService {
    4. @Autowired
    5. private UserMapper userMapper;
    6. @Override
    7. public String sendCode(String phone, HttpSession session) {
    8. //这里手机号码为空则报空指针,判断不严谨
    9. if (StringUtils.hasText(phone) && RegexUtil.isMobile(phone)) {
    10. //生成验证码
    11. String yzmCode = RandomUtil.randomNumbers(6);
    12. //保存验证码到session
    13. session.setAttribute("yzmCode", yzmCode);
    14. System.out.println("发送短信验证码成功" + yzmCode);
    15. return "发送短信验证码成功!验证码是:" + yzmCode;
    16. } else {
    17. return "手机号格式错误";
    18. }
    19. }
    20. @Override
    21. public String register(User user, HttpSession session) {
    22. //判断输入手机号的格式
    23. if (StringUtils.hasText(user.getPhone()) && RegexUtil.isMobile(user.getPhone())) {
    24. //从session拿出缓存的验证码
    25. Object cacheCode = session.getAttribute("yzmCode");
    26. String code = user.getCode();
    27. if (cacheCode == null || !cacheCode.equals(code)) {
    28. return "html/register";
    29. }
    30. //3.根据手机号查询用户
    31. User user1 = query().eq("phone", user.getPhone()).one();
    32. if (user1 == null) {
    33. userMapper.insert(user);
    34. return "html/login";
    35. }
    36. session.setAttribute("user1", user1);
    37. return "html/register";
    38. }
    39. return "html/register";
    40. }
    41. }

    controller层

    1. @Controller
    2. @RequestMapping("user")
    3. public class UserController {
    4. @Autowired
    5. private IUserService userService;
    6. @RequestMapping("/code")
    7. @ResponseBody
    8. public String sendCode(String phone, HttpSession session) {
    9. return userService.sendCode(phone, session);
    10. }
    11. @RequestMapping("/register")
    12. public String register(User user, HttpSession session) {
    13. return userService.register(user, session);
    14. }
    15. }

    工具类(utils)

    1. public class RegexUtil {
    2. public static boolean isMobile(String str) {
    3. Pattern p = null;
    4. Matcher m = null;
    5. boolean b = false;
    6. p = Pattern.compile("^[1][3,4,5,8][0-9]{9}$"); // 验证手机号
    7. m = p.matcher(str);
    8. b = m.matches();
    9. return b;
    10. }
    11. }

    7.调试

    前端页面

    1. 未输入手机号的时候,直接点击获取验证码按钮

    2.输入手机号,但是格式错误

    3.输入手机号,并且格式正确

    验证码是模拟生成的

     String yzmCode = RandomUtil.randomNumbers(6);

    4.调试的时候验证码错误或者手机重复注册都是还在注册页面

    8.代码解析

    实体类

    实体类的属性对应数据user表字段

    控制层主要写了两个接口

    一个是发送验证码接口,当我们点击前端页面获取验证码按钮的时候,这个接口响应

    获取验证码事件

    这里主要使用了ajax技术

    控制层调用service的接口里的一个方法

    实现类实现该方法

    方法如下 

    1. @Override
    2. public String sendCode(String phone, HttpSession session) {
    3. //这里手机号码为空则报空指针,判断不严谨
    4. if (StringUtils.hasText(phone) && RegexUtil.isMobile(phone)) {
    5. //生成验证码
    6. String yzmCode = RandomUtil.randomNumbers(6);
    7. //保存验证码到session
    8. session.setAttribute("yzmCode", yzmCode);
    9. System.out.println("发送短信验证码成功" + yzmCode);
    10. return "发送短信验证码成功!验证码是:" + yzmCode;
    11. } else {
    12. return "手机号格式错误";
    13. }
    14. }

    1.首先判断手机号的格式

    2.如果手机号格式不为空,且手机号格式正确

    通过随机生成验证码,这里只是简单的模拟短信验证码,真正的实现这里可以调用相关的方法

    3.将验证码保存到session中

    4.在控制台输出该验证码

    一个是注册接口

    1. @Override
    2. public String register(User user, HttpSession session) {
    3. //判断输入手机号的格式
    4. if (StringUtils.hasText(user.getPhone()) && RegexUtil.isMobile(user.getPhone())) {
    5. //从session拿出缓存的验证码
    6. Object cacheCode = session.getAttribute("yzmCode");
    7. String code = user.getCode();
    8. if (cacheCode == null || !cacheCode.equals(code)) {
    9. return "html/register";
    10. }
    11. //3.根据手机号查询用户
    12. User user1 = query().eq("phone", user.getPhone()).one();
    13. if (user1 == null) {
    14. userMapper.insert(user);
    15. return "html/login";
    16. }
    17. return "html/register";
    18. }
    19. return "html/register";
    20. }
    21. }

    1.判断手机号格式

    2.判断输入的验证码和session保存的验证码是否相等

    3.根据手机号查询该用户是否存在

      User user1 = query().eq("phone", user.getPhone()).one();

  • 相关阅读:
    【考研英语词汇训练营】Day 16 —— bankrupt,remain,regulate,construct,reflect
    (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
    打开C# 大门:Hallo, World!
    机器学习(22)---信息熵、纯度、条件熵、信息增益
    这款全自动自适应工具你用过了吗?autofit.js请求加入你的战场!
    靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol
    c# listbox
    vue 添加NProgress进度条插件
    Linux基本指令笔记
    .NET Evolve 数据库版本管理工具
  • 原文地址:https://blog.csdn.net/m0_67930426/article/details/134420531