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 相关文章推荐
用CSS+JS实现的进度条效果效果
Jun 05 Javascript
基于jquery的让页面控件不可用的实现代码
Apr 27 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
利用Javascript开发一个二维周视图日历
Dec 14 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 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使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
python中pygame模块用法实例
2014/10/09 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
python lambda的使用详解
2021/02/26 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
盛大笔试题
2016/11/05 面试题
实习鉴定评语
2014/01/19 职场文书
新书吧创业计划书
2014/01/31 职场文书
给校长的建议书100字
2014/05/16 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL