新时代架构SpringBoot+Vue的理解(含axios/ajax)

文章目录

  • 引言
  • SpringBoot+Thymeleaf
  • Vue+SpringBoot
    • SpringBoot
    • Vue(前端)
      • axios/ajax
      • Vue作用
        • 响应式动态绑定
        • 单页面应用SPA
          • 前端路由
        • 前端路由URL和后端API URL的区别
          • 前端路由的数据从哪里来的
      • Vue和只用三件套+axios区别
  • 关于地址栏url和axios请求不一致
    • Vue
    • JSP+Servlet中的

引言

我是一个喜欢知其然又知其所以然的人,快速入门致使我对JavaWeb整体开发有点模糊不清,这篇我们就讲一下SpringBoot+Vue的这个模式如何进行的数据交互,这篇重点讲前端,因为我是一个后端开发人员,当你用过SpingBoot就知道他工作原理是什么

SpringBoot+Thymeleaf

上篇文章我们讲过了JSP+Servlet
用过SpringBoot的朋友知道SpringBoot代替了Servlet的功能进行数据处理和响应
那么JSP的替代者是谁呢
以下是AI回答

在 Spring Boot 中,JSP 通常被 Thymeleaf 或其他模板引擎所替代。Thymeleaf 是一种现代的模板引擎,它的主要作用与 JSP 类似:用于在服务器端动态生成 HTML 页面。但是,与 JSP 不同的是,Thymeleaf 具备更好的语法、性能和灵活性,并且 支持更强的模板逻辑,例如条件判断、循环等。
Spring Boot + Thymeleaf 的工作方式:
控制器(Controller):处理请求,执行业务逻辑,并将模型数据(如从数据库查询到的信息)传递到视图模板。
模板引擎(Thymeleaf):接收到模型数据后,生成最终的 HTML 内容,并将其返回给浏览器。

其实就是跟JSP和Servlet差不多
与Vue+SpringBoot不同的是
这种方式并没有实现前后端分离的模式

还是在服务器进行的前端html页面的生成然后返回给客户端再展示
这个框架我们就不多说了,不经常使用

Vue+SpringBoot

我们的vue+SpringBoot这种开发模式就是真正的前后端分离
为什么这样所呢?
因为其不靠后端渲染页面,具体解释如下

在传统的 JSP + Servlet 模式中,JSP 文件直接嵌入 Java 代码来渲染动态页面,Servlet 负责数据的处理和传递。
在 Vue + Spring Boot 模式中,Vue.js 作为前端框架来动态渲染页面,它不再依赖于后端渲染 HTML 页面。Vue 负责从后端请求数据,接收到数据后通过组件的方式在客户端渲染 HTML 页面。这意味着前端和后端通过 API 进行通信,而不是直接由后端传递渲染好的 HTML 页面。

注:这里的渲染不是浏览器渲染呈现html页面,而是将动态数据赋值到静态网页变量的过程(比如JSP中的EL表达式赋值过程)

SpringBoot

众所周知了,分成三层架构
Controller层:负责接收前端(客户端)网络请求以及返回给前端对应数据
Service层:这一层被Controller调用,负责对前端传输进来的数据(Request中的数据)进行数据处理,生成对应的数据再返回给Controller层
Dao/Mapper层:一般这一层都是被Service调用,用来查询数据库中的内容,返回内容来给Service方法以实现动态数据的效果

至于IOC/DI等内容就不多讲了

Vue(前端)

axios/ajax

我最疑惑的点就是前端怎么请求到后端的数据的这个点
简单来说就是:通过axios/ajax这项技术向后端发送请求(http)进行数据(json)的交换
ajax是异步交互,即在不刷新界面的情况下也可以请求到后端数据进行展示
ajax的请求一般用于对应后端请求路径
可以看下这篇
Ajax快速入门

前端(Vue)通过 Axios 发送请求,后端(Spring Boot)处理数据并返回,前端渲染界面

  1. 前端发送请求:
    用户在页面上进行某些操作(如点击按钮、提交表单)。
    Vue.js 使用 Axios 或其他 HTTP 库,通过 HTTP 请求(GET、POST、PUT、DELETE 等)将请求发送给后端。
  2. 后端处理请求:
    Spring Boot 的控制器(@RestController)接收前端的请求,解析数据。
    根据请求调用相应的 服务层(Service)和 数据访问层(DAO)来处理业务逻辑、查询或更新数据库。
  3. 后端返回数据:
    后端处理完数据后,将结果(通常是 JSON 格式的数据)通过 HTTP 响应返回给前端。
  4. 前端接收数据并渲染:
    Vue.js 的 Axios 获取后端返回的数据。
    Vue 根据接收到的数据更新视图(UI),让页面内容动态变化并展示给用户。

举例

  • 用户点击 “查询订单” 按钮。
  • Vue 通过 Axios 向后端发送一个请求:
axios.get('/api/orders?userId=123').then(response => {
    // 后端返回的数据保存在 response 中
    this.orders = response.data; // 把订单数据绑定到 Vue 的 data
});
  • 后端 Spring Boot 接收到请求,查询数据库并返回结果:
@RestController
public class OrderController {
    @GetMapping("/api/orders")
    public List<Order> getOrders(@RequestParam int userId) {
        return orderService.getOrdersByUserId(userId);
    }
}
  • Vue 使用返回的数据动态渲染订单列表页面:
<ul>
  <li v-for="order in orders" :key="order.id">{{ order.name }} - {{ order.price }}</li>
</ul>

Vue作用

说完Axios,我认为单纯的三件套html+css+js以及axios就可以实现前端效果(前后端分离)那么vue是干什么的呢?
组件化开发:
在这里插入图片描述
在这里插入图片描述
下面主要讲解一下和前端有关的2和3

响应式动态绑定

正如所说的,就是你的数据更改后页面会自动更改你的信息不需要刷新网址进行操作
底层我们后端人员不用研究
在这里插入图片描述
就是调用从后端来的信息写代码加方便,且前端更改也能响应
比如前端更改了某个值,若该界面就有对应值的显示,他也会变成对应
但是后端可能还没接受到该值的更改,需要提交后后端数据才会更新
Vue 只在前端做数据变化 → 视图更新,不会自动通知后端

单页面应用SPA

在这里插入图片描述
这里的JS动态替换:JS中可以写html和css,比如下面的方法1
在这里插入图片描述
方法1
不用url跳转,而是用js函数的方式实现,通过innerHTML操作DOM更换我们id为app里的html内容
不常用,已淘汰

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>SPA 示例</title>
</head>
<body>
  <nav>
    <button onclick="showHome()">主页</button>
    <button onclick="showAbout()">关于</button>
  </nav>
  
  <div id="app">这里是主页内容</div>

  <script>
    function showHome() {
      document.getElementById("app").innerHTML = "<h2>这里是主页</h2><p>欢迎来到主页!</p>";
    }

    function showAbout() {
      document.getElementById("app").innerHTML = "<h2>关于我们</h2><p>这是关于页面。</p>";
    }
  </script>
</body>
</html>

前端路由

定义一个前端路由
然后里面创建组件,然后挂载,我的理解是组件就相当于不同的页面
路由里包含不同组件,组件用对应的url和html页面进行匹配
点击对应url按键就会请求对应的url,url对应的vue组件就会替换内容
直接在地址栏输入

http://localhost:8080/about

会被路由拦截加载对应vue组件
在这里插入图片描述
关于2的解释
3中vue组件里面可能请求后端
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端路由URL和后端API URL的区别

前端URL和后端URL有所不同
前端就是展示界面用的,后端就是在界面基础上axios访问后端数据喽
axios定义是在原有Vue的url基础上+ /function(因为axios本来就在Vue组件中定义)
在这里插入图片描述
在这里插入图片描述

前端路由的数据从哪里来的

图一非常的惊骇解决了我的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Vue和只用三件套+axios区别

说实话,其实看完Vue这部分内容其实就能理解了
只使用 HTML + CSS + JavaScript + Axios 也能实现 前后端分离,但 Vue 这样的框架提供了更好的 开发体验 和 维护性。我们先看 不用 Vue 如何实现前后端分离,再分析 Vue 的优势。
在这里插入图片描述

关于地址栏url和axios请求不一致

Vue

所有的axios都是隐式调用不会出现在我们用浏览器的地址栏中
而出现在我们地址栏中的都是前端路由的跳转地址!!!
我认为就是
通过 前端路由+参数 来进行内部数据替换
比如这个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而我们的后端和这个网址的url是不一样的
前端路由中的axios或调用/admin/dish/#{id}查询返回数据(而前端url是dish/add?id=69)
然后我们修改完后点击按钮保存按钮会执行/admin/dish的Put请求进行菜品修改
在这里插入图片描述
在这里插入图片描述

JSP+Servlet中的

地址栏url对应我们controller/后端的url
因为这个直接返回的就是整个页面
当然他里面也可以带着axios里面实现异步更新
所以后端的设置的请求URL会比前端可以调用(这里只返回页面的URL)的多

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…

用XAMPP安装PHP环境(Window系统)

视频教程 BV1jA411v791 进入XAMPP官网 Download XAMPP 找到最新版本&#xff0c;64位的下载&#xff0c;一路安装&#xff0c;语言只有英语德语两个&#xff08;不会德语&#xff09; 安装好以后启动软件&#xff0c;点Apache&#xff0c;MySql&#xff0c;start 在C:\xampp\…

并发编程 - 线程同步(二)

经过前面对线程同步初步了解&#xff0c;相信大家对线程同步已经有了整体概念&#xff0c;今天我们就来一起看看线程同步的具体方案。 01、ThreadStatic 严格意义上来说这两个并不是实现线程同步方案&#xff0c;而是解决多线程资源安全问题&#xff0c;而我们研究线程同步最终…

回顾:Maven的环境搭建

1、下载apache-maven-3.6.0 **网址:**http://maven.apache.org 然后解压到指定的文件夹&#xff08;记住文件路径&#xff09; 2、配置Maven环境 复制bin文件夹 的路径D:\JavaTool\apache-maven-3.6.0\bin 环境配置成功 3、检查是否配置成功 winR 输入cmd 命令行输入mvn -v…

DRF开发避坑指南01

在当今快速发展的Web开发领域&#xff0c;Django REST Framework&#xff08;DRF&#xff09;以其强大的功能和灵活性成为了众多开发者的首选。然而&#xff0c;错误的使用方法不仅会导致项目进度延误&#xff0c;还可能影响性能和安全性。本文将从我个人本身遇到的相关坑来给大…

DeepSeek R1:中国AI黑马的崛起与挑战

文章目录 技术突破&#xff1a;从零开始的推理能力进化DeepSeek R1-Zero&#xff1a;纯RL训练的“自我觉醒”DeepSeek R1&#xff1a;冷启动与多阶段训练的平衡之道 实验验证&#xff1a;推理能力的全方位跃升基准测试&#xff1a;超越顶尖闭源模型蒸馏技术&#xff1a;小模型的…

电路研究9.2.4——合宙Air780EP中MQTT 相关命令使用方法研究

之前研究了FTP命令&#xff0c;这次研究一下MQTT命令了。 16.14 使用方法举例 9.5.3 MQTT 应用指南 4G 模块支持 MQTT 和 MQTT SSl 协议&#xff0c; MQTT 应用的基本流程如下&#xff1a; 1、如果要支持 SSL&#xff0c;配置 SSL 参数2、通过 TCP 连接到 MQTT 服务器 3、发送 …

寻找旋转数组中的最小元素:C语言实现与分析

在算法与编程的世界里&#xff0c;经常会遇到各种有趣的问题。今天我们来探讨一个经典的题目&#xff1a;寻找旋转数组中的最小元素。我们将通过C语言代码实现&#xff0c;并详细分析其原理和实现细节。 题目描述 给定一个可能旋转过的递增排序数组&#xff0c;找到数组中的最小…

Object类(3)

大家好&#xff0c;今天继续给大家介绍一下object类中的方法&#xff0c;那么话不多说&#xff0c;来看。 hashcode()这个方法,帮我们算了一个具体的对象位置,这里面涉及到数据结构,简单认为它是个内存地址,然后调用Integer.toHexString ()将这个地址以16进制输出。 该方法是一…

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息&#xff0c;采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外&#xff0c;Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…

基于SpringBoot的阳光幼儿园管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

什么是长短期记忆网络?

一、概念 长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;旨在解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入三个门&#xff08;输入门、遗忘门和输出门&#xff09…

Unity游戏(Assault空对地打击)开发(1) 创建项目和选择插件

目录 前言 创建项目 插件导入 地形插件 前言 这是游戏开发第一篇&#xff0c;进行开发准备。 创作不易&#xff0c;欢迎支持。 我的编辑器布局是【Tall】&#xff0c;建议调整为该布局&#xff0c;如下。 创建项目 首先创建一个项目&#xff0c;过程略&#xff0c;名字请勿…

996引擎 - NPC-动态创建NPC

996引擎 - NPC-动态创建NPC 创建脚本服务端脚本客户端脚本添加自定义音效添加音效文件修改配置参考资料有个小问题,创建NPC时没有控制朝向的参数。所以。。。自己考虑怎么找补吧。 多重影分身 创建脚本 服务端脚本 Mir200\Envir\Market_Def\test\test001-3.lua -- NPC八门名…

如何看待 OpenAI 的12天“shipmas”发布计划?

openAI的“Shipmas”并非单纯的营销活动,而是在用户增长、技术创新和市场竞争中的综合布局和战略体现。 史上最寒酸的发布会?继十月马斯克在好莱坞电影城高调发布特斯拉三款最新产品(无人出租车、无人巴士、人形机器人)后,十二月,OpenAI CEO 奥特曼宣布 OpenAI 将连续12…

蓝桥杯模拟算法:蛇形方阵

P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 我们只要定义两个方向向量数组&#xff0c;这种问题就可以迎刃而解了 比如我们是4的话&#xff0c;我们从左向右开始存&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4 到5的时候y就大于4了就是越界了&…

第31篇:Python开发进阶:数据可视化与前端集成

第31篇&#xff1a;数据可视化与前端集成 目录 数据可视化概述 什么是数据可视化数据可视化的重要性 Python中的数据可视化库 MatplotlibSeabornPlotlyBokehAltair 数据可视化的基本概念 图表类型设计原则交互性与动态性 与前端框架的集成 前端框架概述Flask与Django集成数据…

240. 搜索二维矩阵||

参考题解&#xff1a;https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度&#xff0c;可以看作一个二叉搜索树。 假设以左下角元素为根结点&#xff0c; 当target比root大的时候&#xff…

maven的打包插件如何使用

默认的情况下&#xff0c;当直接执行maven项目的编译命令时&#xff0c;对于结果来说是不打第三方包的&#xff0c;只有一个单独的代码jar&#xff0c;想要打一个包含其他资源的完整包就需要用到maven编译插件&#xff0c;使用时分以下几种情况 第一种&#xff1a;当只是想单纯…

联想拯救者R720笔记本外接显示屏方法,显示屏是2K屏27英寸

晚上23点10分前下单&#xff0c;第二天上午显示屏送到&#xff0c;检查外包装没拆封过。这个屏幕左下方有几个按键&#xff0c;按一按就开屏幕、按一按就关闭屏幕&#xff0c;按一按方便节省时间&#xff0c;也支持阅读等模式。 显示屏是 &#xff1a;AOC 27英寸 2K高清 100Hz…