【版本】
当前版本号v20250905
| 版本 | 修改说明 | 
|---|---|
| v20250905 | 初始化版本 | 
任务6.1 修改数据库用户表
【任务目的】
- 掌握编写 SQL 脚本修改数据库
 
【任务环境】
- 内存:至少4G
 - 硬盘:至少空余10G
 - 操作系统: 64位 Windows系统。
 
【任务资源】
- IDEA
 - Maven 3.6
 
【任务要求】
- 现在需要给前面实验3建好的数据库用户表
ms_user新增一列email,用于保存用户的邮箱地址。请新增一个脚本文件V003__ALTER_USER.sql,记录用于修改现有数据库的 SQL 脚本,并且使用数据库客户端(例如:HeidiSQL)执行该脚本。

 
任务6.2 修改注册页面
【任务目的】
- 掌握 HTML 页面的编写
 
【任务环境】
- 内存:至少4G
 - 硬盘:至少空余10G
 - 操作系统: 64位 Windows系统。
 
【任务资源】
- IDEA
 - Maven 3.6
 
【任务要求】
- 修改
register.html,要求新增一个表单和注册按钮,让用户可以提交以下信息到RegisterController。 
- username 用户名
 - password 密码
 - email 邮箱地址
 
表单使用
Post方法提交,提交的地址为signup。在
RegisterController新增一个signup方法,收到注册的信息以后把内容打印出来,并跳转到msg.html。
RegisterController.java新增方法
@RequestMapping(value = "/signup")
    public String signUp(ModelMap map,String username, String password, String email){
        System.out.println(username+" "+password+" "+email);
        return "msg";
    }
- 尝试在页面提交注册信息,在控制台查看
RegisterController打印的注册信息。 
任务6.3 保存注册用户信息到数据库
【任务目的】
- 掌握基于 SSM 编写代码,完成新的功能
 
【任务环境】
- 内存:至少4G
 - 硬盘:至少空余10G
 - 操作系统: 64位 Windows系统。
 
【任务资源】
- IDEA
 - Maven 3.6
 
【任务要求】
- 新增
UserDao接口和UserEntity。 
UserDao.java
package mobileshop.dao;
import mobileshop.entity.UserEntity;
public interface UserDao {
    int save(UserEntity ue);
}
UserEntity.java
package mobileshop.entity;
public class UserEntity {
    private Long userId;
    private String username;
    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Long getUserId() {
        return userId;
    }
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    private String email;
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}
- 新增
UserDaoMapper.xml,请完善以下的SQL语句。 
UserDaoMapper.xmlMyBatis 对应UserDao的 Mapper 配置

<?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="mobileshop.dao.UserDao">
	<insert id="save" parameterType="mobileshop.entity.UserEntity">
		请完善SQL
	</insert>
</mapper>
- 新增
UserService接口和UserServiceImpl类。 
UserService.java
package mobileshop.service;
import mobileshop.entity.UserEntity;
public interface UserService {
    /**
     * 保存用户信息
     * @param ue
     * @return
     */
    boolean save(UserEntity ue);
}
UserServiceImpl.java
package mobileshop.service;
import mobileshop.dao.UserDao;
import mobileshop.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;
    @Override
    public boolean save(UserEntity ue) {
        return userDao.save(ue)>0;
    }
}
- 请利用以上的代码,完善
RegisterController.signUp方法。当用户在页面输入注册信息并提交时,可以保存信息到数据库。 
任务6.4 添加用户信息校验功能
【任务目的】
- 掌握基于 SSM 编写代码,完成新的功能
 
【任务环境】
- 内存:至少4G
 - 硬盘:至少空余10G
 - 操作系统: 64位 Windows系统。
 
【任务资源】
- IDEA
 - Maven 3.6
 
【任务要求】
- 在
UserDao新增existUserNameOrEmail方法。用于查找是否在用户表已存在username或email,存在则发回true,否则返回false 
package mobileshop.dao;
import mobileshop.entity.UserEntity;
import org.apache.ibatis.annotations.Param;
public interface UserDao {
    int save(UserEntity ue);
    boolean existUserNameOrEmail(@Param("username") String username, @Param("email") String email);
}
UserDaoMapper.xml新增对应existUserNameOrEmail方法的配置,请完善其中的SQL语句。
<?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="mobileshop.dao.UserDao">
	<insert id="save" parameterType="mobileshop.entity.UserEntity">
		请完善SQL语句
	</insert>
	<select id="existUserNameOrEmail" parameterType="string" resultType="boolean">
		请完善SQL语句
	</select>
</mapper>
- 完善
UserService接口和UserServiceImpl类。 
UserService.java
package mobileshop.service;
import mobileshop.entity.UserEntity;
public interface UserService {
    /**
     * 保存用户信息
     * @param ue
     * @return
     */
    boolean save(UserEntity ue);
    /**
     * 存在 username 或 email 则返回 true
     * @param username
     * @param email
     * @return
     */
    boolean existUserNameOrEmail(String username,String email);
}
UserServiceImpl.java
package mobileshop.service;
import mobileshop.dao.UserDao;
import mobileshop.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;
    @Override
    public boolean save(UserEntity ue) {
        return userDao.save(ue)>0;
    }
    @Override
    public boolean existUserNameOrEmail(String username,String email){
        return userDao.existUserNameOrEmail(username,email);
    }
}
- 完善
RegisterController.signup方法,加入对用户提交数据的校验,校验逻辑如下: (1)如果username、password、email 任意一个为空,则返回消息用户名,密码,邮箱均不能为空。 (2)如果username或email 已经存在与用户表,则返回消息用户名或Email已存在。 (3)如果用户注册数据成功保存到数据库,则返回消息注册成功,否则返回消息注册失败。 
- 参考代码如下:
 
@RequestMapping(value = "/signup")
    public String signUp(ModelMap map,String username, String password, String email){
        String result="msg";
        UserEntity ue=new UserEntity();
        ue.setPassword(password);
        ue.setUsername(username);
        ue.setEmail(email);
        if(请完善此处代码) {
            if(请完善此处代码) {
        if (请完善此处代码) {
            map.put("msg", "注册成功");
        } else {
            map.put("msg", "注册失败");
        }
            }else{
        map.put("msg", "用户名或Email已存在");
            }
        }else{
            map.put("msg", "用户名,密码,邮箱均不能为空");
        }
        return result;
    }
任务6.5 使用 Ajax 实现注册
【任务目的】
- 掌握基于 AJax 和 SSM 的前端和后端的代码编写
 
【任务环境】
- 内存:至少4G
 - 硬盘:至少空余10G
 - 操作系统: 64位 Windows系统。
 
【任务资源】
- IDEA
 - Maven 3.6
 - jQuery.js
 
链接:https://pan.baidu.com/s/1JtKJfJtb0ruoIB1VtvBWFw
提取码:heis
【任务要求】
- 在
POM.xml新增以下依赖包。 
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.10.8</version>
</dependency>
新增 Javascript 脚本
jQuery.min.js,请从实验资源的网盘链接下载。
新增 Ajax 注册页面
register2.html。
<!DOCTYPE html>
<html lang="cn" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>
<body>
用户名:<input type="text" id="username" name="username"/>
密码:<input type="password" id="password" name="password"/>
邮箱:<input type="text" id="email" name="email"/>
<input type="button" id="registerBtn" value="注册">
<script type="text/javascript">
$(document).ready(function(){
 	$("#registerBtn").click(function(){
 		//获取input中的值
 		var username=$("#username").val().trim();
 		var password=$("#password").val().trim();
 		var email=$("#email").val().trim();
 		$.ajax({
      url:"http://localhost:8082/signup2",
      type:"post",
      data:{"username":username,"password":password,"email":email},
      dataType:"json",
      success:function(result){
        alert(result.errmsg);
      },
      error:function(){
        alert("注册异常");
      }
 		});
 	});
 });
</script>
</body>
</html>
- 新增类
ResMsg用于消息返回。
 
package mobileshop.vo;
public class ResMsg {
    private String errcode;
    private String errmsg;
    private Object result;
    public String getErrcode() {
        return errcode;
    }
    public void setErrcode(String errcode) {
        this.errcode = errcode;
    }
    public String getErrmsg() {
        return errmsg;
    }
    public void setErrmsg(String errmsg) {
        this.errmsg = errmsg;
    }
    public Object getResult() {
        return result;
    }
    public void setResult(Object result) {
        this.result = result;
    }
}
- 在
RegisterController增加2个方法,其中register2方法可以访问 Ajax 注册页面,signup2方法用于接收 Ajax 注册的信息并返回注册结果。 
  @RequestMapping(value = "/register2")
  public String register2() {
    return "register2";
  }
  @RequestMapping(value = "/signup2")
  @ResponseBody
  public ResMsg signup2(@RequestBody String username, @RequestBody String password, @RequestBody String email){
    ResMsg resmsg=new ResMsg();
    //请完善注册功能,业务逻辑和上面signup方法保持一致
    return resmsg;
  }
