苍穹外卖项目DAY01

news2024/11/16 2:25:38

苍穹外卖项目Day01

1、软件开发整体介绍

1.1、软件开发流程

1.2、角色分工

  • 项目经理:对整个项目负责,任务分配、把控进度
  • 产品经理:进行需求调研,输出需求调研文档、产品原型等
  • UI设计师:根据产品原型输出界面效果图
  • 架构师:项目整体架构设计、技术选型等
  • 开发工程师:代码实现
  • 测试工程师:编写测试用例,输出测试报告
  • 运维工程师:软件环境搭建、项目上线

1.3、软件环境

  • 开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问
  • 测试环境(testing):专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问
  • 生产环境(production):即上线环境,正式提供对外服务的环境

2、项目介绍

定位:专门为餐饮企业(餐厅、饭店)定制的一款软件产品

功能架构:体现项目中的业务功能模块

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

产品原型:用于展示项目的业务功能,一般由产品经理进行设计

技术选型:展示项目中使用到的技术框架和中间件等

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、开发环境搭建

整体结构

  • 前端:管理端(Web)、用户端(小程序)
  • 后端服务(Java)

3.1、前端环境搭建

开启nginx

3.2、后端环境搭建

3.2.1、熟悉项目结构

后端工程基于maven进行项目构建,并且进行分模块开发

如果maven加载不了可以加入镜像下载

  <repositories>
        <repository>
            <id>huawei</id>
            <name>华为云</name>
            <url>https://repo.huaweicloud.com/repository/maven/</url>
            <releases><enabled>true</enabled></releases>
        </repository>

        <repository>
            <id>aliyun</id>
            <name>阿里云</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases><enabled>true</enabled></releases>
            <!--snapshots默认是关闭的,需要开启  -->
            <!--禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。
             	但是如果是私服仓库,可以激活snapshot的支持 -->
            <snapshots><enabled>false</enabled></snapshots>
        </repository>
    </repositories>
3.2.2、使用git进行版本控制

使用Git进行项目代码的版本控制,具体操作:

  • 创建Git本地仓库

  • 创建Git远程仓库

    • 复制仓库链接
      -

  • 将本地文件推送到Git远程仓库(选中全部)

​

3.2.3、数据库环境搭建

通过数据库建表语句创建数据库表结构:

在数据库中导入sql文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在idea中连接数据库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把配置文件中的用户名和密码改为自己的

3.2.4、前后端联调

后端的初始工程中已经实现了登录功能,直接进行前后端联调测试即可

编译项目:

编译成功后启动程序:

确保提前运行了nginx.exe,端口号为:localhost:80如果没有页面显示需要手动修改端口号

用户名:admin、密码:123456

成功登录!

前端发送的请求,是如何请求到后端服务的?

前端请求地址:http://localhost/api/employee/login

后端接口地址:http://localhost:8080/admin/employee/login

nginx反向代理,就是将前端发送的动态请求由nginx转发到后端服务器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nginx反向代理的好处:

  • 提高访问速度
  • 进行负载均衡
    • 所谓负载均衡,就是把大量的请求按照我们特定的方式均衡的分配给集群中的每台服务器
  • 保证后端服务安全

nginx反向代理的配置方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nginx负载均衡的配置方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nginx负载均衡策略:

名称说明
轮询默认方式
weight权重方式,默认为1,权重越高,被分配的客户端请求就越多
ip_hash依据ip分配方式,这样每个访客可以固定访问一个后端服务
least_conn依据最少连接方式,把请求优先分配给连接少的后端服务
url_hash根据url分配方式,这样相同的url会被分配到同一个后端服务
fair依据响应时间方式,响应时间短的服务将会被优先分配

3.3、完善登录功能

问题:员工表中的密码是明文存储,安全性太低

1、将密码加密后存储,提高安全性

2、使用MD5加密方式对明文密码加密(不可逆)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤:

1、修改数据库中明文密码,改为MD5加密后的密文(e10adc3949ba59abbe56e057f20f883e)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码对比

EmployeeServiceImpl

 //密码比对
        // TODO 后期需要进行md5加密,然后再进行比对
        //对前端传过来的明文密码进行md5加密处理
        password = DigestUtils.md5DigestAsHex(password.getBytes());

3、测试:登录成功

4、导入接口文档

4.1、前后端分离开发流程

4.2、操作步骤

将课程资料中提供的项目接口导入YApi

打开yapi网页:YApi Pro-高效、易用、功能强大的可视化接口管理平台

5、Swagger

5.1、介绍

使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网:API Documentation & Design Tools for Teams | Swagger

Knife4j是Java MVC框架集成Swagger生成Api文档的增强解决方案

5.2、使用方式

1、导入maven坐标

   <!--        Knife4j-->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>3.0.2</version>
            </dependency>

2、在配置类中加入knife4j相关配置

/**
 * 通过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;
}

3、设置静态资源映射,否则接口文档页面无法访问

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

3、在浏览器中输入http://localhost:8080/doc.html#/home

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

登录测试:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.2、常用注解

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射

环境搭建 这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a;域横向移动-PTH-Mimikatz&NTLM 什么是pth&#xff1f; PTH Pass The Hash &#xff0c;通过密码散列值 ( 通常是 NTLM Hash) 来进行攻击。在域环境中&#xff0c;用户登录计算机时使用的域账号&…

Linux_Shell判断循环,函数实例,状态码-07

一&#xff1a;分支语句 结束语句等于开始语句得单词反着写 1.1 if语句 if 表达式 then逻辑处理 elif 表达式 then逻辑处理 else逻辑处理 fi 1.1.1 单支语句 1.1.2 双分支语句 1.1.3 多分支语句 1.2 case条件结构语句 1.2.1 case语法结构 case 表达式 in 值) ;; esac 1.2…

Redis14-缓存同步

目录 缓存同步策略 安装Canal 监听Canal 缓存同步策略 缓存数据同步的常见方式有三种&#xff1a; 1.设置有效期&#xff1a;给缓存设置有效期&#xff0c;到期后自动删除&#xff0c;再次查询时更新 优势&#xff1a;简单、方便缺点&#xff1a;时效性差&#xff0c;缓存…

【CPP】CPP的STL(前篇)

目录 12 STL(前篇)12.1 什么是STL12.2 string类12.2.1 什么是string12.2.2 string类的构造函数12.2.3 string类的析构函数12.2.4 string类的[]重载12.2.5 string类的迭代器的简单了解12.2.6 auto关键字12.2.7 范围for12.2.8 反向迭代器 -- reverse12.2.9 const迭代器12.2.10 CP…

superset定制化配置修改总结

1.需要想用iframe引入dashboard时&#xff0c; URL 参数可用于修改仪表板的呈现方式&#xff0c;standalone0 属性枚举描述standalone0仪表盘正常显示1顶部导航已隐藏2顶部导航 标题被隐藏3顶部导航 标题 顶级标签被隐藏show_filters0渲染没有过滤栏的仪表板1&#xff08;默…

深度学习 —— 个人学习笔记16(目标检测和边界框、目标检测数据集)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 三十二、目标检测和边界框 import torch import matplotlib.pyplot as plt from matplotlib_inline import backend_…

Python爬虫开发:BeautifulSoup、Scrapy入门

在现代网络开发中&#xff0c;网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据&#xff0c;并且可以用于各种用途&#xff0c;如数据收集、信息聚合和内容监控等。在Python中&#xff0c;有多个库可以用于爬虫开发&#xff0c;其中BeautifulSoup和Scrapy是两个非…

CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略

文章目录 CVE-2024-38077&#xff1a;Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略1 漏洞描述2 漏洞影响2.1 处置优先级&#xff1a;高2.2 影响版本 3 漏洞检测3.1 漏洞检测工具3.2 漏洞检测工具使用介绍3.2.1 漏洞检测工具当前支持三种方式检测3.2.2 漏洞…

常见的三个事务问题(脏读/幻读/不可重复读)

常见的三个事务问题&#xff08;脏读/幻读/不可重复读&#xff09; 脏读 脏读&#xff08;Dirty Read&#xff09;是指在一个事务中&#xff0c;读取了另一个未提交事务的数据。 具体来说&#xff0c;脏读的过程如下&#xff1a; 1. 事务A开始&#xff0c;对某一行数据进行…

C++学习笔记之数组

C学习笔记之数组 https://www.runoob.com/cplusplus/cpp-arrays.html C当中&#xff0c;数组是用于存储固定大小的相同类型元素的顺序集合 数组是整体作为一个变量&#xff0c;其中又包含多个单独变量&#xff0c;作为其元素&#xff0c;如数组变量a&#xff0c;其包含a[0]~a[…

html+css+js网页制作 淘宝首页1个页面带js

htmlcssjs网页制作 淘宝首页1个页面带js 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&…

【并查集、树的直径】P2195 HXY造公园 题解

题意 P2195 codeforces 455c&#xff0c;两道一样的题 给出一个由 n n n 个点&#xff0c; m m m 条边组成的森林&#xff0c;有 q q q 组询问,每次询问有以下两种情况 输入 o p 1 op 1 op1 时&#xff1a;给出点 x x x&#xff0c;输出点 x x x 所在的树的直径。 输…

千元不到,作为可穿戴AI设备,AI Friend真的能够取代手机吗?

在人工智能的浪潮中&#xff0c;我们见证了无数旨在提高效率和生产力的创新设备。 然而&#xff0c;Friend设备以其独特的设计理念&#xff0c;为AI设备带来了新的定义——一个永远在线的伴侣&#xff0c;一个情感的稳定器。 一、Friend的设计理念 Friend设备的设计初衷并非追…

vscode的C/C++环境配置和调试技巧

目录 1.背景 2.下载编译器 3.配置环境变量 4.安装C/C插件 5.写C语言代码并且编译成功 5.1文件操作 5.2对于两个窗口的解释 5.3C语言编译环境配置 6.创建执行文件 7.编译运行过程 8.写其他的代码的解决方案一 9.写其他的代码的解决方案二 10.同时编译多个.c文件 10…

Qt 中实现异步散列器

【写在前面】 在很多工作中&#xff0c;我们需要计算数据或者文件的散列值&#xff0c;例如登录或下载文件。 而在 Qt 中&#xff0c;负责这项工作的类为 QCryptographicHash。 关于 QCryptographicHash&#xff1a; QCryptographicHash 是 Qt 框架中提供的一个用于生成加密散列…

【系统维护】Dll文件修复工具使用教程,Windows系统必备!

一、dll文件是什么 dll文件是是一种Windows操作系统下的可执行文件格式&#xff0c;包含可由多个程序同时使用的代码和数据的文件&#xff0c;它的主要作用是实现代码和数据的共享&#xff0c;从而节省内存和硬盘空间&#xff0c;并提高程序的性能和可维护性 二、如何解决dll文…

刚刚,模糊测试平台SFuzz受到行业认可

近日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;正式发布了“2024年网络安全优秀创新成果大赛-安全严选专题赛”评选结果&#xff0c;开源网安模糊测试平台SFuzz凭借重大创新能力&#xff0c;得到组委会认可&#xff0c;获本次大赛创新产品优胜奖。 2024年网…

【LeetCode面试150】——392判断子序列

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…

数据结构--第八天

--哈希表 -哈希表的概念 哈希表&#xff1a;用散列法存储的线性表被称为哈希表&#xff0c;使用的函数被称为散列函数或者哈希函数&#xff0c;f(k)被称为散列地址或者哈希地址。。通常情况下&#xff0c;散列表的储存空间是一个一维数组&#xff0c;而哈希地址为数组的下标 -哈…

【C# WPF】Style全局样式和资源字典

1.全局样式&#xff1a; 在Window.Resource中声明一个样式&#xff0c;总体为白色&#xff0c;为了更有区分度&#xff0c;采用BasedOn这一继承方式来在保留字体和边缘设置的基础上&#xff0c;更改颜色。 <Window x:Class"WpfApp1.Window1"xmlns"http://s…