本节解决项目前端 管理端(Web)和后端 后端服务(java)环境搭建
其中前端 用户端(小程序)的环境搭建 在后文编写微信小程序代码时候再进行
一.前端
进入nginx服务器标准的目录结构, 进入html再进入sky
想要运行nginx服务必须满足路径中没有汉字的条件, 即需要更改图中niginx-1.20.2的位置
若满足条件则双击nginx.exe 启动nginx服务
访问本地端口号80 效果如下
二 后端搭建
二. (1)
sky-take-out 是一个父工程, 下面由common, pojo, server三个子工程
项目模块功能
二.(2)
constant 常量类 context 上下文类 enumeratation枚举类 exception全局异常类 json 处理json转换的类 properties包包含springboot中的配置属性类:把我们配置文件的一些配置项封装成对象,放入properties包 result 结果类 把后端返回的结果类放在result包中, utils工具类
二.(3)
Entity:实体 表里边的字段和类中属性也会有对应关系
DTO: 数据传输对象 : 比如从前端传入一个json数据, 后端则需要接受这个数据并把数据封装成java对象, 而这个java对象往往使用DTO来接受
VO: 后端生成的数据封装成Java对象,之后可以通过一个VO对象来返回,VO就是专注于前端页面展示的一种视图对象
二.(4)
三
将项目上传至git
gitignore中的文件不需要上传
四 数据库环境
五 前后端联调
五 (1) 连接数据库
1 使用mybatis需要让springboot项目中的entity实体对应数据库表中数据
2 引入Mybatis相关依赖, 并在application-dev.yml文件中修改为自己数据库的用户名,密码等信息, 完成数据库连接.
数据库连接四要素:
driver-class-name: com.mysql.cj.jdbc.Driver => 1 配置驱动类 host: localhost port: 3306 database: sky_take_out => 2 指定要连接那台数据库的服务器(localhost), 要连入的端口(3306)以及数据库名(sky_take_out) username: root => 3 连入数据库的用户名 password: 1111 => 4 连入数据库的密码
五. (2) 联接测试
运行启动类SkyApplication中的main()方法. 启动连接 右下角出现server started 连接成功在前端登录界面输入用户名 admin 密码123456
localhost服务器中sky_take_out中的employee表中初始默认带有
用户username : admin
密码password :123456
登录成功 右上角错误先忽略
五. 登录功能实现过程
前端向后端发送登录请求, 在最开始会发送到controller.admin 包中的EmployeeController类下
在EmployeeController类下加入断点, 点击前端界面登录 可以看到username和password被提交到后端
进入下一步, login方法观察如何实现
=========================================================================
login方法被定义在EmployeeService接口中,并在EmployeeServiceImpl类中重写login方法
进入重写后的login方法 使用employMapper中的getByUsername方法根据用户名查询数据库中的数据
employMapper被定义在EmployMapper类中
我们进入EmployMapper类 根据用户名查询员工信息
之后回到EmployeeServiceImpl类中, 会根据拿到的数据库账号密码去和输入的账号密码去比对
并且判断账号是否锁定我们用到了设置好的常量
==================================================================================================================================================
具体说一下这个异常处理:
加入输入密码不匹配数据库中的密码, 则抛出一个密码错误异常类PasswordErrorException
PasswordErrorException类继承基础异常类BaseException, 基础异常类继承RuntimeException
而其中的参数msg由常量类MessageConstant提供,该类为每种异常提供一个常量名称
再完成抛出异常后, 该密码错误异常PasswordErrorException被全局异常处理器(处理项目中抛出的业务异常)GlobalExceptionHandler 接收, 并且在接受过程中, PasswordErrorException类型异常
被向上转型成为父类BaseException类型异常,便于管理.
在log.error("异常信息:{}", ex.getMessage()); 记录日志后
包装成Result类返回给前端
==================================================================================================================================================
最后返回employ实体对象
=========================================================================
=========================================================================
通过employ.getId()获取主键值 装入claims
@ConfigurationProperties(prefix = "sky.jwt") 配置属性类的注释,用来封装springboot配置文件当中的配置项
在springboot配置文件中找sky.jwt
之后这些配置项封装到 JwtProperties jwtProperties对象中,并被注入到EmployeeController
========================================================================
成功得到令牌token, 与主键值, 用户名,姓名, 一起封装进EmployeeLoginVO employeeLoginVO
最后,再把EmployeeLoginVO employeeLoginVO封装成Result 返回给前端
六. 思考
前端发送请求地址
后端接口地址
并且后端基于内嵌的Tomcat服务器因此有着8080端口号
优点
缓存(速度) 多台服务器同时进行 前端无法直接连到后端
server代表一个虚拟主机, 监听的端口号为80,特定请求转发到指定后端
七 完善登录功能
八. Swagger
我们选择WebMvcConfiguration类作为我们的配置类
@Bean注解 由Spring创建对象并管理对象
构建生成的接口文档的描述信息, 这个对象构造好之后
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
我们通过常量 DocumentationType.SWAGGER_2(Swagger版本)
以及上面创建好的ApiInfo对象
select()方法
指定生成接口所需要扫描的包 com.sky.controller 若包有子包也会一起扫描 (通过反射机制解析controller类以及类方法,生成接口文档)
来构造Docket对象生成接口文档
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
将我们生成接口文档的文件放在这个路径下边 "classpath:/META-INF/resources/" "classpath:/META-INF/resources/webjars/" 所以在我们发出这些页面请求时"/doc.html", "/webjars/**"需要把它映射到真正的资源上面去 并且addResourceHandlers()这个方法名称不能随便写,因为这是重写父类WebMvcConfigurationSupport.calss (Spring提供)中的方法 配置完成后,运行程序可以从日志上看出方法2和方法3都参与运行
接口测试:测试登录功能