前言
该系列博客用于记录黑马苍穹外卖项目的学习。
准备工作
先下载好提供的资料包
项目技术
开发中会使用到的技术:
前端环境搭建
将项目提供好的nginx-1.20.2文件夹保存下来,想要启动前端工程,只需双击nginx.exe即可(每次开机后启动一下),可在nginx-1.20.2\conf的nginx.conf中更改默认端口号。
后端环境搭建
将提供好的sky-take-out导入到你的IEDA中
整体结构
sky-common
sky-common子模块中存放的是一些公共类,可以供其他模块使用。
如exception包下存放的是异常情况,utils下存放的是工具类,这些都可以在我们的sky-server中去使用
sky-pojo
sky-server
sky-server子模块中存放的是一些配置文件、配置类、拦截器、controller、service、mapper、启动类等。
我们在该模块进行后端功能的开发。
数据库环境搭建
将提供好的sky.sql复制粘贴到DataGrip中执行。
登录功能流程
在提供的sky-takeout项目中已经为我们写好了登录接口,我们来分析一些其流程:
- 启动项目之后,EmployeeController会调用EmployeeService中的login方法,接下来在EmployeeService的实现类中会获取到username和password
- 然后会调用EmployeeMapper中的getByUserName()方法并将username作为参数,在该方法中会根据username去数据库中查询信息并返回一个Employee对象
- 接下来在EmployeeServiceImpl中我们会先后判断用户名是否存在、密码是否正确、账号是否被锁定,当用户名存在、密码正确、账号没被锁定,将Emoployee对象返回
- 回到EmployeeController中,会生成一个JWT令牌(token),然后将id、username、name、token封装成一个EmployeeLoginVO返回给前端
代码特点
- 将所有返回结果封装成Result
- 接收参数时使用DTO对象,返回数据给前端时使用VO对象
- 传进来的配置项封装成配置属性类
Nginx
概述
在登录功能中,前端发送的请求地址和后端的接口地址并不一致,那前端发送的请求是如何请求到后端的呢?
这就要用到nginx反向代理,就是将前端发送的请求由nginx转发到后端服务器。
nginx反向代理的好处:
- 提高访问速度
- 进行负载均衡(负载均衡:把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器)
- 保证后端服务安全
反向代理配置
反向代理:将前端发送的请求转发到后端服务器。
负载均衡配置
负载均衡:将负载(工作任务、访问请求)进行平衡,分摊到多个操作单元(服务器、硬件)上进行。
上面两个server表示两台服务器,负载均衡策略可通过配置指定:
上面没有指定策略,就是默认策略轮询(你一次我一次)
Swagger
按照Swagger定义的规范去定义接口及接口相关信息,就可以做到生成接口文档,以及在线接口调试页面。常用于开发人员做接口测试。
使用方式
- 导入knife4j的maven坐标
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
- 在配置类中加入knife4j相关配置
@Bean
public Docket docket() {
log.info("准备生成接口文档...");
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
//指定扫描的包
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
- 设置静态资源映射,否则接口文档页面无法访问
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始设置静态资源映射...");
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
常用注解
通过注解可以控制生成的接口文档,使接口文档具有更好的可读性。
@Api(tags = "员工相关接口")
@ApiOperation(value = "员工登录")
@ApiModel(description = "员工登录时传递的数据模型")
@ApiModelProperty("用户名")