115.【SpringBoot(IDEA)+Vue(Vscode)前后端交互】

news2024/11/30 6:45:24

SpringBoot+Vue前后端分离

  • (一)、环境介绍
  • (二)、Vscode部分
    • 1.静态资源
    • 2.配置route路由和axios异步
    • 3.配置跨域支持
  • (三)、IDEA部分
    • 1.创建SpringBoot项目
    • 2.创建两个实体类
    • 3.创建控制层
    • 4.配置后端响应的端口
  • (四)、Vue和SpringBoot交互
    • 1.同时运行IDEA和Vscode
    • 2.访问登入界面

(一)、环境介绍

在SpringBoot+Vue的整合项目中我们使用的编译软件分别有: Vscode来编写Vue脚手架和IDEA来编写SpringBoot。vue脚手架是3.0以上的。

(二)、Vscode部分

1.静态资源

1.App.vue
这里的router-view一定要写出来,因为我们最终呈现到App.vue这个组件中去的

<template>
  <div>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name:'App',
}
</script>

<style>

</style>

2.src/pages/Login.vue
将前端数据传递给后端,后端并响应的操作

<template>
    <div>
        用户名:<input type="text" v-model="loginForm.username" placeholder="请输入用户名"/>
        <br>
        <br>
        密码: <input type="password" v-model="loginForm.password" placeholder="请输入密码"/>
        <br><br>
        <button v-on:click="login">登录</button>
    </div>
</template>

<script>
export default {
    name:'Login',
    data(){
        return{
            loginForm:{
                username:'',
                password:''
            },
            responseResult: []
        }
   },
   methods:{
       login(){
            this.$axios
           .post('/login',{  // 传递给后端路径为/login的组件中去
                username: this.loginForm.username,
                password: this.loginForm.password
            })
            .then(successResponse => {
                if(successResponse.data.code ===200){  // 假如说后端传递过来的状态码是200,那么就成功登入。
                    console.log(111111)
                    this.$router.replace({path:'/index'})
                }
            })
            .catch(failResponse => {

            })
       }
    
   }
    
}
</script>

<style scoped>


</style>

3.src/pages/Index.vue
页面假如登入成功,那么我们就跳转到这个页面

<template>
    <div>
        <h2>HelloWorld</h2>
    </div>
</template>

<script>
export default {
    name:'Index'
}
</script>

<style scoped>

</style>

2.配置route路由和axios异步

1.安装路由:在vscode的控制台下输入:

npm install  vue-router@3

在这里插入图片描述
2.安装axios: 在vscode的控制台下输入:

 npm add axios

在这里插入图片描述
3.配置路由: src/router/index.js

// TODO: 该文件是Vue路由器文件,路由管理着所有的路由
import Vue from 'vue'  // 引入阉割版本的vue
import VueRouter from 'vue-router'  // 引入路由插件

// TODO:引入我们需要的组件
import Login from '../pages/Login.vue'
import Index from '../pages/Index.vue'
Vue.use(VueRouter) // 使用路由

// 创建一个路由器,管理所有的路由
const router = new VueRouter({
    routes: [// 一堆路由。一个对象就是一个路由
    {
        path: '/login',
        component: Login
      },
      {
        path: '/index',
        component: Index
      }
    ],
})
// 抛出我们创建的路由器
export default router

4.注册axios和route路由: src/main.js
设置反向代理和全局注册axios,这里路径末尾的api目的是为了和后端开头的api是连接的桥梁。

import Vue from 'vue'  // 引入阉割版本的vue
import App from './App.vue' // 引入App.vue组件

//引入我们刚才编写的router配置
import router from './router/index'   


//设置反向代理,前端请求默认发送到 http://localhost:8443/api
var axios = require('axios')
axios.defaults.baseURL = 'http://localhost:8443/api'
//全局注册,之后可在其他组件中通过 this.$axios 发送数据
Vue.prototype.$axios= axios


Vue.config.productionTip = false;
const vm=new Vue({
    router: router, // 传入路由
    render: h => h(App)
}).$mount('#app');
console.log('vm',vm)

3.配置跨域支持

vue.config.js
配置这个跨域支持是为了让后端能够访问到前端的资源。

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,// 关闭语法检查
    // 配置跨域支持
    devServer:{
      proxy: {
        '/api':{
          target:'http://localhost:8443',//跨域支持的端口
          changeOrihin: true,
          pathRewrite:{
            '^/api':''
          }
        }
      },
    }
},
)

(三)、IDEA部分

1.创建SpringBoot项目

创建SpringBoot并引入web依赖。
在这里插入图片描述

2.创建两个实体类

1.com/jsxs/pojo/User.java
用于用户的认证

package com.jsxs.pojo;

/**
 * @Author Jsxs
 * @Date 2023/5/13 19:51
 * @PackageName:com.jsxs.pojo
 * @ClassName: User
 * @Description: TODO
 * @Version 1.0
 */
public class User {
    int id;
    String username;
    String password;

    public int getId(){
        return id;
    }

    public void setId(int id){
        this.id = id;
    }

    public String getUsername(){
        return username;
    }

    public void setUsername(String username){
        this.username = username;
    }

    public String getPassword(){
        return password;
    }

    public void setPassword(String password){
        this.password = password;
    }
}


2.com/jsxs/pojo/Result.java
用于返回状态码

package com.jsxs.result;

/**
 * @Author Jsxs
 * @Date 2023/5/13 19:53
 * @PackageName:com.jsxs.result
 * @ClassName: Result
 * @Description: TODO
 * @Version 1.0
 */
public class Result {
    //响应码
    private int code;

    public Result(int code){
        this.code = code;
    }

    public int getCode(){
        return code;
    }

    public void setCode(int code){
        this.code = code;
    }
}

3.创建控制层

controller/LoginController.java

package com.jsxs.controller;

import com.jsxs.pojo.User;
import com.jsxs.result.Result;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.HtmlUtils;

import java.util.Objects;

/**
 * @Author Jsxs
 * @Date 2023/5/13 19:53
 * @PackageName:com.jsxs.controller
 * @ClassName: LoginController
 * @Description: TODO
 * @Version 1.0
 */
@Controller
public class LoginController {

    @CrossOrigin
    @PostMapping(value = "api/login")
    @ResponseBody
    public Result login(@RequestBody User requestUser){
        //对html 标签进行转义,防止XSS攻击
        //分别与接收到的User类的username和password进行比较,根据结果的不停Result(不同的响应码)
        String username = requestUser.getUsername();
        username = HtmlUtils.htmlEscape(username);

        if(!Objects.equals("1",username) || !Objects.equals("1",requestUser.getPassword())){
            String message = "账号密码错误";
            System.out.println("test");
            return new Result(400);
        }else{
            System.out.println("成功!!");
            return new Result(200);
        }
    }
}

4.配置后端响应的端口

server.port=8443

(四)、Vue和SpringBoot交互

1.同时运行IDEA和Vscode

IDEA
在这里插入图片描述
Vscode: npm run serve
在这里插入图片描述

2.访问登入界面

访问: http://localhost:8080/#/login
在这里插入图片描述
密码输入正确后 显示成功。
在这里插入图片描述

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

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

相关文章

C语言——操作符详解

哈喽&#xff0c;大家好&#xff0c;今天我们来学习C语言中的各中操作符。 目录 1.操作符的分类 2.算数操作符 整数的二进制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.赋值操作符 6.单目操作符 6.1 单目操作符介绍 ~ 的用法&#xff1a; 6.2 si…

冰点还原2023中文版最新电脑系统数据恢复软件

冰点还原是什么&#xff1f;对其不了解的用户可能会认为它是《冰雪奇缘》的番外篇或续篇之类的&#xff0c;其实它们俩没有半毛钱关系&#xff0c;它其实是一款系统还原备份软件。冰点还原精灵是一款强大的系统备份、还原、修复软件&#xff0c;可以在极短时间内将系统还原到初…

第十四届蓝桥杯青少组选拔赛Python真题 (2022年11月27日),包含答案

第十四届蓝桥杯青少组选拔赛Python真题 (2022年11月27日) 一、编程题 第 1 题 问答题 输入一个整数N (-100sNs100)输出N10的结果例如: N 5&#xff0c;510 的结果为15 (15-510)[输入描述] 输入一个整数N (-100sNs100) [输出描述] 输出一个整数&#xff0c;表示N10的结果 [样…

【C生万物】 指针篇 (进级) 下

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 承接上篇&#xff0c;这期继续C语言指针的学习。 目录 Part4:数组参数&指针参数 …

股票量价关系基础知识8----图解各阶段量价关系:价平量增

图解各阶段量价关系&#xff1a;价平量增 价平量增是指在成交量增加的情况下&#xff0c;股价几乎维持在一个价位附近波动。 一、上涨初期的价平量增 &#xff08;一&#xff09;形态分析 在股价上涨的初期&#xff0c;价平量增是筹码良性换手的现象&#xff0c;这可能是主力在…

企业如何提高销售对CRM的使用率

CRM销售管理系统是帮助企业管理销售和客户的工具。它使企业能够跟踪和分析客户行为&#xff0c;管理客户关系&#xff0c;从而提高销售线索转化率。尽管CRM系统有着诸多的好处&#xff0c;但CRM的使用率往往很低&#xff0c;尤其是在销售团队中。为什么CRM使用率低销售不爱用&a…

gradle插件分享-手把手教你写gradle插件

gradle插件分享-手把手教你写gradle插件 写在前面&#xff1a; 在基础熟练的基础上&#xff0c;完全可以考虑基于Booster、ByteX等框架来开发&#xff0c;效率应该会高一些。 修改字节码的插件不止asm一个&#xff0c;还有javaassist等&#xff0c;可以多做一些尝试&#xff…

双令牌机制(chatgpt)

先记录下 双令牌机制主要用于增加Web应用程序的安全性。这种机制通常包括两种类型的令牌&#xff1a;访问令牌&#xff08;Access Token&#xff09;和刷新令牌&#xff08;Refresh Token&#xff09;。 1&#xff0e;访问令牌:访问令牌是用户完成身份验证后接收的令 牌&…

Three.js 模型体素化原理及实现

在本文中&#xff0c;我们探索了 3D 模型的体素化过程&#xff0c;重点是使用导入的 glTF 模型创建 3D 像素艺术。 本文包括一个最终演示&#xff0c;涵盖了可以使用体素化实现的各种 3D 效果。 我们将提供涵盖以下主题的分步指南&#xff1a; 确定 XYZ 坐标是否在 3D 网格内的…

SES2000浅地层剖面仪自带处理软件ISE2.95的处理步骤

SES2000是目前市面上主流浅地层剖面仪。它的自带处理软件ISE经常和设备一起更新&#xff0c;造成ISE版本众多&#xff0c;虽然数据采集的格式都是raw&#xff0c;但是低版本ISE软件打不开高版本raw数据&#xff0c;即使软件版本相近&#xff0c;比如都是2.95版本序列&#xff0…

AI测试|天猫精灵智能音箱测试策略与方法

一、业务介绍 2014年11月&#xff0c;亚马逊推出了一款全新概念的智能音箱&#xff1a;Echo&#xff0c;这款产品最大的亮点是将智能语音交互技术植入到传统音箱中&#xff0c;从而赋予了音箱人工智能的属性。这个被称为“Alexa”的语音助手可以像你的朋友一样与你交流&#x…

Grafana系列-统一展示-9-Jaeger数据源

系列文章 Grafana 系列文章 配置 Jaeger data source Grafana内置了对Jaeger的支持&#xff0c;它提供了开源的端到端分布式跟踪。本文解释了针对Jaeger数据源的配置和查询。 关键的配置如下: URL: Jaeger 实例的 URL, 如: http://localhost:16686 或 http://localhost:16…

PPT技能之新手入门,零基础光速进阶的宝藏

不会PPT只是借口&#xff0c;懒惰才是你的心里话。只要现在开始学习&#xff0c;不出三个月&#xff0c;华丽蜕变成PPT大神&#xff01;你的进步&#xff0c;我的功劳&#xff01; 你的关注&#xff0c;是我最大的动力&#xff01;你的转发&#xff0c;我的10W&#xff01;茫茫…

维京人的秘密:残暴背后的真相,敬畏神灵死后进入英灵殿

维京人&#xff0c;一个充满神秘色彩的名字&#xff0c;勾起了人们对于古代北欧残暴战士的想象。然而&#xff0c;维京人究竟是如何形成这样的形象&#xff0c;他们的传统和习俗又是如何塑造了他们的一生呢&#xff1f; 首先&#xff0c;我们要了解维京人的生活背景。维京人生活…

Linux线程同步(5)——互斥锁or自旋锁?

自旋锁概述 自旋锁与互斥锁很相似&#xff0c;从本质上说也是一把锁&#xff0c;在访问共享资源之前对自旋锁进行上锁&#xff0c;在访问完成后释放自旋锁&#xff08;解锁&#xff09;&#xff1b;事实上&#xff0c;从实现方式上来说&#xff0c;互斥锁是基于自旋锁…

shell脚本之“sort“、“uniq“、“tr“、“cut“、“split“、“paste“以及“eval“命令详解

文章目录 sort命令uniq命令tr命令cut命令split命令paste命令eval命令总结 sort命令 以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序. 比较原则&#xff1a;从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出. 语法…

Chrome和edge报STATUS_STACK_BUFFER_OVERRUN错误的处理办法

Chrome和edge突然就报STATUS_STACK_BUFFER_OVERRUN错误&#xff0c;原因未知。 解决方案&#xff1a; Chrome 卸载本地的chrome访问https://www.chromedownloads.net/chrome64win/&#xff08;windows64&#xff09;https://www.chromedownloads.net/chrome32win/&#xff0…

母亲节到了,写一个简单的C++代码给老妈送上一个爱心祝福

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; C/C专栏 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾…

快速上手Arthas

目录 基本概述 安装方式 基础指令 jvm相关指令 class/classloader相关指令 monitor/watch/trace相关指令 其他 基本概述 jconsole等工具都必须在服务端项目进程中配置相关的监控参数&#xff0c;然后工具通过远程连接到项目进程&#xff0c;获取相关的数据。这样就会带…

快速查询的秘籍——B+树索引

页和记录的关系示意图 InnoDB根据主键查找数据的过程是什么&#xff1f; 没有索引的查找是什么&#xff1f;索引查找和通过主键查找有什么关系&#xff1f; 索引是解决什么问题的&#xff1f; 索引是解决定位数据页的&#xff0c;而不是定位一个页中的数据的&#xff0c;定位…