前后台分离开发

news2024/11/28 19:36:09

前后台分离开发

简介

前后台分离开发,就是在项目开发过程中,对于前端代码的开发由专门的前端开发人员负责,后端代码则由后端开发人员负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开发,可以加快项目开发进度。

目前,前后端分离开发方式已经被越来越多的公司所采用,称为当前项目开发的主流开发方式。

前后端分离开发后,从工程结构上也会发生变化,即前后端代码不在混合在同一个maven工程中,而是分为前端工程和后端工程。

在这里插入图片描述

开发流程

前后端分离开发后,面临一个问题,就是前端开发人员和后端开发人员如何进行配合共同开发一个项目?

可以按照如下流程进行:

在这里插入图片描述

接口(API接口)就是一个http的请求地址,主要就是去定义:请求路径、请求方式、请求参数、响应数据等内容。

在这里插入图片描述

前端技术栈

开发工具
  • Visual Studio Code
  • hbuilder
技术框架
  • nodejs
  • VUE
  • ElementUI
  • mock 模拟数据
  • webpack 前端打包

YApi

YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。

YApi让接口开发更简单高效,让接口的管理更具可读性、可维护性,让团队协作更合理。

源码地址:https://github.com/YMFE/yapi

要使用YApi,需要自己进行部署。

使用方式

使用YApi,可以执行下面操作:

  • 添加项目
  • 添加分类
  • 添加接口
  • 编辑接口
  • 查看接口

Swagger

介绍

使用Swagger你只需要按照它的规范去定义接口及接口相关信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种各样的接口文档,以及在线接口调试界面等等。

官网:https://swagger.io/

knife4j是为java MVC框架集成Swagger生成Api文档的增强解决方案

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

使用方式

操作步骤:

  1. 导入knife4j的maven坐标

  2. 导入knife4j相关配置类(WebMvcConfig)

    添加两个注解,同时在该文件下添加如下两个方法

    @EnableSwagger2
    @EnableKnife4j
    
    @Bean
    public Docket createRestApi() {
        // 文档类型
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.itheima.reggie.contaoller"))
            .paths(PathSelectors.any())
            .build();
    }
    
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("瑞吉外卖")
            .version("1.0")
            .description("瑞吉外卖接口文档")
            .build();
    }
    
  3. 设置静态资源,否则接口文档页面无法访问

    WebMvcConfig类中的addResourceHandlers方法

    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    
  4. 在LoginCheckFilter中设置不需要处理的请求路径

    log.info("拦截到请求:{}", requestURI);
    
    // 定义不需要处理的请求路径
    String[] urls = new String[] {
        "/employee/login",
        "/employee/logout",
        "/backend/**",
        "/front/**",
        "/commmon/**",
        "/user/sendMsg",
        "/user/login",
        "/doc.html",  // 新增
        "/webjars/**",  // 新增
        "/swagger-resources",  // 新增
        "/v2/api-docs"  // 新增
    };
    

效果视图

在这里插入图片描述

常用注解

注释说明
@Api用在请求的类上,例如Controller,表明对类的说明
@ApiModel用在类上,通常是实体类,表示一个返回响应数据的信息
@ApiModelProperty用在属性上,描述响应类的属性
@ApiOperation用在请求的方法上,说明方法的用途、作用
@ApiImplicitParams用在请求的方法上,表示一组参数的说明
@ApiImplicitParam用在@ApiImplicitParams注解中,指定一个请求参数的各个方面

使用示例

  1. @Api

    @Api(tags = "套餐相关接口")
    public class SetmealController {
    }
    
  2. @ApiModel与@ApiModelProperty

    @ApiModel("返回结果")
    public class R<T> implements Serializable {
    
        @ApiModelProperty("编码")
        private Integer code; //编码:1成功,0和其它数字为失败
    }
    
  3. @ApiOperation、@ApiImplicitParams、@ApiImplicitParam

    @ApiOperation(value = "套餐分页查询接口")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "page", value = "页码", readOnly = true),
        @ApiImplicitParam(name = "pageSize", value = "每页记录数", readOnly = true),
        @ApiImplicitParam(name = "name", value = "套餐名称", readOnly = false)
    })
    public R<Page<SetmealDto>> page(int page, int pageSize, String name) {
    }
    
  4. 效果,添加说明

    在这里插入图片描述

项目部署

部署架构

在这里插入图片描述

部署环境说明

服务器:

  • 192.168.138.100(服务器A)

    Nginx:部署前端项目、配置反向代理

    Mysql:主从复制结构中的主库

  • 192.168.138.101(服务器B)

    jdk:运行Java项目

    git:版本控制工具

    maven:项目构建工具

    jar:Spring Boot项目打成jar包基于内置Tomcat运行

    Mysql:主从复制结构中的从库

  • 172.14.2.94(服务器C)

    Redis:缓存中间件

部署前端项目

第一步:在服务器A中安装Nginx,将课程治疗中的dist目录上传到Nginx的html目录下

在这里插入图片描述

第二步:修改Nginx配置文件nginx.conf

在这里插入图片描述

location / {
    root	html/dist;
    index	index.html;
}

# 反向代理配置
location ^~ /api/ {
    rewrite ^/api/(.*)$ /$1 break;
	proxy_pass http://192.168.138.101:8080;
}

其中rewrite重写请求路径,例如:将/api/employee/login重写为/employee/login,最后请求地址为:http://192.168.138.101:8080/employee/login

部署后端项目

第一步:在服务器B中安装jdk、git、maven、MySQL,使用git clone命令将git远程仓库的代码克隆下来

第二步:将资料中提供的reggieStart.sh文件上传到服务器B,通过chmod命令设置执行权限为777

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=reggie_take_out

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/javaApp/reggie_take_out

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> reggie_take_out.log &
echo 项目启动完成

>符号是指:将正常信息重定向

&>可以将错误信息或者普通信息都重定向输出

末尾&表示后台运行

chmod 777 reggieStart.sh # 修改文件权限

第三步:执行reggieStart.sh脚本文件,自动部署项目

在这里插入图片描述

访问服务器A,由于niginx默认80端口,前台不写端口默认访问也为80端口

访问192.168.138.100即可

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

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

相关文章

OpenOCD简介和下载安装(Ubuntu)

文章目录 OpenOCD简介OpenOCD软件模块OpenOCD源码下载OpenOCD安装 OpenOCD简介 OpenOCD&#xff08;Open On-Chip Debugger&#xff09;开放式片上调试器 OpenOCD官网 https://openocd.org/&#xff0c;进入官网点击 About 可以看到OpenOCD最初的设计是由国外一个叫Dominic Ra…

Qt高质量的开源项目合集

文章目录 1.Qt官网下载/文档2.第三方开源 1.Qt官网下载/文档 Qt Downloads Qt 清华大学开源软件镜像站 Qt 官方博客 2.第三方开源 记录了平常项目开发中用到的第三方库&#xff0c;以及一些值得参考的项目&#xff01; Qt AV 基于Qt和FFmpeg的跨平台高性能音视频播放框…

这本书没有一个公式,却讲透了数学的本质

这本书没有一个公式&#xff0c;却讲透了数学的本质&#xff01; 《数学的雨伞下&#xff1a;理解世界的乐趣》。一本足以刷新观念的好书&#xff0c;从超市到对数再到相对论&#xff0c;娓娓道来。对于思维空间也给出一个更容易理解的角度。 作者&#xff1a;米卡埃尔•洛奈 …

汇川PLC(H5U):伺服电机点动控制

一、基本概念理解 伺服电机旋转一圈的脉冲数 伺服电机上都装有一个编码器&#xff0c;这个编码器用于产生脉冲&#xff0c;常见伺服电机转一圈一般是产生10000个脉冲。相当于电机转360&#xff0c;产生了10000个脉冲&#xff0c;那旋转1就产生10000/360 27.7个脉冲。同理&am…

SDG大数据平台简介

联合国可持续发展目标&#xff08;Sustainable Development Goals&#xff09;缩写SDGs&#xff0c;是联合国制定的17个全球发展目标&#xff0c;在2000-2015年千年发展目标&#xff08;MDGs&#xff09;到期之后继续指导2015-2030年的全球发展工作。&#xff08;摘自百度&…

ROS安装PR2

一、PR2介绍 PR2是Willow Garage公司设计的机器人平台&#xff0c;也是目前科研领域经常用到的机器人之一。PR2有两条手臂&#xff0c;每条手臂七个关节&#xff0c;手臂末端是一个可以张合的夹爪&#xff1b;PR2依靠底部的四个轮子移动&#xff0c;在头部、胸部、肘部、夹爪上…

第 378 场周赛 解题报告 | 珂学家 | 分类讨论场

前言 整体评价 感觉是分类讨论场&#xff0c;t3用二分&#xff0c;是因为二分不会错&#xff0c;直接分类讨论容易WA. t4一开始看错题了&#xff0c;T_T, 看成翻转&#xff0c;写了半天StringHash, 还用上双hash&#xff0c;共8个StringHash。 重排的话&#xff0c;其实统计…

搜索引擎推广的实践技巧提升你的品牌影响力-华媒舍

搜索引擎推广是一种有效提升品牌影响力的推广策略。通过关键词优化、广告创意设计、定向投放和数据分析与优化等实践技巧&#xff0c;可以提高品牌的知名度、点击率和转化率。在实施引擎霸屏推广之前&#xff0c;还需对实践效果进行评估&#xff0c;以确保推广策略的有效性和适…

CMake入门教程【基础篇】在Windows、Linux上安装CMake

文章目录 windows平台第1步&#xff1a;下载CMake第2步&#xff1a;安装CMake第3步&#xff1a;验证安装第4步&#xff1a;初次使用第5步&#xff1a;构建和运行 Linux平台 windows平台 第1步&#xff1a;下载CMake https://cmake.org/ 首先&#xff0c;访问CMake官方网站。…

Python数据科学应用从入门到精通--Python读取、合并SPSS数据文件

在很多情况下&#xff0c;我们需要调用SPSS软件产生的数据&#xff0c;下面通过示例来进行讲解。首先需要将本书提供的数据文件存储在安装spyder-py3的默认路径位置&#xff08;C:/Users/Administrator/.spyder-py3/&#xff0c;注意具体的安装路径可能与此不同&#xff09;&am…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync&#xff08;remote synchronize&#xff09;是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件&#xff0c;它可以将一个目录的文件快速地同步到另一个目录&#xff0c;还可以通过网络快速同步多台主机间的文件…

2024年总结的前端学习路线分享(学习导读)

勤学如春起之苗&#xff0c;不见其增&#xff0c;日有所长 。辍学如磨刀之石&#xff0c;不见其损&#xff0c;日有所亏。 在写上一篇 2023年前端学习路线 的时候&#xff0c;时间还在2023年初停留&#xff0c;而如今不知不觉时间已经悄然来到了2024年&#xff0c;回顾往昔岁月…

基于Window下的Node.js安装教程

基于Window下的Node.js安装教程 1.安装包下载安装2.安装字蚁2.1压缩字体 写这篇文章&#xff0c;主要是方便自己以后再安装&#xff0c;容易查看&#xff0c;相关内容有参考网上内容和自己想法。 1.安装包下载安装 Node官网 进入终端查看&#xff1a; echo %PATH%ec…

【信息安全原理】——期末复习(冲刺篇)

&#x1f4d6; 前言&#xff1a;快考试了&#xff0c;做篇期末总结&#xff0c;都是重点与必考点。 题型&#xff1a;简答题&#xff08;45分&#xff09;、协议分析题&#xff08;210分&#xff09;&#xff08;给一个报文或工作流程&#xff0c;分析存在的问题&#xff09;、…

【Leetcode】第 378 场周赛

文章目录 100166. 检查按位或是否存在尾随零题目题意代码 100185. 找出出现至少三次的最长特殊子字符串 I题目思路代码 100184. 找出出现至少三次的最长特殊子字符串 II 100166. 检查按位或是否存在尾随零 题目 题意 这里题目要求的是或运算&#xff0c;所以原数组中只需要有…

基于ssm的房屋租赁管理系统

功能介绍 房源信息模块&#xff1a; 房源信息展示、房源信息更新、房源信息增加、房源信息删除 账户管理模块&#xff1a; 账户登录、账户绑定、账户管理 租金结算模块&#xff1a; 每月租金信息、租金交付功能、月租金收入总额统计 房屋租赁合同管理模块&#xff1a; 房屋租赁…

LabVIEW开发滚动轴承故障诊断系统

LabVIEW开发滚动轴承故障诊断系统 在工业自动化和机械维护领域&#xff0c;滚动轴承的故障诊断是至关重要的。开发了一个基于LabVIEW的振动信号分析系统。这一系统集成了先进的信号处理技术&#xff0c;如经验模式分解&#xff08;EMD&#xff09;、Morlet小波滤波器和隐Marko…

Python 为UnityAndroid端自动化接入Tradplus广告SDK

Python 为UnityAndroid端自动化接入Tradplus广告SDK Tradplus介绍常规接入进入Android开发文档选择渠道配置生成接入代码人工依赖下载官网同版本的 Unity插件 使用自动化工具接入首次 你需要打两个标记来定位运行工具 控制台会列出最新的十个Tradplus版本 任选其一然后拖入项目…

OpenCV-Python(21):OPenCV查找及绘制轮廓

1.认识轮廓 1.1 目标 理解什么是轮廓学习掌握找轮廓、绘制轮廓等学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓 在OpenCV中&#xff0c;轮廓是图像中连续的边界线的曲线&#xff0c;具有相同的颜色或者灰度&#xff0c;用于表示物体的形状。轮廓…

labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词

差分数组–前缀和数组的升级 LeetCode 1109 航班预定统计 2024.1.1 题目链接labuladong讲解[链接] class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {//构建航班人数数组&#xff0c;数组大小为n,初…