一.什么是前端

在网上,我也去找了一些观点,其实都是应用层面的,什么使用一个地址,回车以后就能拿到 .html文件等等

说的也没问题,前端简单点说呢,就是负责展示和美化的页面,大部分在网上我们所看到的就是页面,它是显示,我们每个人都是可视的

比如上面的淘宝网页面,它都是前端展示出来的,

我们可以清清楚楚的看到有些什么东西,有些什么颜色

它的描述语言就有:

HTML,CSS,JavaScript,Objectvie C,Vue,等等

二.什么是后端

后端的就是负责逻辑处理的,

我们可以从上面的淘宝网图片推出有很多后端的东西

比如图片,文字等等,内容都是后端交给前端来展示的,前端更多的都是展示的框架,那些内容如何展示,就是前端的

而后端是逻辑处理,比如前端传来用户请求,需要计算一些等式,后端就计算,然后传回给前端反馈用户,没有人会使用HTML去计算 1 + 1 =?多少吧

后端还要负责页面的调度,我们在使用淘宝网的时候,你有经常使用地址栏去挑选商品吗?都是页面自己在换来换去的,这些都是后端在调度,你每一次点击,都是后端在做反馈

后端还会负责数据库端的连接,因为数据库中存储着大量的数据,文字,图片,视频等等,需要后端去连接以后给加载出来

后端常用的描述语言:

Java,JavaScript,PHP,C#等等

三.前后端的关系

如上图,我们前后端的关系就是如上所示

前端的网站,APP,小程序等等展示的内容的应用,我们就举例网站的展示,客户需要计算一个 1+ 1这个等式的值是多少,那么它在当前页面填写了以后,点击提交按钮

这时表单就会以请求的方式,去请求 action 属性后面的地址,这个地址很重要,是后端处理的驱动程序,也叫接口API,一定不能写错,通过这个接口API,处理器会在它的注册文件里去找对应的地址,匹配上了以后就调用这个API的Java处理逻辑

我们 1+ 1等式就会以参数的形式去到这个接口API,经过Java的处理逻辑,然后又它的处理逻辑打包参数返回给前端,此时前端可以通过EL表达式等等,来取到这些参数

这些操作就是前端和后端的一次关联

代码实现操作(部分逻辑展示):

我们先些一个页面:

做了一个简单的表单,计算两数字的加法计算,一旦点击开始计算按钮,就会把数据提交给后端

当然是通过地址映射去找后端的,我们使用的是表单,所以action属性后面就是映射的地址,

我们来看看表单的地址写的是什么:

<div id="di1">
<form action="${pageContext.request.contextPath}/Index/addNumber" method="post">
<input type="text" name="num1" placeholder="请输入数字">
<br>
<br>
+
<br>
<br>
<input type="text" name="num2" placeholder="请输入数字">
<br>
<br>
<input type="submit" value="开始计算">
<br>
<span id="sp1">${answer}</span>
</form>
</div>

action="${pageContext.request.contextPath}/Index/addNumber"

可以看到action属性后面紧跟的一串字符串,他就是我们要去xml文件匹配的地址,也可以叫接口API,如果你不是Java程序员,可以不用关注${pageContext.request.contextPath},它的意思就是当前项目的绝对路径的意思,

后面的   /Index/addNumber  才是重点,不管你是那个语言的编程人员都应该知道这串字符串的意思,就是请求地址,这串字符串才是要去后端配置的xml文件中匹配的,

现在我们就假设提交的是 1+ 1,然后点击开始计算,那么紧跟着,它便要去后端找到xml文件,看API接口映射到那个Java.class文件的,交由Java.class文件处理

如上图:

xml文件中,有一项和我们的请求API是一摸一样的,那就是 url-pattern 项,它就是地址映射,通过这一项就可以确定处理的class文件在哪里

有个东西出现了两次,细心的小伙伴一定看到了,那就是  servlet-name 这对标记是成对出现的,一个表示Java的class文件路径,一个表示接口API

所以通过servlet - name  就可以找到 servlet - class 这一项,我们可以看到它的位置是 top.lostyou.service.addNumber

top.lostyou是我们的项目名称

service是我的项目包名,表示是服务层,用来专门处理请求的

addNumber就是我们的Java代码,也就是要找的class文件

上面描述的操作就是前后端的连接最重要的一环 - - - - - - 地址映射,做完这一步就好办了

找到了对应的class文件,就可以开始处理请求了,还记得我们的请求吗,传进来两个参数 1 和 1,对它们进行加法计算

这就是我们的Java处理逻辑,request  来获取前端带过来的参数 ,num1  和  num2 然后一段简单加法计算代码,相信程序猿都应该看的懂,

然后看到一句话:req.getSession().setAttribute("answer","答案是:"+sum);

这就是参数封装,我们把一段字符串封装到一个  新建对象 answer中,把计算的结果封装在里面

在通过  resp.sendRedirect("/test.jsp");   这句代码实现的是重定向到那个页面,肯定是重定向到原页面展示数据啊

上面的描述就是一次前端和后端连接和响应,来看看最后的成品效果吧:

前端传参给后端的方式:

前端传参给后端的方式一般有两种,post和get

两种传参的区别在于:post是不把参数显示在地址栏,而get传参是吧参数显示在地址栏

先看看post方式的地址栏:

http://localhost:8080/test.jsp

就是一个很简单的路径,其它的什么都看不出来,可以得知,其实他是十分安全的,对于使用者而言,不知道地址栏做了些什么,也不需要它们知道

然后就是get方式的地址啦:

http://localhost:8080/test.jsp?num1=1&num2=1#

get方式相对来说就不是很安全了,因为它的参数我们一眼就看完了,有哪些,是多少,都很清楚的可以看到

最后补充一下 a 标签的跳转,它的跳转方式是也是get,它在地址栏的信息就是我们a标签自己填的那些信息

a标签的填写:

<a href="/test.jsp?num1=1&num2=2">a标签</a>

a标签在地址栏的显示:

http://localhost:8080/test.jsp?num1=1&num2=2

以地址栏的展示来看,其实前端提交数据给后端无非两种,一种是显示传输参数,一种隐式传输参数,

再者有肯能会用到的ResultFul风格传参,它注重的是参数,而不是展示,它的传参风格很独特,后面我可以去深入讲一下

静态页面:

相信大家初学计算机就应该知道静态页面和动态页面,它们二者的区别就是有没有交互性,

像常考的题就是有视频,动画,语音等等动态效果的页面是不是动态页面啊,肯定不是

今天的学习,我们就应该知道什么是动态页面了,那就是有没有后端反馈的页面,

静态页面它就是一个普通的前端,没有后端给它实时处理反馈,而动态页面就是标准的前后端一起,有反馈的页面

四.疑问

上述的例子,计算1+1=?,难道前端自己不可做吗?或者说,所有的逻辑计算,前端都不能做吗?

其实大部分后端做的事情,前端都可以做,并且实现起来也很简单,

就比如那个 1+1=?的例子,我们使用前端来实现一遍:

这里我使用的是js实现

<script>
function fun1() {
let n1 = $('#num1').val();
let n2 = $('#num2').val();
let sum =0;
sum = parseInt(n1)+parseInt(n2);
$('#sp1').text(sum);
}
</script>

相信大家一定不陌生js的代码,它也是前端三要素的一种,即网页的行为,还有HTML,即网页的骨架,CSS即网页的美化

使用js来处理的逻辑是:

用jQuery指向id选择器,然后拿到文本框的内容,也就是1和1

然后简单的计算,

再通过选择器选择到要展示答案的一行,通过text关键字写入节点,依旧可以算出答案

结果如上图:

答案也没有问题,回到我们的疑问,既然后端可以做的事情,为什么还要分前后端呢?不能写到一起吗?

这就要涉及到互联网发展伴随着的服务开发

Java的开发发展中有几个代表性的时代:model one ,model two ,微服务时代

model one时代:

在model one时代,我们页面和处理逻辑是写在一起的,不管是什么语言描述,都是一个功能的所有代码都写在一起,无什么前后端之分

这样的开发方式高效,并且难度低,实用性高,自己写的功能知道要写那些页面,怎么处理页面上的需求,以及数据怎么展示,

并且那个时代,互联网的美化刚需不高,无非就是对数据进行增删改查,对代码逻辑都不需要过高的要求

就比如Java的jsp,它就是html和Java代码一起写的,

我们可以来简单看看是怎么写的:

如上图:

前面就是简单的HTML语言

注意点在 <%  %>之间,那里面写的是Java代码,这就是我们说的model  one时代,前端后端是写在一起的,我还可以在Java代码后面写HTML代码,

也可以把Java代码写在最前面,都是可以的,这种代码风格就是完全嵌套在一起,这只是一个简单加法实现,你要想,要是实现一个应用功能,代码量右如何呢?

后面,随着互联网的发展,网络平台越来越大,框架体系也越来越多,一个单文件下的代码量也越来越多,逻辑复杂,伴随的即使排错十分麻烦

我们的开发人员就开始着手于model two时代了

model two时代:

model  two时代可以说就是我们现在正在经历的时代,也是使用最多的,

它就是大名鼎鼎的前后端分离,典型代表就是MVC框架

如上图,就是我们前后端分离的框架

其中

view:视图层,依旧负责数据展示,还有递交请求,请求全部递交到controller层,它来负责到底谁来处理这个请求,这个就是前端

controller和model统称为后端

controller:它就不用多描述了吧,就是负责请求转发的

model:也可以叫服务层,专门用来处理前端的请求的,处理完成后交给controller,由他进行参数回显

从上面看,是不是感觉MVC框架已经很合理了,但是现在,当下最流行的又变成了微服务了

微服务:

实现微服务的框架大家应该都知道,Java实现微服务框架包括:Spring Boot 和 vue

微服务的思想指的是把原来的model层继续拆分,

以前是面向请求,一个请求可能跨越多个服务,是一连串的服务

现在微服务是面向服务编程,以一个服务为单位来处理

如上图:

这是国外的大佬级人物Martin Fowler和James Lewis,他们两个最早系统的讲解了什么是微服务

从图片也可看出来,以前的服务是按部分扎堆存在的,而现在微服务阶段,不同的服务都是分开的

详细内容可以参考:

https://martinfowler.com/articles/microservices.html

Martin Fowler和James Lewis的原文地址

总结:

为什么现在不用前后端写在一起的框架了?

  • 逻辑复杂,维护不便
  • 互联网的发展,对不同的请求处理规范变化
  • 前端的工程化,系统化是趋势
  • 模块化的开发,便于后期维护

一句话总结:就是为了适应技术和业务发展的需求

前后端是怎么交互的呢?(Jvav版)的更多相关文章

  1. 前后端进行数据交互时候 要优先考虑json格式即简直对形式,[{}] 列表形式 等便于操作的数据结构

    前后端进行数据交互时候 要优先考虑json格式即简直对形式,[{}] 列表形式 等便于操作的数据结构

  2. 基于flask和百度AI接口实现前后端的语音交互

    话不多说,直接怼代码,有不懂的,可以留言 简单的实现,前后端的语音交互. import os from uuid import uuid4 from aip import AipSpeech from ...

  3. 微信小程序aes前后端加密解密交互

    aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...

  4. Spring MVC 前后端 Json 方式交互和处理

    众所周知,在mvc中,数据是在各个层次之间进行流转是一个不争的事实. 而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的.   数据在页面上是一个扁平的,不带数据类 ...

  5. 前后端通过API交互

    前两篇已经写好了后端接口,和前段项目环境也搭建好了 现在要通过接口把数据展示在页面上 先占位置写架子 创建一个头部组件和底部组件占位置 <template> <h1>这是头部组 ...

  6. 使用ajax实现前后端是数据交互

    ajax的概念 ajax一个前后台配合的技术,它可以让javascript发送http请求,与后台通信,获取数据和信息.ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信.jquery ...

  7. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

  8. web前后端数据交互

    前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...

  9. 从MVC到Ajax再到前后端分离的思考

    前言 一位小妹去面试前端,前端leader问了"什么是ajax?",答:"接收后台的数据,然后然后自己填充和渲染样式":一位小哥去面试后台,技术经理问了&quo ...

  10. 前后端不分离的springboot项目问题:页面框架问题

    前言:最近自己想搞一个以springboot开发的web项目,由于页面布局问题,在前期开发的时候没有太注意,每天写一点现在开发到一半出现了一个大问题. 1.先说说整个网站框架搭建问题:(整个项目前后端 ...

随机推荐

  1. Semantic Kernel 入门系列:💬Semantic Function

    如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...

  2. [备份]Open-CMSIS-Pack Flash Programing

    Flash Programming Flash Programming Algorithms are a piece of software to erase or download applicat ...

  3. 使用vue-cli创建第一个vue项目

    命令提示符切换至需要创建项目的目录: 直接在路径输入cmd在按键盘的enter键打开的终端就直接切换到该目录下 (1)输入以下命令: vue create 项目名称 (2)我这里选手动选择,键盘上下按 ...

  4. Redis 报”OutOfDirectMemoryError“(堆外内存溢出)

    Redis 报错"OutOfDirectMemoryError(堆外内存溢出) "问题如下: 一.报错信息: 使用 Redis 的业务接口 ,产生 OutOfDirectMemor ...

  5. YOLO3论文中文版

    文章目录 YOLO3论文中文版 摘要 1.引言 2. 解决方案 2.1 边界框预测 2.2 类预测 2.3 多尺度预测 2.4 特征提取器 2.5 训练 3.我们的做法 4. 失败的尝试 5.这一切意 ...

  6. 16.ReentrantLock全解读

    大家好,我是王有志,欢迎和我聊技术,聊漂泊在外的生活.快来加入我们的Java提桶跑路群:共同富裕的Java人. 经历了AQS的前世和今生后,我们已经知道AQS是Java中提供同步状态原子管理,线程阻塞 ...

  7. nuxt下运行项目时内存溢出(out of memory)的一种情况

    话不多说直接上代码: 如图,点红点的三行引入了一个组件,内容是同意注册协议的弹窗.但是在run dev的时候提示说内存溢出了(out of memory)...经过多方排查,定位到这个组件,警察叔叔就 ...

  8. 2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一

    2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥. :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值. 对于连续的一 ...

  9. npm init vite@latest; 项目名字是abcde,选了vue-ts; cd abcde; npm install; npm run dev;浏览器访问,结果是空白的,这是怎么回事?

    npm init vite@latest 项目名字是abcde,选了vue-ts cd abcde npm install npm run dev 浏览器访问,结果是空白的,这是怎么回事? 后来发现是 ...

  10. 2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?

    2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作?福哥答案2020-01-20: 陌陌答案:用pt_onl ...