历史上最实用springboot加vue实现前后端分离

1.导读

这篇文章主要是讲了目前很火的springboot和vue实现前后端分离的web开发模式,主要是探究前后端分离的一种框架模式开发。属于基本入门篇,其中springboot实现了和spring data JPA的整合实现后端数据交互,其中也会探讨相关框架的整合和相似框架的对比,对于想了解和走进前后端分离的伙伴来说是一个非常值得学习的前后端入门教程。

2.前后端分离。

对于前后端分离来说,对于大部分web开发来说都是利大于弊,相对而言,业务逻辑复杂的项目或者项目庞大的适合前后端分离,一般项目较小或者修改变动较小的项目可以考虑前后端不分离。不过现在的硬件空间便宜的环境下,笔者还是非常建议前后端分离的。

好处:

1)前后端解耦,各自职责明确,分工合理,开发效率较高。

2)减轻服务器压力,各自配置,各自运作,更容易维护。

3)项目模块化更明显,业务逻辑更加清晰,不至于等到项目规模过大的时候无法维护或者更新项目。

4)方便单元测试以及bug调试,互不相干,前后端的人技术职责分开,减少前后端的人打架的概率,技术成本更少...

不好的地方:

1)搭建项目成本相对高一些,因为需要前后端项目同时运作。

2)对于项目的初步设计需要有很好的文档说明,大家都按照一定的约定来开发,这就考验项目技术经理的能力了。

不好的地方:

3.实现

首先搭建一个基本的springboot的项目,建好基本的目录结构。如下图:

这个就是基本的springboot的目录,

1)首先dao层是数据持久层,很多道友也比较喜欢叫它mapper层,起作用是操作sql语句实现和数据库的数据交互。

2)其次是service层,起作用是接收dao层的方法并且封装成适合业务逻辑的一条条服务,目的是提供给controller层调用,其中为了屏蔽掉太过复杂的业务逻辑,我们设置service层为接口,同目录下建立一个对应的实现Impl层。

3)再次是entity层,这个好理解,就是数据实体类,java是一门面向对象的语言,所以我们面向数据库也是实体封装好的,也就意味着我们不需要太多的去关心数据库属性的细节,只需要关心实体类就行了。

4)最后是controller层,这个就是控制service的每一条服务应该流向哪里去的控制器,分发器。

随着上面的顺序,首先解决dao层,怎样和数据库交互,老的方式我们就不说了,这里是整合spring data JPA。详情请看:https://blog.csdn.net/zhuzhezhuzhe1/article/details/80561449

基本上来说spring data JPA就是想实现后端数据持久层天下归一,让我们更少的去配置和编写相关的sql。重要的是srping data JPA实现了大部分的sql功能的函数,还可以执行自己写的sql语句和自定义方法。比如:

这样呢我们就可以在controller层直接调用该方法,如下service层:

controller层:

我们返回的是一个Map,也就是数据,通常里面有很多各种类型的数据,叫接口数据。前后端分离后端只负责数据,不负责页面逻辑。所以接下来问题就是前端如何获取这些数据,我们的目的也是我只提供接口文档的数据,其他的前端的我不关心。

上面的接口通过http://localhost:8080/zh就可以访问到,postmen里面测试如下:

 

至此,后端算是完了。

前端我们搭建一个简单的vue项目,项目结构如下:

一般利用vue都是采用axios来访问后端数据,故我们在App.vue里简单的写一个测试程序:

<template>
  <div class="info">
    这是从本地后端项目获取的json数据:
    <button v-on:click="postInfo">Greet</button>
    <br>
    {{this.info}}
  </div>
</template>

<script>
  export default {
    name: 'App',
    data() {
      return {
        info: {}
      }
    },
    methods: {
      postInfo: function () {
        this.$axios.get('http://localhost:8089/zh')
          .then(response => (this.info = response))
          .catch(function (error) { // 请求失败处理
            console.log(error);
          });
      }
    }
  }
</script>
<style>
  .info{
    width:100%;
    height: 100%;
  }
</style>

当然,这是失败的,因为跨域请求是会被阻止的,也就是说在本机上两个不同的项目访问也是跨域。解决办法就是我们在后端加一个配置类CorsConfig:

里面写上:

package com.example.demo3.controller;

import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

public class CorsConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addCorsMappings(CorsRegistry registry) {
        System.out.println("----------------------");
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .maxAge(3600);
    }
}

这里就是后端允许跨域访问:

前端vue简单的设置一下访问代理路径:

在config下的index.js里的dev下的proxyTable写上访问的后端接口路径:

proxyTable: {
  // proxy all requests starting with /api to jsonplaceholder
  '/api': {//虚拟目录
    target: 'http://localhost:8089',//后台NodeSpringboot项目的请求网址
    changeOrigin: true,
    pathRewrite: {
      '^/api': ''//由于上面的虚拟目录实际上是不存在的,不去掉的话访问的时候显示的url会变成'http://localhost:3000/api',所以得去掉
    }
  }

后面的访问路径改成/api/zh就能实现跨域访问了,注意这里的localhost换成了"/api":

methods: {
  postInfo: function () {
    this.$axios.get('/api/zh')
      .then(response => (this.info = response))
      .catch(function (error) { // 请求失败处理
        console.log(error);
      });
  }
}

最后的vue项目访问的结果为:

这样就实现了springboot后端,vue前端的前后端分离模式。也就是后端springboot负责数据传递,前端利用ajax或者vue的axios进行异步数据访问,并且在前端进行数据渲染。本文相关技术没有详细的介绍,主要是提供一种前后端分离的开发模式,相关技术同志可以自行学习。

一剪寒梅,傲立雪中,愿此生不负期望。

 

  • 15
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 可以使用 Spring Boot + Vue + Webpack 来实现前后端分离的框架,具体代码如下:Spring Boot:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>Vue:<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>Webpack:const path = require('path'); const webpack = require('webpack');module.exports = { entry: './src/js/app.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }) ] }; ### 回答2: 要实现Spring Boot和Vue前后端分离,可以使用以下具体的框架和代码: 1. 后端使用Spring Boot框架实现RESTful API: - 创建一个Spring Boot项目,添所需的依赖(如Spring Web、Spring Data JPA等)。 - 在项目中创建一个Controller类,使用`@RestController`注解标记。 - 编写各个API接口对应的方法,并使用`@RequestMapping`等注解进行路由映射。 - 可以使用Spring Data JPA来简化数据库操作,创建实体类和对应的Repository接口。 - 通过`@CrossOrigin`注解允许跨域请求。 2. 前端使用Vue框架实现单页应用: - 创建一个Vue项目,可以使用Vue CLI工具进行脚手架搭建。 - 在项目中创建相应的组件,用于展示数据和处理用户交互。 - 使用Vue Router进行前端路由管理。 - 使用Axios库进行前后端数据交互,发送HTTP请求获取后端API返回的数据。 - 使用Vue的生命周期钩子函数和Vue的数据绑定特性来处理页面逻辑。 3. 连接前后端: - 在Vue的组件中使用Axios发送请求到后端API。 - 接收后端返回的数据,并在页面上进行展示。 - 在触发某些事件时,调用Axios发送请求到后端API来更新数据。 这样,就可以实现前后端分离的架构。后端通过Spring Boot框架提供RESTful API,前端使用Vue框架构建单页应用,并通过Axios库发送HTTP请求和后端进行数据交互。通过这种方式,前后端可以独立开发和部署,提高了开发效率和灵活性。 ### 回答3: 要实现Spring Boot和Vue前后端分离,可以采用以下具体的框架和代码实现。 1. 后端框架:Spring Boot Spring Boot是一种用于构建独立的、基于Spring的Java应用程序的框架。它可以简化Spring应用程序的配置和部署,并提供了可集成的开发和测试工具。使用Spring Boot可以快速搭建后端API服务。 2. 前端框架:Vue.js Vue.js是一种用于构建用户界面的JavaScript框架,它可以实现响应式的数据绑定和组件化的开发。Vue.js使用简洁的语法和强大的生态系统,使得前端开发更高效和可维护。 3. 框架整合 在实现前后端分离的过程中,可以通过Restful API进行前后端数据交互。后端使用Spring Boot提供API接口,前端使用Vue.js发起HTTP请求获取数据。 典型的框架代码结构如下: - 后端代码结构 - src/main/java - com.example.demo - controller - UserController.java:定义用户相关的API接口,处理HTTP请求。 - model - User.java:定义用户类,包含用户的属性和方法。 - service - UserService.java:定义用户相关的业务逻辑,如用户的增删改查。 - UserServiceImpl.java:实现UserService接口的具体逻辑。 - repository - UserRepository.java:定义用户数据的访问方式,如数据库操作。 - src/main/resources - application.properties:配置Spring Boot应用的相关属性。 - 前端代码结构 - src - components - UserList.vue:用户列表组件,展示后端返回的用户数据。 - views - User.vue:用户界面,包含用户的增删改查等操作。 - router - index.js:前端路由配置文件,定义前端路由和页面的映射关系。 - App.vue:根组件,包含整个前端应用的布局和共享逻辑。 - main.js:入口文件,初始化Vue应用。 以上是一个简单的示例,可以根据实际需求和复杂程度进行相应的调整。通过Spring Boot提供API接口,Vue.js发起HTTP请求获取数据,实现前后端分离的开发模式。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值