ssm+vue前后端分离框架整合实现(附源码)


Posted in Javascript onJuly 08, 2020

前言

本文针对Spring+SpringMVC+Mybatis后台开发框架(基于maven构建)与vue前端框架(基于webpack构建)的项目整合进行介绍,对于ssm和vue单独项目的搭建不作为本文的重点,而着重介绍两者之间交互的要点。

SSM

项目结构

ssm+vue前后端分离框架整合实现(附源码)

说明
项目有service和web两个子项目组成,web依赖于service,其中web主要是control层内容,service则对应service层,而MyBatis内容放在了service项目中,spring配置文件放在了web项目中。将control层和service层分离成两个子项目,有利于项目的维护。

Vue

ssm+vue前后端分离框架整合实现(附源码)

2.可以看出,这个是标准的使用webpack搭建的vue项目

前后端交互(重点)

重点来了,前后端交互无非是前端能够访问后端接口,并且成功接收到后端返回数据。在配置过程中,需要注意两个点,一是配置后端接口地址,二是跨域问题。

配置后端接口地址

在vue中,使用的是axios发送ajax请求和后台交互,我们需要main.js中配置axios默认访问地址。

在src/main.js文件中增加

// 引用axios,并设置基础URL为后端服务api地址
var axios = require('axios')
axios.defaults.baseURL = "http://127.0.0.1:8080/blog/api"
//设置全局,每次ajax请求携带cookies
// axios.defaults.withCredentials = true
// 将API方法绑定到全局
Vue.prototype.$axios = axios

我们配置http://127.0.0.1:8080/blog/api为所有axios的默认请求地址,其中后台端口号为8080,而vue项目默认的端口号也为8080,所有需要修改vue项目中的默认访问端口号,改为8090(不与后台端口冲突即可)。

在config/index.js修改

ssm+vue前后端分离框架整合实现(附源码)

测试代码:

created:function(){
  var data = Qs.stringify({});
  this.$axios
  .post('/check', data)
  .then(successResponse => {
   this.responseResult = JSON.stringify(successResponse.data)
   if (successResponse.data.code === 200) {
    this.$notify({
     title: '成功',
     message: successResponse.data.message,
     type: 'success'
    });
   }else{
    this.$notify({
     title:"失败",
     message:successResponse.data.message,
     type:'error'
    })
   }
  })
  .catch(failResponse => {})
 }

配置好之后,运行项目发现前端仍然是无法访问后台接口,出现以下报错。可以看出是出现跨域问题了。

ssm+vue前后端分离框架整合实现(附源码)

解决跨域问题

对于跨域问题,SpringMVC提供了注解@CrossOrigin处理该问题(想知道@CrossOrigin做了什么,请移步Spring @CrossOrigin 注解原理),只需要在对应的接口中增加@CrossOrigin即可(也可通过全局配置的方式设置,这里不做介绍)。

MainController.java:

package com.blog.web.controller;


import com.blog.common.Result;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/blog/api")
public class MainController {

  private Logger logger = Logger.getLogger ( MainController.class );
  @RequestMapping ( value = "/check", method = RequestMethod.POST )
  @ResponseBody
  @CrossOrigin
  public Result check () {
    logger.info("MainController run");
    Result result = new Result();
    result.setMessage("SSM vue前后端框架搭建成功");
    return result;
  }

}

重启项目,返回正确结果。

ssm+vue前后端分离框架整合实现(附源码)

源码

后台代码:SSMDemo
前端代码:VueDemo

到此这篇关于ssm+vue前后端分离框架整合实现(附源码)的文章就介绍到这了,更多相关ssm+vue前后端分离内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 常见对象类创建代码与优缺点分析
Dec 07 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
Jul 09 Javascript
Jquery显示、隐藏元素以及添加删除样式
Aug 09 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
Vue单文件组件基础模板小结
Aug 10 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 Javascript
js正则表达式简单校验方法
Jan 03 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 #Javascript
Vue Render函数创建DOM节点代码实例
Jul 08 #Javascript
实例讲解React 组件生命周期
Jul 08 #Javascript
详细分析React 表单与事件
Jul 08 #Javascript
详解JavaScript之ES5的继承
Jul 08 #Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 #jQuery
微信小程序拖拽排序列表的示例代码
Jul 08 #Javascript
You might like
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
鼠标图片振动代码
2006/07/06 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
vue实现分页组件
2020/06/16 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
es6 symbol的实现方法示例
2019/04/02 Javascript
js实现一个简易计算器
2020/03/30 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
SQLite3中文编码 Python的实现
2017/01/11 Python
Python 文件操作的详解及实例
2017/09/18 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
python判断是空的实例分享
2020/07/06 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python开发一款翻译工具
2020/10/10 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
实体的生命周期
2013/08/31 面试题
少儿节目主持串词
2014/04/02 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
Python入门之基础语法详解
2021/05/11 Python
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL