学子商城

项目
学子商城
注册 > 登录 > 修改密码 > 修改资料 > 上传头像
遵循的开发顺序:持久层 > 业务层 > 控制器层 > 界面。

创建数据库 数据表
创建项目:打开Spring Boot的官方网站:https://start.spring.io/
先在配置文件application.properties中添加数据源的配置:

spring datasource

spring.datasource.url=jdbc:mysql://localhost:3306/tedu_store?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
配置好测试
创建实体类BaseEntity(基类)、User
持久层接口UserMapper(处理用户数据,添加抽象方法)
在application.properties中添加XML文件位置的配置:

mybatis

mybatis.mapper-locations=classpath:mappers/*.xml
在resources下创建名为mappers的文件夹,然后,在该文件夹下添加映射的XML,配置以上抽象方法的映射
配置好测试
业务层接口IUserService
业务层易出现异常exception先创建对应的异常类
创建实现类UserServiceImpl类,并实现IUserService接口:
添加@Service注解;
声明@Autowired private UserMapper userMapper;持久层对象;
添加与持久层对应的方法(甚至方法的声明几乎相同,如果是增删改方法,在业务层中,返回值可以调整为void,并通过异常表示操作失败),
并声明为私有,通过调用持久层对象来完成方法:在公有的方法中编写思路
编写完测试
控制器类向客户端响应JSON格式的数据,需要自定义数据类型ResponseResult
控制器BaseController所有控制器类的基类。主要用于:统一处理异常;提供某些公共的资源
添加正确响应时的代号的常量,便于统一调用并增强代码的可读性:
public static final Integer SUCCESS = 200;
创建UserController类 添加@RestController、@RequestMapping("/user")注解
所有的控制器类本身都不实现功能,而是通过Service组件来实现,所以,还应该声明
@Autowired
private IUserService userService;
完成后在浏览器中测试
界面编写ajax代码

1.用户-注册-持久层
UserMapper接口

2.用户-注册-业务层
UserServiceImpl
IUserService接口

3.用户-注册-控制器层
BaseController
UserController

上传头像
在spring-mvc.xml需要配置CommonsMultipartResolver(多文件上传,提供上传方式)
添加依赖

commons-fileupload
commons-fileupload
1.3.3

创建Java类:UploadController
添加注解:@Controller、@RequestMapper、@ResponseBody、@RequestParam
首先确定储存文件的文件夹parent
获取原文件名 originalFilename
获取扩展名suffix
确定新文件名fileName
保存到目标文件dest
保存文件 file.transferTo(dest)

根据MD5加密的密码
加密规则可以自由设计:
盐值 拼接 原密码 拼接 盐值
循环执行10次摘要运算
for(int i=0;i<10;i++){
str=DigestUtils.md5DigestAsHex(str.getBytes()).toUpperCase();
}
处理密码加密
获取随机的UUID作为盐值
String salt = UUID.randomUUID().toString().toUpperCase();
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。
按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。

设计“处理(注册,登录,修改)数据的请求”:
请求路径:
请求方式:
请求参数:
响应数据:

ajax代码
// 为按钮绑定单击事件
KaTeX parse error: Expected '}', got 'EOF' at end of input: … var data=(“表单的id”).serialize();
//日志
console.log(“参数:” + data);
// 发出ajax请求,并处理结果
$.ajax({
“url”: url,
“data”: data,
“type”: “POST”,
“dataType”: “json”,
“success”: function(json) {
判断是否成功
},
“error”:function(xhr,text,errorThrown){
处理错误
location.href=“login.html”;(可以跳转为最初页面)
}

});
});

xhr:XML HttpRequest
text:textStatus 错误信息
errorThrown:捕获的错误对象

// 页面初始化时加载用户数据
$(document).ready(function(){
$.ajax();
});

将数据显示到各个控件上,为各控件配置id 通过JQuerey的id选择器
调用val函数
$("#username").val(user.username)
性别涉及到两个控件 需要分别为2个控件设计不同的id,例如gender-male和gender-female
判断:
if (user.gender == 0) {
$("#gender-female").attr(“checked”, “checked”);
}
if (user.gender == 1) {
$("#gender-male").attr(“checked”, “checked”);
}

状态码:
响应代号2xx:正确响应
3xx:重定向错误
4xx:请求出错
5xx:服务器出错

猜你喜欢

转载自blog.csdn.net/GK18733535990/article/details/85869900