SpringBoot(一)

第一部分 项目构思

项目设计: 蛇类的AI对战 King Of Bots 简称 KOB 灵感来源于北大的 botzone.org.cn 网站

每一个 user 可以产生若干个 bot,每个回合玩家可以指定一个 bot 上场对战

将项目进行拆分

  • 按页面进行拆分如 PK、对战列表(有哪些人玩)、排行榜、用户中心

  • PK模块里细分为:匹配界面(微服务)、实况直播(websocket)、真人PK(人与人、人机、websocket,可以考虑加一个聊天框进去)

  • 对战列表里面可以细分:录像回放

  • 排行榜里面可以细分: Bot列表

  • 用户中心里面细分: 注册、登录、我的 bot、bot的记录

http协议是一个单向协议,由客户端向服务端发送请求,服务端只能被动接收

websocket协议是一个双向协议,既可以客户端向服务端发送请求,也可以服务端向客户端发送请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JIMlDlbp-1658483172756)(E:\Sprintboot项目中用到的图片\项目设计.png)]

项目是前后端分离的,一份后端代码可以对应多个前端(网站、小程序、APP)

项目的初步构思:

web端:

ACAPP端:类似于AC Saber

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFWvOG7S-1658483172757)(E:\Sprintboot项目中用到的图片\ACAPP端的初步构思.png)]

第二部分配置 git 环境

git 的作用

  1. 存档 (方便自己后续回滚历史版本)
  2. 同步不同机器上的代码 (方便开发)

GitHubAcgit 通过 ssh 来通信,不支持用户名和密码登录;所以需要用 密钥 来操作

步骤:

  • cd到家目录 生成 密钥:ssh-keygen 会得到一个 .ssh目录

  • cd .ssh (进入.ssh目录)里面有两个文件 id_rsa(私钥) id_rsa.pub(公钥)

  • 复制 id_rsa.pub(公钥) 里面的内容传到 acgit (偏好设置里面的ssh密钥)上去

配制好密钥后,在本地创建一个文件 kob ,在这个kob文件创建 git 仓库(鼠标右键git bash here),输入命令

git init 之后在 kob 文件里面 会生成一个 .git 文件 同过命令 ls -a 可以查看

创建一个 readme.md 文件 “看看谁是蛇王”

然后使用 git status git add . git commit -m “创建项目” 保存一次

然后去 acgit 里面创建一个项目 King Of Bots ,然后复制 git 的全局设置,如果有多个项目,–global 可去掉

然后执行推送现有文件夹里面没有执行过的即可

项目的基本架构

服务器的本质就是接收用户的函数调用,返回一个结果 client 传一个 url ,server 返回一个字符串

开发中的两种模式: 1.前后端不分离 :根据数据在服务器端生成 HTML 代码

​ 2.前后端分离 : 1.向服务器发送一个链接, 先从 server 端将静态文件传送到 client 端,但是里面的数据先不发

​ 2.前端浏览器向服务器发送一个请求

​ 3.服务器只会将数据传回来,比如传 **json **格式的数据

​ 4.前端接到后,动态地将数据填充到页面里面

简而言之,如果页面是在用户浏览器里渲染的,就是前后端分离的,这里的渲染代表字符串拼接(向html代码里填充数据)

MVC模式: M:Model,数据库

V : 视图 ,可以认为就是 html,怎么拼接字符串

C : Controller,负责向用户返回数据的控制器

别纠结这些概念,只要知道每一个链接对应后端的一个函数;链接要实现什么东西,在函数里写什么逻辑就可以了

创建项目后端

tps://start.spring.io/加载慢的话,可以换成:https://start.aliyun.com

第一次创建了Spring 项目 添加了 Spring web、Thymeleaf 依赖 然后在Java里启动服务

在 com.kob.backend 包下再创建一个 controller 包 ; controller 这个包用来存储我们所有的后端函数

PK模块:在 controller 这个包下再创建一个 pk 包,pk包里创建一个 IndexControlle r类,用来存放 pk 的主页面

可以在对应的链接函数上面加上 @Controller 然后用注解@RequestMapping(“/pk/”) 表示父目录

如果想要返回一个页面的话,需要在 resources 的 templates 下 创建一个目录 templates.pk,然后在 pk 下创建一个名为 index 的 html 文件

再去 IndexControl 类里面 写一个方法返回 pk/index.html;此时默认 templates 为根目录,再添加一个注解@RequestMapping(“index/“)表示index为父目录

@RequestMapping("index/")
public String index() {
    return "pk/index.html";
}

resources 下的 static 一般会存三个目录:css js image

如果要显示一张图片的话,只需修改一下 templates.pk 目录下的 index.html ,此时 src 的默认目录为 static(即路径从 static 后面开始写)

<div style="text-align: center">
        <img src="/image/img.png" alt="">
</div>

以上是前后端不分离的写法。

前后端分离的写法如下:

首先在 controller.pk 下创建一个 BotInfoController 类

如果想要返回数据就不要用 @Controller 注解了,要用 @RestController 注解

@RestController               //可以只返回数据   @Controller 要返回页面
@RequestMapping("/pk/")
public class BotInfoController {
    @RequestMapping("getBotInfo/")
    public String getBotInfo() {
        return "hahah";
    }
}

前端是通过 controller 里面的 RequestMapping 匹配路径找到对应后端的函数的

修改端口

application.properties 里面可以修改端口号 server.port = 8080 可以修改成 server.port = 3000 ,因为 vue 的默认端口也是 8080 会产生冲突

下载vue并配置

打开 Power Shell 使用 npm i -g @vue/cli 直接下载 vue最新版,然后运行 vue ui 启动 vue 服务,然后使用vue 管理器在 kob 目录下创建 web 文件

下载相关的插件 routevuex ,安装依赖 jquerybootstrap

运行 Vue

点任务,点 server,然后 点运行;加载完之后点 输出 ,点击 localhost:8080, 看到 vue 页面表示成功了

然后停止运行,再创建一个新的项目在 kob 下创建 acapp

接着配置 acapp 添加 vuex 插件就可以了,直接在任务中运行

Vue 项目进行修改和瘦身

启动 vue 项目后发现切换页面链接里面有 # 号,用 vscode 打开 web 端,然后打开在 src/route 目录下的 index.js ,然后将 createWebHashHistory 改为 createWebHistory ,即去掉 Hash 字符串。

项目瘦身:删掉 views 目录下的 AboutView.vue 和 HomeView.vue

​ 删掉 components 目录下的 HelloWorld.vue

​ 删掉 App.vue 里面的 css 样式,剩下 如下代码,输出 Hello World!测试下

<template>
  <div>
    Hello World!
  </div>
  <router-view />
</template>

<style>
</style>

前端访问后端的函数

在 打开 web 的 src/App.vue 文件 ,每一个 vue 文件有三大标签 template、script、style 分别写 html、js、css

script 中写法比较固定 ,通常为如下代码,**其中 setup 为整个函数的入口(打开前端链接后开始第一时间进入的入口) **,目的调后端函数,取后端的信息方式为 Ajax

<script>
import $ from 'jquery'; //为了使用 Ajax
import { ref } from 'vue'; //为了在 vue 中定义变量

export default {
	name : "App",
    setup : () => {
        let bot_name = ref("");   //定义变量,使用该变量为 {{ bot_name }}
        let bot_rating = ref(""); //定义变量,使用该变量为 {{ bot_rating }}
        $.ajax({
            url:"http://127.0.0.1:3000/pk/getbotinfo/",
            type:"get",
            success:resp => {
                bot_name.value = resp.name;
                bot_rating.value = resp.rating;
            }
        });
        return {
            bot_name,
            bot_rating
        }
    }
}
</script>

随后在 template 写好提示信息

在这里如果 ajax 调用的 urlweburl 不一样(即域名不一样)就会产生跨域问题**(CORS)**,这个是浏览器的安全机制。

SpringBoot跨域问题

SpringBoot 中跨域问题的解决方案:

在后端的根目录下(com.kob.backend)创建一个 config 包,在这个包下再创建一个 CorsConfig 类 ,然后将讲义中的代码复制过来放到该类下即可(全覆盖掉)

其实原理非常简单,我们在表头里加一些属性就可以了,属性会告诉我们的浏览器,我们后端资源是允许其他域来访问的。

添加背景图片

将背景图片保存到 web/src/assets 下,然后打开 **web/src/App.vue ** 在 style 块中添加如下代码

body {
	background-image: url("@/assets/background.png"); // @/ 表示当前目录的根目录
    background-size:cover;                            // cover 表示100%填充
}

总结

vue 代码是在用户浏览器中执行的,用户打开网页时,会先将这一大段代码下载下来,然后进入 App.vue 中的setup 入口函数,通过 Ajax 访问到后端代码,然后通过回调函数 resp 得到后端返回的数据,使用 vue 中的变量接收后端数据即可,例如 myName.value = resp.name; 再将 myName 展示到前端上,即可完成前后端的交互;后端其实就想存储函数的地方。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值