本文将详细介绍如何学习和使用Vue3+SpringBoot资料,从Vue3的基础入门到SpringBoot的环境搭建,再到两者项目的集成与部署,帮助开发者快速掌握这一技术栈。
Vue3基础入门Vue 是一个用于构建用户界面的渐进式框架。Vue 3 是 Vue.js 的最新版本,提供了更好的性能、更小的体积和更强大的功能。Vue 3 在其核心库中重写了大部分代码,包括新的响应式系统、组件 API、Composition API 等。这些改进使得开发人员可以更高效地编写可维护的代码。
首先需要安装 Vue CLI,它是 Vue.js 的官方脚手架,可以快速创建和管理 Vue 项目。
npm install -g @vue/cli
使用 Vue CLI 创建一个新的 Vue 3 项目:
vue create my-vue3-project
在创建项目时,Vue CLI 会询问你是否选择预设配置或手动选择特性。选择手动选择特性并确保选择 Vue 3,然后按提示完成项目创建。
进入项目目录并安装依赖:
cd my-vue3-project npm install
一个典型的 Vue 3 项目结构如下:
my-vue3-project/ ├── node_modules/ ├── public/ │ ├── index.html │ └── favicon.ico ├── src/ │ ├── assets/ │ ├── components/ │ ├── App.vue │ └── main.js ├── .gitignore ├── package.json └── README.md
public/index.html
:项目入口 HTML 文件。src/App.vue
:项目的根组件。src/main.js
:项目的入口文件,负责挂载根组件。Vue 3 支持模板语法和 JavaScript 语法。以下是简单的示例:
<template> <div> <h1>{{ message }}</h1> </div> </template> <script> export default { data() { return { message: 'Hello Vue 3' }; } }; </script>
Vue 3 的组件化开发是通过声明式语法实现的。组件的定义和使用如下:
<!-- 子组件 --> <template> <div> <p>子组件显示的内容</p> </div> </template> <script> export default { name: 'ChildComponent' }; </script> <!-- 父组件 --> <template> <div> <ChildComponent /> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent } }; </script>
<script setup> import { ref, onMounted } from 'vue'; const count = ref(0); onMounted(() => { console.log('Component is mounted!'); }); </script>
Spring Boot 是一个基于 Spring 框架的简化开发工具,它通过一系列配置和约定来简化 Spring 应用的开发。Spring Boot 支持快速开发独立的、生产级别的应用,它简化了 Java 配置,提供了默认配置。
你可以使用 Spring Initializr(https://start.spring.io/)或本地 IDE(如 IntelliJ IDEA)创建一个新的 Spring Boot 项目。
在 pom.xml
文件中添加必要的依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
Spring Boot 使用 application.properties
或 application.yml
作为配置文件。以下是一个简单的配置示例:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root
一个典型的 Spring Boot 项目结构如下:
my-springboot-project/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── myapp/ │ │ │ ├── MyApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── myapp/ │ └── MyApplicationTests.java └── pom.xml
主应用类通常包含 @SpringBootApplication
注解,用于启动 Spring Boot 应用:
package com.example.myapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
控制器用来处理 HTTP 请求。以下是一个简单的控制器示例:
package com.example.myapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/user") public String getUser() { return "Hello User!"; } }
前后端分离是指前端和后端通过 API 进行数据交互,前端负责展示用户界面,后端负责处理业务逻辑和数据存储。
集成主要涉及两个方面:前端项目配置跨域请求和后端设置跨域支持。
在 Vue 3 项目中,通常使用 axios
或其他 HTTP 客户端库进行数据请求。以下是在 Vue 3 中使用 axios
发起跨域请求的示例:
// main.js import axios from 'axios'; axios.defaults.baseURL = 'http://localhost:8080'; axios.defaults.withCredentials = true; export default function (Vue) { Vue.prototype.$axios = axios; }
在 Spring Boot 中,可以通过配置 CorsConfiguration
来支持跨域请求:
package com.example.myapp.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:8081") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true); } }
常见的前后端数据传输方式包括 JSON、XML 和其他格式。JSON 是最常用的方式,因为它简单、可读性强且易于解析。
在 Vue 3 中,可以使用 axios
发起 HTTP 请求。以下是一个示例:
import axios from 'axios'; export function getUserData() { return axios.get('/user') .then(response => { return response.data; }); }
在 Spring Boot 中,可以使用 @RestController
和 @GetMapping
等注解来定义 RESTful 接口。以下是一个简单的接口示例:
package com.example.myapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/user") public User getUser() { return new User(1, "John Doe"); } static class User { int id; String name; User(int id, String name) { this.id = id; this.name = name; } } }
测试接口可以使用 Postman、curl 或其他 HTTP 客户端工具。
package com.example.myapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/users") public List<User> getUsers(@RequestParam int page, @RequestParam int size) { // 实现分页逻辑 return users.subList(page * size, Math.min(page * size + size, users.size())); } }
package com.example.myapp.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/user") public User getUser() { throw new RuntimeException("User not found"); } @ExceptionHandler public ResponseEntity<Error> handleException(Exception ex) { Error error = new Error(); error.setMessage(ex.getMessage()); return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR); } static class Error { String message; } }
部署 Vue 3 前端项目通常涉及构建项目和将静态文件部署到 Web 服务器。首先,使用 Vue CLI 构建项目:
npm run build
构建完成后,dist
目录下会生成静态文件。这些文件可以部署到任何支持静态文件托管的服务器,如 Nginx、Apache 等。
Spring Boot 后端项目可以部署在任何 Java 应用服务器上,如 Tomcat、Jetty 等。以下是使用 Maven 插件部署到 Tomcat 的示例:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build>
使用 mvn tomcat7:run
命令启动 Tomcat 服务器。
部署到云服务器如 AWS 或 Azure 的具体步骤:
使用 Docker 部署的示例:
FROM openjdk:11-jre-slim COPY target/my-springboot-app.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
构建并运行 Docker 镜像:
docker build -t my-springboot-app . docker run -p 8080:8080 my-springboot-app
在项目联调和上线时,需要注意以下几点:
// 前端配置 axios.defaults.withCredentials = true; // 后端配置 registry.addMapping("/**") .allowedOrigins("http://localhost:8081") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true);
后端接口返回数据格式不一致:
# 配置文件示例 server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root