SpringBoot融入Vue的简单测试
一.配置静态资源映射器
在springBoot项目之中,由于它兼容Web依赖,故而它支持web服务,普通的开发一般就会把一些静态的资源放在springBoot的项目之下,对于怎么访问这些静态资源就需要简单的了解了
首先,springBoot的强大之处在于自动装配和扫描,既然是自动扫描,那么它就一定要一个指定的扫描范围,所谓约定大于配置,如果每个文件夹都放静态资源,那么springBoot的速度也快不起来,因为大部分时间都扫描资源去了。故而springBoot为了解决这个问题,它在自动扫描静态资源的时候只会扫描下面的这些路径:
- /classpath/META-INF/resource/
- /classpath/resouce/
- /classpath/static/
- /classpath/public
这些目录如果您看不懂,没关系,你只要记住静态资源统一放在static文件夹(包)下面就好了

那些静态资源需要放在这个static包下面呢?
可以简单总结有HTML文件,CSS文件,JavaScript文件,图片,视频,音频等文件都是静态资源,如果您的项目需要用到,都需要放在这个static文件夹下面,由于这些文件类型比较多,一般可以在static包下面继续新建包,用于分门别类的装静态资源

如上图,在静态资源比较多的情况下,我们就可以通过继续向下一级新建包来分类这些静态资源,接下来简单的测试一个小Demo,SpringBoot中怎么访问静态的Html文件
环境搭建
springBoot需要添加Web依赖,可以打开你的pom.xml文件查看是否包含了sping-boot-starter-web,如果已经包含就不需要管它

首先在resource下新建一个static包,如果你已经建好了就继续下一步,第二步新建一个html页面,命名可以叫main.html

新建一个html文件之后,就可以写一些简单的测试内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> </head> <body> <div id="app" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> </div> </body> </html>

由于我们的静态资源文件是新建在static包下面的,那么springBoot会自动帮我们扫描这些静态资源,这时候就可以使用springBoot的启动器,启动这个Web项目
被@SpringBootApplication注解标记的类就是启动器,点击绿色的小三角就可以启动springBoot了

正常启动之后去浏览器地址栏输入:localhost:8080/main.html

我们可以发现直接请求静态资源世界弹出了Html页面,接下来就需要配置一个映射器给这个html文件;
为什么要配置静态资源的映射器呢?
你要知道一般的开发中,会有很多个静态资源,如果你不配置映射器给它,那么你每次访问都需要输入完整的页面名称,第一手动输入如果包的层级关系多了,懒得输入,第二直接访问文件会导致文件名和文件所在地址暴露在地址栏,容易被非法分子利用,故而需要给静态资源设置一个映射器。
怎么设置呢?
这也是springBoot的一个配置类,只需要实现WebMvcConfigurer接口,然后重写里面的方法就好了:

由于这是一个配置类所以需要加上@Configuration 注解,标记这个类是SpringBoot的配置的一部分,当容器启动后springBoot会根据这个类的代码进行配置
同时重写配置类中的一个方法,添加main.html页面的映射为 /m,springBoot配置之后,我们就可以使用/m拿到这个页面了,当然这个/m可以自定义,后面的/main.html就必须是你的html文件所在位置了

我们可以发现,经过配置类的注册,果然/m也可以代替/main.html进行请求静态页面了
接下来基于这个html文件,来快速开始一下Vue的测试
二.引入Vue框架
入门Vue可以去菜鸟教程:https://www.runoob.com/vue3/vue3-tutorial.html
首先我们需要知道Vue是一个前端的框架,它的出现就是为了使前端可以工程化,模块化,提升开发的效率;使用Vue的好处就是我们可以像面向对象编程一样编写前端代码;当然这些都是后戏,现在我们需要做的第一个目标就是引入Vue的依赖。引入Vue的方式有很多,既然是入门我们就一切从简,只使用两种方式
- CDN在线引入
- 本地引入
1. 首先是CDN在线引入,它的有点是快速,简洁,它只需要在html文件中加上一行代码就好了:
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.26/vue.global.min.js"></script>
缺点就是CDN引入的方式是在页面初始化的时候从网上加载下来的,如果网络抽风或者服务器不稳定都会导致CDN引入失败
2. 本地引入
本地引入就需要将CDN的地址输入到浏览器https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.26/vue.global.min.js,然后就会打开一个页面,上面有很多JS代码,这就是Vue框架的实现代码,只需要将其ctrl + s 保存,或者右键浏览器--另存为一个js文件就下载好了:

如上图,点击另存为,然后选择保存到位置,记住这个保存位置就好了,后面需要赋值到项目中

它的名字也不需要改,比如我就把它放在桌面,方便后面的复制,选好存储位置直接点击保存就好了,再次声明需要记得保存这个文件的位置
接下来我们回到Idea中,需要在static包下面新建一个JS包,用来装JS文件,前面提到过,目的是为了分门别类这些静态资源

注意一定要建在static包下面,这样SpringBoot才能扫描到这个包
然后回到桌面(你放下载Vue文件的位置),复制这个文件,回到Idea中选中这个JS包,注意一定要点击选中它,然后粘贴,就将其引入到项目中了

Vue的使用
注意:修改完代码之后就重启springBoot,注意每次请求的时候(也就是在浏览器地址栏输入地址的时候)都需要重启,不然就是无效的,一定要重启springboot!一定要重启springboot!一定要重启springboot!
将Vue的依赖都引入之后,就可以使用Vue来简单显示一些东西到页面上了
可以打开菜鸟教程的这个网站:https://www.runoob.com/try/try.php?filename=vue3-hw
然后我们开始使用Vue,先引入依赖到html文件中,让Vue在main.html文件中生效
第一种CDN引入:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.26/vue.global.min.js"></script> </head> <body> <div id="app" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> </div> </body> </html>

如上图,将其放在<head></head>标签对之间就可以了
第二种方式:本地引入到main.html中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="JS/vue.global.min.js"></script> </head> <body> <div id="app" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> </div> </body> </html>

以上两种方式实现一种就可以了,如果您一种引入不成功,那么请切换到另一种,两种都是OK的,但有时候CDN会抽风
接下来复制材料教程上的起步代码,打开这个网站:https://www.runoob.com/try/try.php?filename=vue3-hw
先复制被script标签包裹的内容:<script></script>
<script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script>
将上面的代码复制到您的main.html文件中:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="JS/vue.global.min.js"></script> </head> <body> <div id="app" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> </div> <script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script> </body> </html>

如上图就是复制好了<script></script>标签中的内容,下面的操作就很简单了,但是需要仔细一点,在script代码中vue实例定义了一个成员变量message,接下来我们要把里面的值取出来,操作就是将{{message}}放在<div>盒子标签中,使用{{}}这种语法就是vue提供的数据双向绑定,可以直接在页面中取出vue实例中的属性值
<div id="hello-vue" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> {{message}} </div>
注意需要将<div>标签的id属性值更换为 hello-vue ,这样才能绑定vue的实例

然后使用刚刚的方式再次请求这个页面,启动springboot,访问localhost:8080/m 或者 localhost:8080/main.html

我们发现hello Vue在页面上显示了,说明测试Vue的引入成功了
后面我们就需要继续引入第二个组件:axios,异步通信
三.引入axios
axios的目的是实现前后端的通信,引入它可以打开网站:https://www.runoob.com/vue3/vue3-ajax-axios.html
引入方式也是两种,和引入vue是一样的,故而我就不再次操作了,这次我直接使用CDN的方式引入
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
在我们的引入vue代码下面加上这段代码就好了
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="JS/vue.global.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="hello-vue" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> {{message}} </div> <script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script> </body> </html>

如上,只需要多加一行代码就引入axios了,接下来就可以使用axios进行前后端通信了
先写前端的通信:可以打开网站对照复制就好了,手写的话容易出错:https://www.runoob.com/try/try.php?filename=vue3-ajax-axios
mounted () {
axios
.get('https://www.runoob.com/try/ajax/json_demo.json')
.then(response => (this.info = response))
.catch(function (error) { // 请求失败处理
console.log(error);
});
}
需要复制的代码就是上面的这段,mounted方法的意思是当vue挂载到div盒子上就执行,再加上axios的话;意思就是当页面加载完成后,就发送一个axios请求到后端
接下啦就将这段代码引入到我们的main.html中去:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="JS/vue.global.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="hello-vue" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> {{message}} </div> <script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } }, mounted () { axios .get('https://www.runoob.com/try/ajax/json_demo.json') .then(response => (this.message = response)) .catch(function (error) { // 请求失败处理 console.log(error); }); } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script> </body> </html>
如上图,我们只是将axios的代码段引入到了main.html中了,还没有修改,get()方法后面的地址,那是因为后端还没有写,所以这些就回到springBoot中创建一个controller包用来处理axios发送过来的异步请求
新建一个包controller,在新建一个类MyController

如上图,新建大controller包应该和启动器在同一级目录,同时MyController在controller包下面,接下来是类中方法的代码:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; //注解这个类为controller @RestController public class MyController { //请求的名称,前端调用/getInfo时,由这个方法处理 @GetMapping("/getInfo") public String getInfo(){ //返回给前端的数据 return "SpringBoot返回"; } }

这是一个很简单的请求,只需要使用前端只需要使用/getInfo请求,就可以拿到后端的额数据
接下来就是更改前端的axios的get()方法的请求路径:

修改时候前端的main.html代码应该为:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.26/vue.global.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="hello-vue" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> {{message}} </div> <script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } }, mounted () { axios .get('/getInfo') .then(response => (this.message = response)) .catch(function (error) { // 请求失败处理 console.log(error); }); } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script> </body> </html>
然后启动springBoot项目,和前面的一样的操作,访问地址为:localhost:8080/m 或者 localhost:8080/main.html
应该会看到如下内容:

看到这一大串不要慌,说明你已经成功了,因为我们Vue是直接取得整个响应内容,所以才有这么大一块,一般我们也只需要返回的数据,故而只需要修改main.html中的内容:

修改之后的完整代码为:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>这是首页</title> <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.26/vue.global.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="hello-vue" style="text-align: center;margin-top: 100px;color: deepskyblue"> <h1>测试访问静态Html页面</h1> <h1>转发到此,说明访问首页成功</h1> {{message}} </div> <script> const HelloVueApp = { data() { return { message: 'Hello Vue!!' } }, mounted () { axios .get('/getInfo') .then(response => (this.message = response.data)) .catch(function (error) { // 请求失败处理 console.log(error); }); } } Vue.createApp(HelloVueApp).mount('#hello-vue') </script> </body> </html>
注意:修改完代码之后就重启springBoot,注意每次请求的时候(也就是在浏览器地址栏输入地址的时候)都需要重启,不然就是无效的,一定要重启springboot!一定要重启springboot!一定要重启springboot!
接下来再次请求:localhost:8080/m 或者 localhost:8080/main.html

如上图,就是后端返回的代码被Vue接收到了,这就说明前端引入vue,axios成功,基本的环境就搭建好了
我们就可以基于这个开发架构去完成更多的功能了。
------END-----
本文虽经反复斟酌,但仍可能存在疏漏或不当之处,衷心希望得到各位同行的批评指正,以期进一步完善。
浙公网安备 33010602011771号