开发环境搭建
一、前端环境搭建
二、后端环境搭建
2.1 项目结构
(1)sky-take-out: maven父工程,统一管理依赖版本,聚合其他掌控子模块
(2)sky-common: 子模块,存放公共类,例如:工具类、常量类、异常类等
- constant 常量类
- context 与项目上下文有关
- enumeration 枚举类
- exception 异常类
- json 处理json转换
- properties 属性,Springboot中的配置属性类
- result 后端的一些返回结果
- utils 工具类
(3)sky-pojo: 子模块,存放实体类、VO、DTO等
- dto: 数据传输对象,通常用于程序中各层之间传递数据。例如:前端传来json数据,后端接收数据并封装为一个对象,这个对象就是dto。
- entity:实体,通常和数据库中的表对应
- vo:视图对象,为前端展示数据提供的对象,例如:列表数据、表单数据,后端把这些数据封装为java对象,返回给前端展示
- pojo:普通java对象,只有属性和对应的getter和setter,其实上三者均属于pojo
(4)sky-server:子模块,后端服务,存放配置文件、Controller、Service、Mapper等
- config:配置类
- controller.admin
- handler
- interceptor:拦截器
- mapper
- service:服务类
- SkyApplication:启动类
三、Git环境搭建
四、数据库环境搭建
序号 | 数据表名 | 中文名称 |
---|---|---|
1 | employee | 员工表 |
2 | category | 分类表 |
3 | dish | 菜品表 |
4 | dish_flavor | 菜品口味表 |
5 | setmeal | 套餐表 |
6 | setmeal_dish | 套餐菜品关系表 |
7 | user | 用户表 |
8 | address_book | 地址表 |
9 | shopping_cart | 购物车表 |
10 | orders | 订单表 |
11 | order_detail | 订单明细表 |
五、前后端联调
(1)将应用程序跑起来,遇到了个版本兼容性问题,折腾了一下,更新通过Maven依赖更新新版 lombok 为 1.18.30 解决
(2)断点调试跟踪登录功能的执行过程
(3)前端发送的请求,是如何请求到后端服务的
前端请求地址:http://localhost/api/employee/login
后端请求地址:http://localhost:8080/admin/employee/login
Q:前后端请求地址不一样还能请求到,为啥呢?
A:nginx反向代理,就是将前端发送的动态请求有ngnix转发到后端服务器
nginx反向代理好处:
- 提高访问速度,可在nginx这层做缓存
- 进行负载均衡:所谓负载均衡就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器
- 保证后端服务安全:后端服务一般部署在公司的局域网,不对外开放。所以前端先把请求发给nginx服务器,有nginx服务器走内网将请求发送给后端服务器处理请求
(4)ngnix反向代理的配置方式:
在ngnix.conf中配置
server{ #server 虚拟主机
listen:80;
server_name localhost
location/api/{ # 处理前端请求中有api的
proxy_pass http://localhost:8080/admin/;#反向代理
}
}
(5)nginx 负载均衡的配置方式
在ngnix.conf下
upstream webservers{
#后端服务的ip地址和端口号
server 192.168.100.128.8080
server 192.168.100.129.8080
}
server{ #server 虚拟主机
listen:80;
server_name localhost
location/api/{ # 处理前端请求中有api的
proxy_pass http://webservers/admin/;#反向代理
}
}
(6)nginx 负载均衡策略
- 轮询:默认方式,每台服务器接收到的请求是比较均衡的
- weight:权重方式,默认为1,权重越高,被分配的客户请求就越多
- in_hash:依据ip分配方式,这样每个访客可以固定访问一个后端服务
- least_conn:依据最少连接方式,把请求优先分配给连接数少的后端服务
- url_hash:依据url分配方式,这样相同的url会被分配到同一个后端服务
- fair:依旧响应时间方式,响应时间短的服务会被优先分配
六、完善登录功能
问题: 员工表中的密码是明文存储,安全性太低
TODO:对密码进行加密
使用MD5加密方式对明文密码加密,该算法是单向的
步骤:
- 修改数据库中明文密码,改为MD5加密后的密文
- 修改java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对
// 进行md5加密,然后再进行比对
password=DigestUtils.md5DigestAsHex(password.getBytes());
导入接口文档
-
前后端分离开发
-
接口设计
-
导入接口文档,这里我用的是apifox
-
Swagger的使用
生成api文档: 通过knife4j生成接口文档
可在设置的网页中进行查看文档和进行接口测试,提高测试效率 -
Swagger常用注解
通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性
1.@Api:用在类上,例如Controller,表示对类的说明
2.@ApiModel:用在类上,例如entity、Dto、VO
3.@ApiModelProperty: 用在属性上,描述属性信息
4.@ApiOperation:用在方法上,例如Controller的方法,说明方法的用途、作用