何为前后端分离?一文搞懂前后端分离发展史

article/2025/10/5 19:37:41

目录

一、前言        

二、前后端分离的演进过程

        2.1 发展的三个阶段

        2.2 前后端不分离阶段(Java的JSP作为前端视图时代)

        2.3 前后端半分离阶段(前后端使用Ajax交互的半分离时代)

        2.4  前后端完全分离阶段(前后端使用代理服务器的完全分离时代(MVVM))

三、结语


一、前言        

        各位小伙伴大家好,又跟大家见面了,我就是那个白天晚上都在写代码的IT小白,白天忙于工作,晚上忙于整理公众号,你说小弟我容易吗。谁让我的心里只有学习呢!!!

        为什么聊到这个前后端分离呢,其实在我17年大学毕业(ps:不小心暴露了年纪)的时候,其实就已经用到了前后端分离技术,当时后端的框架使用的是SpringMVC+iBatis,做了基于Maven多模块+Dubbo的SOA架构,前端采用的是基于Vue的element UI,前后端接口使用Swagger作为前后端开发API。开发方式甚爽,虽然我也写前端,但是前后端分离后的开发方式,会大大增加开发效率,今天我就给大家讲讲什么是前后端分离,和前后端分离的演进流程吧。(ps:内容示例用Java应用作为示例。)

二、前后端分离的演进过程

        2.1 发展的三个阶段

  • 1. 前后端不分离阶段
  • 2. 半分离阶段
  • 3. 分离阶段

        2.2 前后端不分离阶段(Java的JSP作为前端视图时代)

        JSP的概念(百度百科):

        JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP的强大功能:

        简单来讲JSP算是对Java影响巨大的一个技术,奠定了Java走向B/S架构的基础,JSP的出现让Java从只能做C/S客户端扩展到了B/S架构。JSP可以实现与HTML、JavaScript、Java代码结合,完成页面的展示,做数据的处理,与Java服务器结合完成更复杂的业务。

 开发过程中的诟病:

        JSP目前已经淘汰,更加流行的技术:Vue、React迅速占领软件市场,那为什么JSP会被淘汰呢,思考下,你在开发的过程中,有没有遇到过这样的情况,大家请看下面的代码。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录界面</title>
</head>
<body>
<jsp:useBean id="user1" class="cn.crabshell.pojo.user"></jsp:useBean>
<jsp:setProperty property="username" name="user1"/>
<jsp:setProperty property="password" name="user1"/><%=user1.getUsername() + " : " +user1.getPassword() %>
<%-- <jsp:getProperty property="username" name="user1"/> --%><%if(user1.checkLogin()){out.println("登录成功");}else{out.println("登录失败");}
%>
</body>
</html>

        从上面的代码可以看到,JSP融合了html标签、JSTL标签、Java代码,在进行开发的时候,前端的同事在进行界面布局之后,后端同事需要在前端的界面上写Java代码才能完成前端界面的完整业务。这样高强度耦合的方式,直接导致开发、联调时间增加,这也就是JSP时代的诟病。

【优缺点分析】

优点:

  1. 前端可以编写Java程序,后端人员可直接在页面上写后台逻辑。

  2. 技术单一,容易掌握,代码好排查问题

  3. 一个技术人员即可完成前后端的功能开发,适合小型企业使用

缺点:

  1. 影响整体开发进度,前后端无法单独分工

  2. 后端编译代码时,需要把前端代码编译(JSP其实也是Java的Servlet编写的,需要后台编译)

  3. 运行时前后端跳转不断(来回转发,界面不能局部刷新),影响用户体验。

        2.3 前后端半分离阶段(前后端使用Ajax交互的半分离时代)

Ajax概念(百度百科):

        Ajax是什么呢?Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

Ajax的功能

         Ajax的出现,解决了网站每次提交参数都要转到后台,再跳回前台的方式,可以异步的动态刷新网页局部的数据,Ajax与后台交互只做数据传输,后台只负责后台的工作,前台请求后台接口,将响应的数据在在前端进行渲染即可,下面用登录功能来描述。

å¾ç

         前端工程要做的事情就是将前端界面布局做好,与后端交互,然后将请求的数据进行渲染或者跳转页面,后端则只需要做好数据交互即可,这样就将前后端的工作进行拆分,每个人做专职的事情。但是为什么称为是半拆分呢?因为此时前端工程需要依赖后端工程的服务器才能启动起来(一般Java程序需要放到webapp下,前端无法单独启动),后端出现问题时,前端无法进行单独开发,需要等待后端接口处理完成问题后才能继续。

【优缺点】

优点:

  1. 前后端技术分开,可专人做专事情

  2. 界面可以局部刷新,前后端联调变得方便

  3. 前端可以多种技术选择,更好的完成项目业务建设

缺点:

  1. 当前端选择复杂的业务时,对前端技术要求较高,后端只能参与简单的业务开发。

  2. 前后端依赖严重,当后端接口出现问题时,前端无法继续调试项目。

  3. 前后端联调需要双方完全开发完毕才能联调功能,联调时间变长。

        2.4  前后端完全分离阶段(前后端使用代理服务器的完全分离时代(MVVM))

MVVM概念(百度百科):

        MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。

个人理解:

        其实MVVM是在MVC的基础上进行完善,目前使用MVVM的架构的象征代表为Vue,将数据和模型进行双向绑定,当程序改变了数据时,及时将界面的渲染数据进行修改。推翻了之前的jquery渲染dom的方式,开发全新的渲染方式,简便了开发人员的开发方式。

å¾ç

 名词解释:

  • 模型层 (Model):

    负责从各种数据源中获取数据;

  • 视图层 (View):

    用于展示给用户和处理用户交互,会驱动 ViewModel 从 Model 中获取数据;

  • ViewModel 层:

    用于将 Model 和 View 进行关联,我们可以在 View 中通过 ViewModel 从 Model 中获取数据;

    当获取到了数据之后,会通过自动绑定,比如 DataBinding,来将结果自动刷新到界面上。

如何前后端分开开发

        可能有的朋友会思考,前后端如何分开开发呢,前端不还是要依赖后端接口才可以正常渲染数据吗,推荐几个常用工具即可解决这个问题。

技术名称描述及用处
mock.js一款数据模拟组件,可结合vue,完成数据中英文、数字各种格式的数据,拦截前端的请求,完成数据返回,解决前端依赖后端数据接口的问题。
Swagger后端接口API文档,Java工程可集成swagger组件,在接口上增加简单的注解,即可生产后端接口文档,包含接口地址、接口请求方式,出入参格式,也可输入模拟数据进行测试,前端只需要访问后端工程的这个界面,即可找到接口地址和出入参接口规范。
nginx反向代理服务器、文件负载服务器,可将前端使用nginx承载(这也是目前市场上流行的前端部署方式),访问nginx的地址即可访问前端工程,将前端工程的请求代理到后端的请求地址上即可完成。后端记得处理下跨域问题哈。

开发流程及部署图

  1. 前端开发的过程中使用webpack命令,使用webpack-dev-server配合node.js程序来运行服务,使用模拟数据进行功能开发即可。当需要连接后端接口时,关闭mock,连接后端开发的服务即可,不需要单独启动后端工程。

  2. 后端正常开发restful风格的接口,使用swagger进行接口注释,联调时,将服务暴露给前端调试即可。

  3. 部署时,前后端分开部署,前端使用webpck打包后,将打包后的文件放到nginx服务器下,后端打包成jar/war,使用指定的方式启动即可。

å¾ç

 优缺点

优点:

  1. 前后端技术分开,工程分开,互不影响开发。

  2. 前端组件化,有更多的扩展空间。

  3. 前端也可部署集群,且不依赖后端工程,生产环境功能服务主机互不影响。

缺点:

  1. 对技术要求较高,需要掌握最新的技术

  2. 部署流程复杂,不适合小型企业使用

  3. 前后端分离后,查问题过程更长。

  4. 前后端技术完全隔离,学习成本较高。

三、结语

        前后端分离技术,是目前主流的大型企业都在使用的技术,前后端分开开发,分开部署的方式,既提高了开发效率(专人专职),又提高了项目的承载能力,是一个值得使用的技术。

今天就到这里了,有问题请指出,欢迎各位来踩,多多交流技术。

 觉得不错的关注下公众号吧

å¾ç


http://chatgpt.dhexx.cn/article/NX5P3WHO.shtml

相关文章

前后端分离架构概述

1、背景 前后端分离已成为互联网项目开发的业界标准使用方式&#xff0c;通过nginxtomcat的方式&#xff08;也可以中间加一个nodejs&#xff09;有效的进行解耦&#xff0c;并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务&#xff08;多种客户…

前后端分离架构,超全面详解~

此文通俗易懂&#xff0c;全面讲解前后端分离架构核心思想与作用&#xff0c;对学习微服务、开发企业项目大有裨益&#xff0c;建议收藏细品&#xff0c;好好领悟&#xff01;~ 一、简介 前后端分离已成为互联网项目开发的业界标准使用方式&#xff0c;通过nginxtomcat的方式&a…

到底什么是前后端分离

1、到底什么是前后端分离&#xff1f; 前后端分离的"前"特指浏览器端(或客户端)&#xff0c;直接呈现给用户的&#xff1b;后端是服务器端&#xff0c;处理业务逻辑和数据&#xff0c;不呈现给用户。 Java服务器端初学者最容易引起误解的一个概念就是&#xff1a;J…

c语言 链表基本操作

对于c语言的单链表来说&#xff0c;应该是数据结构中比较简单的一类结构&#xff0c;我们只要认识链表结构&#xff0c;对指针和结构体掌握好&#xff0c;其实编写代码并不算太难。 链表结构&#xff1a; 对于链表中的每一个结点&#xff0c;我们可以定义如下的结构体&#xf…

C语言——反转链表

大家好&#xff0c;本人第一次发布博客&#xff0c;目前正在学习数据结构&#xff0c;写博客的目的是一是想分享自己的学习过程&#xff0c;二也是每次写完代码后进行总结。希望大家一起共同学习&#xff01; 现在我正在看《大话数据结构》这本书&#xff0c;每次学习过后我都会…

C语言数据结构之链表

前面的文章我们就一直说&#xff0c;学一个新东西之前一定要弄明白它的作用是什么&#xff0c;我们为什么要用它。之前讲C语言时我们讲到数组&#xff0c;数组的实质是一种顺序储存、随机访问、存储单元连续的线性表&#xff0c;既然存储单元连续&#xff0c;那么对其进行插入和…

C语言来实现链表创建

链表原理理解 链表作为一种线性数据&#xff0c;通过前后节点的指针指向&#xff0c;将所有数据串联起来。为了实现链表数据域的整体耦合&#xff0c;需要额外的指针域来标定前后数据的连接。通过下面的链表结构图&#xff0c;可以非常容易的理解链表的组成结构 头节点作为链表…

链表C语言和C++两种方式实现

一、C语言版本链表&#xff1a; 方向1&#xff1a;无表头 法一&#xff1a;尾插法 #include<stdio.h> #include<malloc.h> //打印 创建 释放 删除某个数 插入某个数 &#xff08;T_T&#xff09;5个功能 struct Node {int data;struct Node* next; }; typedef st…

C语言实现链表创建

C语言实现链表的创建 链表:是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。每个结点包括两个部分&#xf…

链表(c语言实现)

1.链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; &#xff08;1&#xff09;单向或者双向 &#xff08;2&#xff09;带头或者不带头 &#xff08;3&#xff09;循环或者非循环 虽然有这么多的链表的结构&#xff0c;但是我们…

用c语言写链表

链表是数据结构的一种&#xff0c;是其他三个数据结构栈&#xff0c;树&#xff0c;图的基础&#xff0c;只有将链表这一数据结构弄懂&#xff0c;才能理解其他三种数据结构。 举一个例子&#xff0c;老师让你设计一个联系人系统&#xff0c;其中包括姓名&#xff0c;电话号&am…

C语言链表超详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转数据结构 &#x1f4ac;保持…

C语言——链表简单介绍

一、链表的引入 我们至少可以通过两种结构存储数据。 数组&#xff1a;数组是一个固定长度的存储相同数据类型的数据结构&#xff0c;数组中的元素被存储在一段连续的内存空间中。 优点&#xff1a;存取速度快。 缺点&#xff1a;需要一个连续的很大的内存&#xff1b; 插入和…

c语言链表示例

链表是一种常见的基础数据结构&#xff0c;结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配&#xff0c;也就是说&#xff0c;链表是一个功能极为强大的数组&#xff0c;他可以在节点中定义多种数据类型&#xff0c;还可以根据需要随意增添&#xff0c;删除&…

反转链表c语言

反转链表 初始化三个指针 循环执行 temp cur→next cur→next pre pre cur ; cur temp 对于单链表&#xff0c;所有操作都是从头指针开始 // An highlighted block struct ListNode* ReverseList(struct ListNode* pHead ) {// 三指针法struct ListNode* pre pHead;s…

链表C语言实现--单向链表

线性结构的链式存储也称为链表&#xff0c;相比于顺序表&#xff0c;链表能够解决顺序表中空间资源浪费问题以及空间不足的问题。链表的每一个结点包含数据域和指针域&#xff0c;而每一个结点在内存中的地址是不连续的&#xff0c;且能适应动态变化。在数据插入和数据删除操作…

循环链表C语言实现

本文介绍循环链表中的单向循环链表&#xff0c;双向循环链表两种 第一种&#xff1a;单向循环链表&#xff0c;是在单向链表的基础上&#xff0c;尾结点不再指向NULL&#xff0c;而是指向头结点从而构成循环。如下图&#xff1a; 所以相比单向链表最大的特点就是可以从尾快速循…

C语言基础入门:链表详解篇

链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量&#xff0c;以head表示&#xff0c;它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”&#xff0c;每个结点都应包括两个…

C语言——基础链表详解

敢于向黑暗宣战的人&#xff0c;心里必须充满光明。 一、链表的构成 1.构成 链表是由一连串的结构&#xff08;称为结点&#xff09;组成的。 (1)结点的构成&#xff1a; 数据&#xff08;要储存的数据&#xff09;指针&#xff08;指向下一个结点的指针&#xff09; (2)关…

C语言数据结构——链表

目录 前言 一、什么是链表 1.1链表的结构和概念 1.2 链表的分类 二、无头单向非循环链表 2.1 创建结构体 2.2 动态申请一个节点 2.3 单链表打印 2.4 单链表尾插/尾删 2.4.1 单链表尾插 2.4.2 单链表尾删 2.5 单链表头插/头删 2.5.1 头插 2.5.2 头删 2.6 单链表查…