Spring Boot+Vue

Spring Boot+Vue 前后端分离是一种非常流行且高效的开发模式,以下是关于其相关方面的详细介绍:

前端(Vue)部分

• 项目搭建

• 使用 Vue CLI 创建项目,它提供了丰富的插件和配置选项,能够快速生成项目基础结构。例如,执行`vue create my-vue-app`命令,根据提示选择需要的特性,如 Babel、ESLint 等,即可创建一个 Vue 项目。

• 项目目录结构清晰,`src`目录下包含`components`(组件)、`views`(页面视图)、`router`(路由配置)、`store`(状态管理)、`assets`(静态资源)等子目录,方便进行模块化开发。

• 页面开发

• 组件化开发:将页面拆分成多个独立的组件,每个组件负责特定的功能和样式。例如,一个商品列表页面可以拆分成商品列表组件、商品详情组件、分页组件等。通过在父组件中引入并使用子组件,实现页面的组装。组件之间可以通过 props 传递数据,也可以通过事件进行通信。

• 路由管理:利用 Vue Router 实现页面的跳转和管理。在`router/index.js`文件中定义路由规则,将不同的 URL 路径映射到对应的组件。例如:

  ```javascript

    const routes = [

      {

        path: '/',

        name: 'Home',

        component: Home

      },

      {

        path: '/about',

        name: 'About',

        component: () => import('../views/About.vue')

      }

    ]

    ```

• 状态管理:对于复杂的应用,使用 Vuex 进行状态管理。Vuex 通过定义全局的状态存储,使得组件之间能够方便地共享状态。例如,一个购物车应用中,购物车商品列表的状态可以存储在 Vuex 中,多个组件通过调用 Vuex 的 action 和 mutation 来更新购物车状态,通过 getters 获取购物车状态。

 

• 与后端交互

 

• 使用 axios 库发送 HTTP 请求与后端进行数据交互。在项目中安装 axios,然后创建一个请求实例,配置请求的 baseURL、headers 等参数。例如:

 

  ```javascript

    import axios from 'axios'

    const instance = axios.create({

      baseURL: 'http://localhost:8080', // 后端接口地址

      timeout: 10000,

      headers: {'X-Custom-Header': 'foobar'}

    })

    ```

• 在组件中调用 axios 实例发送请求获取数据。例如,获取用户列表数据:

  ```javascript

    instance.get('/users').then(response => {

      this.users = response.data

    }).catch(error => {

      console.error(error)

    })

    ```

 

 

• 对于登录等操作,发送请求将用户名和密码等信息发送给后端,后端返回 token 等认证信息,前端将其存储在本地存储(如 localStorage)中,后续请求携带 token 进行认证。

 

 

后端(Spring Boot)部分

 

 

• 项目搭建

 

• 使用 Spring Initializr(Spring Boot 项目。选择项目的基本信息,如 Group(包名)、Artifact(项目名)、Java 版本等,同时添加所需的依赖,如 Spring Web、Spring Data JPA、MyBatis 等,然后生成项目压缩包并解压到本地。

• 项目结构清晰,`src/main/java`下是 Java 代码目录,包含 controller、service、dao、entity 等包;`src/main/resources`下包含配置文件,如`application.properties`或`application.yml`,用于配置数据库连接、服务器端口等信息。

 

• 接口开发

 

• Controller 层:定义 RESTful 风格的接口,通过`@RestController`注解标记控制器类,使用`@RequestMapping`、`@GetMapping`、`@PostMapping`等注解定义接口路径和请求方法。例如:

 

  ```java

    @RestController

    @RequestMapping("/users")

    public class UserController {

 

        @GetMapping

        public List<User> getAllUsers() {

            // 调用 Service 层方法获取用户列表

            return userService.findAll();

        }

 

        @PostMapping

        public User addUser(@RequestBody User user) {

            // 调用 Service 层方法添加用户

            return userService.save(user);

        }

    }

    ```

 

 

• Service 层:负责业务逻辑处理。在该层中调用 Dao 层的方法进行数据操作,并对数据进行处理和封装。例如,对用户信息进行加密处理、验证用户输入数据的合法性等。

 

• Dao 层:与数据库进行交互。可以使用 Spring Data JPA 或 MyBatis 等技术。以 Spring Data JPA 为例,定义一个继承自`JpaRepository`的接口,即可实现基本的增删改查操作。例如:

 

  ```java

    public interface UserRepository extends JpaRepository<User, Long> {

        // 可以在这里定义一些自定义的查询方法

        List<User> findByUsername(String username);

    }

    ```

 

 

• 数据交互

 

• 接收前端发送的请求数据,如 JSON 格式的请求体,Spring Boot 会自动将其转换为对应的 Java 对象。例如,前端发送一个包含用户信息的 JSON 对象,后端的`@RequestBody User user`参数会自动接收并转换。

 

• 将处理后的数据以 JSON 格式返回给前端。Spring Boot 默认使用 Jackson 库进行对象与 JSON 的转换,通过在实体类中使用注解如`@JsonProperty`、`@JsonIgnore`等,可以控制 JSON 的序列化和反序列化过程。

 

 

前后端交互与部署

 

 

• 开发阶段交互

 

• 跨域问题:由于前后端端口不同,默认情况下浏览器会阻止跨域请求。可以在 Spring Boot 后端项目中配置跨域资源共享(CORS),允许前端项目访问后端接口。例如,在全局配置类中添加 CORS 配置:

 

  ```java

    @Configuration

    public class GlobalCorsConfig {

        @Bean

        public WebMvcConfigurer corsConfigurer() {

            return new WebMvcConfigurer() {

                @Override

                public void addCorsMappings(CorsRegistry registry) {

                    registry.addMapping("/**") // 允许跨域访问的路径

                            .allowedOrigins("http://localhost:8081") // 允许跨域访问的前端域名和端口

                            .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法

                            .allowedHeaders("*") // 允许的请求头

                            .allowCredentials(true); // 允许携带 cookie

                }

            };

        }

    }

    ```

 

 

• 接口调试:前后端开发人员可以通过 Postman 等工具直接调用后端接口进行测试,也可以在前端项目中使用 axios 发送请求调试接口。同时,后端可以通过日志输出等方式查看请求参数、响应数据等信息,以便定位问题。

 

• 部署阶段

 

• 前端部署:将 Vue 项目构建生成的`dist`目录(包含静态资源文件)部署到服务器的静态资源目录下,如 Nginx 的`html`目录。配置 Nginx 服务器,设置静态资源的访问路径和路由转发规则。例如:

 

  ```nginx

    server {

        listen 80;

        server_name example.com;

 

        location / {

            root /usr/share/nginx/html;

            try_files $uri $uri/ /index.html;

        }

    }

    ```

 

 

• 后端部署:将 Spring Boot 项目打包成 jar 包,上传到服务器,通过命令`java -jar app.jar`启动应用。可以使用 Docker 容器进行部署,编写 Dockerfile 构建镜像,然后运行容器。同时,配置数据库连接信息、服务器端口等参数,确保后端应用能够正常运行并提供接口服务。

 

• 前后端整合:确保前端页面能够正确访问后端接口,可以通过配置前端项目的代理规则,在开发阶段将请求代理到后端服务器。在生产环境中,通过 Nginx 等反向代理服务器将前端页面请求和后端接口请求分别转发到对应的服务器和端口,实现前后端的整合部署。

 

这种前后端分离的开发模式使得前后端可以独立开发、独立部署,提高了开发效率和项目的可维护性。同时,前后端通过定义好的接口进行交互,使得项目的扩展性和灵活性更强。

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

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

相关文章

【大数据2025】MapReduce

MapReduce 基础介绍 起源与发展&#xff1a;是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现&#xff0c;最初用于大规模网页数据并行处理&#xff0c;现成为 Hadoop 核心子项目之一&#xff0c;是面向批处理的分布式计算框架。基本原理&#xff1a;分为 map 和 reduce …

主从复制

简述mysql 主从复制原理及其工作过程&#xff0c;配置一主两从并验证。 主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…

【博客之星评选】2024年度前端学习总结

故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年&#xff0c;满心激动与自豪&#xff0c;我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新&#xff0c;这次能走到这…

《TikTok停服:信息安全警钟长鸣》

一、TikTok 停服事件回顾 2025 年 1 月 18 日晚&#xff0c;TikTok 通知美国用户&#xff0c;由于美官方禁令于 19 日起生效&#xff0c;TikTok 软件将暂时对用户停止服务。这一消息犹如一颗重磅炸弹&#xff0c;瞬间在全球范围内掀起轩然大波。美国用户对此猝不及防&#xff0…

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法&#xff1a;记忆化搜索DFS 算法&#xf…

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;2.2 结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;2.3 行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a; 3. 使用设计模式…

项目实战--网页五子棋(游戏大厅)(3)

我们的游戏大厅界面主要需要包含两个功能&#xff0c;一是显示用户信息&#xff0c;二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…

大模型UI:Gradio全解11——Chatbot:融合大模型的聊天机器人(4)

大模型UI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的聊天机器人&#xff08;4&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.4 使用Blocks创建自定义聊天机器人11.4.1 简单聊天机器人演示11.4.2 立即响应和流式传输11.4.…

STM32 FreeRTOS内存管理简介

在使用 FreeRTOS 创建任务、队列、信号量等对象时&#xff0c;通常都有动态创建和静态创建的方式。动态方式提供了更灵活的内存管理&#xff0c;而静态方式则更注重内存的静态分配和控制。 如果是1的&#xff0c;那么标准 C 库 malloc() 和 free() 函数有时可用于此目的&#…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

国产编辑器EverEdit -重复行

1 重复行 1.1 应用场景 在代码或文本编辑过程中&#xff0c; 经常需要快速复制当前行&#xff0c;比如&#xff0c;给对象的多个属性进行赋值。传统的做法是&#xff1a;选中行-> 复制-> 插入新行-> 粘贴&#xff0c;该操作有4个步骤&#xff0c;非常繁琐。 那有没…

NiceFish(美人鱼)

前端有 3 个版本&#xff1a; 浏览器环境移动端环境Electron 环境 服务端有 2 个版本&#xff1a; SpringBoot 版本&#xff08;已实现基于 Apache Shiro 的 RBAC 权限控制&#xff09;SpringCloud 版本 1.主要依赖 名称版本描述Angular16.2.0Angular 核心库。PrimeNG16.2…

华为ENSP:STP和链路聚合的管理与配置

这里将不再过度阐述STP和链路聚合的理论知识&#xff0c;不清楚的同学可以去观看Cisco文章中的理论知识 理论知识https://blog.csdn.net/2301_76341691/article/details/145166547?fromshareblogdetail&sharetypeblogdetail&sharerId145166547&sharereferPC&…

dl学习笔记:(4)简单神经网络

&#xff08;1&#xff09;单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…

三、华为交换机 Hybrid

一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路&#xff08;类似于Access接口&#xff09;&#xff0c;又可以连接交换机间的干道链路&#xff08;类似于Trunk接口&#xff09;。它允许多个VLAN的帧通过&#xff0c;并可以在出接口方向将某些VLAN帧的标签剥掉&#xff0…

Tensor 基本操作1 | PyTorch 深度学习实战

目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html 常用操作 unsqueeze 将多维数组解套&#xf…

Grafana系列之面板接入Prometheus Alertmanager

关于Grafana的仪表板Dashboard&#xff0c;以及面板Panel&#xff0c;参考Grafana系列之Dashboard。可以直接在面板上创建Alert&#xff0c;即所谓的Grafana Alert&#xff0c;参考Grafana系列之Grafana Alert。除了Grafana Alert外&#xff0c;面板也可接入Prometheus Alertma…

Windows 上安装 MongoDB 的 zip 包

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注&#xff1a; RPA应用研究&#xff0c;主流厂商产…

LeetCode 2266.统计打字方案数:排列组合

【LetMeFly】2266.统计打字方案数&#xff1a;排列组合 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-number-of-texts/ Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对应字母 i 次&#xff0c…

PTA乙级1001~1005【c++】

首先讲解一下PTA乙级在哪里。PTA乙级题其实就是PAT (Basic Level) Practice &#xff08;中文&#xff09; 1001 害死人不偿命的(3n1)猜想 #include<iostream> using namespace std;int main() {int cnt 0;int n;cin >> n;while(n ! 1){cnt ;if (n & 1){n …