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 相关文章推荐
js中onload与onunload的使用示例
Aug 25 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
Nov 11 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
JS图片轮播与索引变色功能实例详解
Jul 06 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
Aug 28 Javascript
谈谈vue中mixin的一点理解
Dec 12 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
JavaScript复制变量三种方法实例详解
Jan 09 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
微信小程序文章详情功能完整实例
Jun 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
使用php转义输出HTML到JavaScript
2015/03/27 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
如何理解python对象
2020/06/21 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
Ado与Ado.net的相同与不同
2014/12/08 面试题
远东集团网络工程师面试题
2014/10/20 面试题
六年级学生评语
2014/04/22 职场文书
公司员工活动策划方案
2014/08/20 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
Python基础之Socket通信原理
2021/04/22 Python
python for循环赋值问题
2021/06/03 Python
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS