开发环境搭建 前端环境搭建 前端工程基于nginx运行。
启动nginx:双击nginx.exe即可启动nginx服务,访问端口号为80,访问链接:苍穹外卖 。
后端环境搭建 后端工程基于maven进行项目构建,并且进行分模块开发。
后端项目结构
名称
说明
sky-take-out
maven父工程,统一管理依赖版本,聚合其他子模块
sky-common
子模块,存放公共类,例如:工具类、常量类、异常类等
sky-pojo
子模块,存放实体类、VO、DTO等
sky-server
子模块,后端服务,存放配置文件、Controller、Service、Mapper等
sky-common sky-common子模块中存放的是一些公共类,可以供其他模块使用。
sky-pojo sky-pojo子模块中存放的是一些entity、DTO、VO。
名称
说明
Entity
实体,通常和数据库中的表对应
DTO
数据传输对象,通常用于程序中各层之间传递数据
VO
视图对象,为前端展示数据提供的对象
POJO
普通Java对象,只有属性和对应的getter和setter
sky-server sky-server子模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类等。
使用Git进行版本控制 1.在IDEA的Settings里设置Git的路径。
2.在窗口VCS中选择Create Git Repository,选择当前工程,点击OK,创建Git本地仓库。
点击Commit,如果Changes里没有显示当前需要提交的工程,是因为当前目录不安全。
打开Git Bash进入当前目录运行git status,会出现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 srr18@srr MINGW64 /e/2_learn/Java-waimai/code/sky-take-out$ git status fatal: detected dubious ownership in repository at 'E:/2_learn/Java-waimai/code/sky-take-out' 'E:/2_learn/Java-waimai/code/sky-take-out' is on a file system that does not record ownership To add an exception for this directory, call: git config --global --add safe.directory E:/2_learn/Java-waimai/code/sky-take-out srr18@srr MINGW64 /e/2_learn/Java-waimai/code/sky-take-out$ git config --global --add safe.directory E:/2_learn/Java-waimai/code/sky-take-out srr18@srr MINGW64 /e/2_learn/Java-waimai/code/sky-take-out (master)$ git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean
提示需要运行git config --global --add safe.directory E:/2_学习/Java-waimai/code/sky-take-out命令,然后就可以成功在IDEA里面成功使用Git进行版本管理。
3.设置Github账户。在Settings中搜索GitHub,点击Log in via GitHub,通过网页验证登录GitHub账号。
4.在Git下点击push,弹出如下窗口。首先设置远程仓库,在Github上新建远程仓库,然后将远程仓库地址填入URL中,点击push。
如果出现如下报错,原因是我使用了Github加速器Watt Toolkit。关闭该加速器即可解决问题。
参考链接:解决ssh: connect to host github.com port 22: Connection refused_ssh: connect to host master port 22: connection re-CSDN博客
1 2 3 4 5 10:15:23.435: [sky-take-out] git -c credential.helper= -c core.quotepath=false -c log.showSignature=false push --progress --porcelain origin refs/heads/master:refs/heads/master --set-upstream ssh: connect to host github.com port 22: Connection refused fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
关闭Watt Toolkit之后进行测试:
1 2 3 C:\Users\srr18>ssh -T git@github.com Hi surourou8! You've successfully authenticated, but GitHub does not provide shell access.# 表示SSH连接成功,但GitHub不提供shell 访问/接入权限。只是提示语,不是Bug,没有任何影响。
重新进行git push上传操作,上传成功。
1 2 3 4 5 6 7 8 9 10:17:38.814: [sky-take-out] git -c credential.helper= -c core.quotepath=false -c log.showSignature=false push --progress --porcelain origin refs/heads/master:refs/heads/master --set-upstream Enumerating objects: 135, done. Writing objects: 100% (135/135), 34.24 KiB | 922.00 KiB/s, done. Total 135 (delta 34), reused 0 (delta 0), pack-reused 0 (from 0) remote: Resolving deltas: 100% (34/34), done. To github.com:surourou8/sky-take-out.git * refs/heads/master:refs/heads/master [new branch] branch 'master' set up to track 'origin/master'. Done
数据库环境搭建 通过数据库建表语句创建数据库表结构。
前后端联调 后端的初始工程中已经实现了登录功能,直接进行前后端联调测试即可。
nginx 前端请求地址:http://localhost/api/employee/login
后端接口地址:http://localhost:8080/admin/employee/login
nginx反向代理,就是将前端发送的动态请求由nginx转发 到后端服务器。
nginx反向代理的好处:提高访问速度、进行负载均衡(负载均衡就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器)、保证后端服务安全。
nginx反向代理的配置方式:(在conf目录下的nginx.conf文件中配置)
1 2 3 4 5 6 7 8 9 server{ listen 80 ; server_name localhost; location /api/ { proxy_pass http://localhost:8080/admin/; } }
nginx负载均衡(本质基于反向代理来实现,都是转发请求)的配置方式:(在conf目录下的nginx.conf文件中配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 upstream webservers{ server 192.168.100.128:8080 ; server 192.168.100.129:8080 ; } server{ listen 80 ; server_name localhost; location /api/ { proxy_pass http://webservers/admin/; } }
nginx负载均衡策略:
名称
说明
轮询
默认方式
weight
权重方式,默认为1,权重越高,被分配的客户端请求就越多
ip_hash
依据ip分配方式,这样每个访客可以固定访问一个后端服务
least_conn
依据最少连接方式,把请求优先分配给连接数少的后端服务
url_hash
依据url分配方式,这样相同的url会被分配到同一个后端服务
fair
依据响应时间方式,响应时间短的服务将会被优先分配
完善登陆功能 问题:员工表中的密码是明文存储,安全性太低。
解决:
1.将密码加密后存储,提高安全性。使用MD5加密方式对明文密码加密。123456经过MD5加密后为e10adc3949ba59abbe56e057f20f883e。
2.修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对。
1 2 3 4 5 6 7 8 9 10 password = DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) { throw new PasswordErrorException (MessageConstant.PASSWORD_ERROR); }
导入接口文档 在Apifox中导入接口文档。项目设置->导入数据->YApi->导入->选择json接口文档导入即可。
Swagger 使用Swagger只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。
官网:https://swagger.io/
Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。
使用方式 1.导入knife4j的maven坐标。
1 2 3 4 5 <dependency > <groupId > com.github.xiaoymin</groupId > <artifactId > knife4j-spring-boot-starter</artifactId > <version > 3.0.2</version > </dependency >
2.在配置类中加入knife4j相关配置。设置静态资源映射,否则接口文档页面无法访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package com.sky.config;@Configuration @Slf4j public class WebMvcConfiguration extends WebMvcConfigurationSupport { @Bean public Docket docket () { 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) { registry.addResourceHandler("/doc.html" ).addResourceLocations("classpath:/META-INF/resources/" ); registry.addResourceHandler("/webjars/**" ).addResourceLocations("classpath:/META-INF/resources/webjars/" ); } }
接口文档访问路径为:http://ip:port/doc.html
在接口文档中进行接口测试。
注意:
Yapi是设计阶段使用的工具,管理和维护接口。
Swagger在开发阶段使用的框架,帮助后端开发人员做后端的接口测试。
常用注解 通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
注解
说明
@Api
用在类上,例如Controller,表示对类的说明
@ApiModel
用在类上,例如entity、DTO、VO
@ApiModelProperty
用在属性上,描述属性信息
@ApiOperation
用在方法上,例如Controller的方法,说明方法的用途、作用