Java项目苍穹外卖:开发环境搭建

开发环境搭建

前端环境搭建

前端工程基于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子模块中存放的是一些entityDTOVO

名称 说明
Entity 实体,通常和数据库中的表对应
DTO 数据传输对象,通常用于程序中各层之间传递数据
VO 视图对象,为前端展示数据提供的对象
POJO 普通Java对象,只有属性和对应的getter和setter

sky-server

sky-server子模块中存放的是 配置文件、配置类、拦截器、controllerservicemapper、启动类等。

使用Git进行版本控制

1.在IDEASettings里设置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/; #反向代理
}
}
#http://localhost/api/employee/login请求能匹配到api这个字符串,nginx通过反向代理将该请求转发到后端指定的地址http://localhost:8080/admin/,剩余的动态请求路径/employee/login,则会追加到http://localhost:8080/admin/后面,得到完整的路径http://localhost:8080/admin/employee/login。

nginx负载均衡(本质基于反向代理来实现,都是转发请求)的配置方式:(在conf目录下的nginx.conf文件中配置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream webservers{ # 转发地址: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
//com.sky.service.impl包下的EmployeeService类

//密码比对
// TODO 后期需要进行md5加密,然后再进行比对
// 对前端传过来的明文密码进行md5加密处理
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.导入knife4jmaven坐标。

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;

//配置类,注册web层相关组件
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 通过knife4j生成接口文档
* @return
*/
@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;
}

/**
* 设置静态资源映射
* @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/");
}
}

接口文档访问路径为:http://ip:port/doc.html

在接口文档中进行接口测试。

注意:

  1. Yapi是设计阶段使用的工具,管理和维护接口。
  2. Swagger在开发阶段使用的框架,帮助后端开发人员做后端的接口测试。

常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

注解 说明
@Api 用在类上,例如Controller,表示对类的说明
@ApiModel 用在类上,例如entity、DTO、VO
@ApiModelProperty 用在属性上,描述属性信息
@ApiOperation 用在方法上,例如Controller的方法,说明方法的用途、作用

Java项目苍穹外卖:开发环境搭建
http://surourou8.github.io/2024/11/21/Java项目苍穹外卖:开发环境搭建/
作者
Su Rourou
发布于
2024年11月21日
许可协议