JavaWeb 进阶:Vue.js 与 Spring Boot 全栈开发实战(Java 开发者视角)
JavaWeb 进阶:Vue.js 与 Spring Boot 全栈开发实战(Java 开发者视角)_java springboot+vue-CSDN博客
作为一名 Java 开发工程师,当你掌握了 HTML、CSS 和 JavaScript 的基础后,是时候接触现代前端框架了。Vue.js 以其简洁的 API、渐进式的设计和优秀的中文文档,成为众多 Java 开发者入门前端框架的首选。
Vue.js 让你能快速构建响应式、组件化的单页应用(SPA),与你的 Java 后端(Spring Boot)完美配合,打造现代化的全栈应用。
本文将从 Java 开发者的角度,系统讲解 Vue.js 的核心概念、语法,并通过一个完整的 Vue + Spring Boot 用户管理项目,带你实现前后端分离的全栈开发。
🧱 一、为什么 Java 开发者要学 Vue.js?
- 前后端分离是主流:现代 Web 开发普遍采用前后端分离架构,Java 负责提供 RESTful API,Vue 负责前端展示与交互。
- 提升开发效率:Vue 的组件化、数据绑定、虚拟 DOM 等特性,极大提升了前端开发效率和代码可维护性。
- 更好的用户体验:单页应用(SPA)提供接近原生应用的流畅体验。
- 全栈能力:掌握 Vue 让你具备独立开发小型全栈项目的能力,拓宽职业发展路径。
- 生态成熟:Vue 拥有庞大的生态系统(Vue Router, Vuex/Pinia, Vite, Element Plus 等)。
🔍 核心思想:Vue 的核心是 “数据驱动视图”。你只需关注数据(
data),视图(DOM)会自动更新。
🧠 二、Vue.js 核心概念速览
✅ 1. 创建 Vue 应用
-
// 使用 Vue 3 (推荐)
-
import { createApp } from 'vue'
-
-
const app = createApp({
-
data() {
-
return {
-
message: 'Hello Vue!'
-
}
-
}
-
})
-
-
app.mount('#app')
-
<div id="app">
-
{{ message }} <!-- 插值表达式,自动响应数据变化 -->
-
</div>
✅ 2. 响应式数据绑定
-
data() {
-
return {
-
count: 0,
-
user: {
-
name: '张三',
-
email: 'zhangsan@example.com'
-
}
-
}
-
}
-
<p>计数: {{ count }}</p>
-
<button @click="count++">+1</button> <!-- @click 是 v-on:click 的简写 -->
-
-
<p>姓名: <input v-model="user.name"></p> <!-- v-model 双向绑定 -->
-
<p>邮箱: {{ user.email }}</p>
✅ 3. 条件渲染与列表渲染
-
<!-- v-if / v-else -->
-
<div v-if="isLoggedIn">
-
<p>欢迎回来!</p>
-
</div>
-
<div v-else>
-
<p>请登录</p>
-
</div>
-
-
<!-- v-for 列表渲染 -->
-
<ul>
-
<li v-for="user in users" :key="user.id">
-
{{ user.name }} - {{ user.email }}
-
</li>
-
</ul>
✅ 4. 事件处理
-
<button @click="handleClick">点击我</button>
-
<button @click="increase(5)">增加5</button>
-
methods: {
-
handleClick() {
-
this.count++
-
},
-
increase(num) {
-
this.count += num
-
}
-
}
✅ 5. 组件化(Component)
Vue 的核心是将 UI 拆分为独立、可复用的组件。
-
<!-- UserCard.vue (子组件) -->
-
<template>
-
<div class="user-card">
-
<h3>{{ user.name }}</h3>
-
<p>{{ user.email }}</p>
-
</div>
-
</template>
-
-
<script>
-
export default {
-
props: ['user'] // 接收父组件传递的数据
-
}
-
</script>
-
<!-- App.vue (父组件) -->
-
<template>
-
<div>
-
<UserCard v-for="user in users" :key="user.id" :user="user" />
-
</div>
-
</template>
-
-
<script>
-
import UserCard from './components/UserCard.vue'
-
-
export default {
-
components: {
-
UserCard
-
},
-
data() {
-
return {
-
users: [
-
{ id: 1, name: '张三', email: 'zhangsan@example.com' },
-
{ id: 2, name: '李四', email: 'lisi@example.com' }
-
]
-
}
-
}
-
}
-
</script>
🚀 三、Vue 3 + Spring Boot 全栈项目实战:用户管理系统
我们将构建一个简单的用户管理系统,前端使用 Vue 3 + Vite + Element Plus,后端使用 Spring Boot。
✅ 1. 项目结构
-
frontend/ (Vue 项目)
-
├── src/
-
│ ├── components/
-
│ │ └── UserList.vue
-
│ ├── views/
-
│ │ └── UserManagement.vue
-
│ ├── App.vue
-
│ ├── main.js
-
│ └── api/ (API 调用封装)
-
│ └── userApi.js
-
└── ...
-
-
backend/ (Spring Boot 项目)
-
├── src/main/java/com/example/demo/
-
│ ├── controller/UserController.java
-
│ ├── service/UserService.java
-
│ ├── repository/UserRepository.java
-
│ ├── entity/User.java
-
│ └── DemoApplication.java
-
└── ...
✅ 2. Spring Boot 后端 API
实体类 User.java
-
@Entity
-
@Table(name = "users")
-
public class User {
-
@Id
-
@GeneratedValue(strategy = GenerationType.IDENTITY)
-
private Long id;
-
private String name;
-
private String email;
-
-
// Constructors, Getters, Setters
-
}
Controller UserController.java
-
-
-
// 允许前端域名访问(开发环境)
-
public class UserController {
-
-
-
private UserService userService;
-
-
// GET: 获取所有用户
-
-
public ResponseEntity<List<User>> getAllUsers() {
-
List<User> users = userService.findAll();
-
return ResponseEntity.ok(users);
-
}
-
-
// POST: 创建用户
-
-
public ResponseEntity<User> createUser( User user) {
-
User savedUser = userService.save(user);
-
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
-
}
-
-
// PUT: 更新用户
-
-
public ResponseEntity<User> updateUser( Long id, User userDetails) {
-
User updatedUser = userService.update(id, userDetails);
-
if (updatedUser != null) {
-
return ResponseEntity.ok(updatedUser);
-
} else {
-
return ResponseEntity.notFound().build();
-
}
-
}
-
-
// DELETE: 删除用户
-
-
public ResponseEntity<Void> deleteUser( Long id) {
-
boolean deleted = userService.deleteById(id);
-
if (deleted) {
-
return ResponseEntity.noContent().build();
-
} else {
-
return ResponseEntity.notFound().build();
-
}
-
}
-
}
✅ 3. Vue 前端调用 API
封装 API 调用 api/userApi.js
-
import axios from 'axios'
-
-
// 创建 axios 实例
-
const apiClient = axios.create({
-
baseURL: 'http://localhost:8080/api', // Spring Boot 后端地址
-
headers: {
-
'Content-Type': 'application/json'
-
}
-
})
-
-
export default {
-
// 获取所有用户
-
getUsers() {
-
return apiClient.get('/users')
-
},
-
// 创建用户
-
createUser(userData) {
-
return apiClient.post('/users', userData)
-
},
-
// 更新用户
-
updateUser(id, userData) {
-
return apiClient.put(`/users/${id}`, userData)
-
},
-
// 删除用户
-
deleteUser(id) {
-
return apiClient.delete(`/users/${id}`)
-
}
-
}
组件 UserManagement.vue
-
<template>
-
<div class="user-management">
-
<h2>用户管理</h2>
-
-
<!-- 添加用户表单 -->
-
<el-form :model="newUser" label-width="80px" @submit.prevent="addUser">
-
<el-form-item label="姓名">
-
<el-input v-model="newUser.name" />
-
</el-form-item>
-
<el-form-item label="邮箱">
-
<el-input v-model="newUser.email" />
-
</el-form-item>
-
<el-form-item>
-
<el-button type="primary" @click="addUser">添加用户</el-button>
-
</el-form-item>
-
</el-form>
-
-
<!-- 用户列表 -->
-
<el-table :data="users" style="width: 100%">
-
<el-table-column prop="id" label="ID" width="80" />
-
<el-table-column prop="name" label="姓名" />
-
<el-table-column prop="email" label="邮箱" />
-
<el-table-column label="操作">
-
<template #default="scope">
-
<el-button size="small" @click="editUser(scope.row)">编辑</el-button>
-
<el-button size="small" type="danger" @click="deleteUser(scope.row.id)">删除</el-button>
-
</template>
-
</el-table-column>
-
</el-table>
-
</div>
-
</template>
-
-
<script>
-
import userApi from '@/api/userApi' // 引入 API
-
-
export default {
-
data() {
-
return {
-
users: [], // 存储用户列表
-
newUser: { name: '', email: '' } // 新用户表单数据
-
}
-
},
-
mounted() {
-
this.fetchUsers() // 页面加载后获取用户列表
-
},
-
methods: {
-
// 获取用户列表
-
async fetchUsers() {
-
try {
-
const response = await userApi.getUsers()
-
this.users = response.data
-
} catch (error) {
-
console.error('获取用户失败:', error)
-
// 处理错误(如显示提示)
-
}
-
},
-
// 添加用户
-
async addUser() {
-
if (!this.newUser.name || !this.newUser.email) {
-
// 简单验证
-
return
-
}
-
try {
-
const response = await userApi.createUser(this.newUser)
-
this.users.push(response.data) // 将新用户添加到列表
-
this.newUser = { name: '', email: '' } // 重置表单
-
} catch (error) {
-
console.error('添加用户失败:', error)
-
}
-
},
-
// 删除用户
-
async deleteUser(id) {
-
try {
-
await userApi.deleteUser(id)
-
this.users = this.users.filter(user => user.id !== id) // 从列表中移除
-
} catch (error) {
-
console.error('删除用户失败:', error)
-
}
-
},
-
// 编辑用户 (简化版,实际项目可能用对话框)
-
editUser(user) {
-
// 实现编辑逻辑...
-
console.log('编辑用户:', user)
-
}
-
}
-
}
-
</script>
-
-
<style scoped>
-
.user-management {
-
padding: 20px;
-
}
-
</style>
✅ 4. 项目运行
- 启动后端:运行
DemoApplication.java,Spring Boot 应用启动在http://localhost:8080。 - 启动前端:
-
cd frontend
-
npm install
-
npm run dev
Vite 开发服务器启动在http://localhost:5173。 -
- 访问应用:浏览器打开
http://localhost:5173,即可看到用户管理界面,与后端进行数据交互。
⚠️ 四、关键配置与注意事项(Java 开发者视角)
✅ 1. 跨域问题(CORS)
前后端分离开发时,前端(http://localhost:5173)和后端(http://localhost:8080)端口不同,会遇到跨域问题。
解决方案:
- 后端配置(如上文
@CrossOrigin注解或全局配置类)。 - 前端代理(在
vite.config.js中配置代理,将/api请求代理到后端):-
// vite.config.js
-
export default defineConfig({
-
server: {
-
proxy: {
-
'/api': {
-
target: 'http://localhost:8080',
-
changeOrigin: true,
-
}
-
}
-
}
-
})
这样前端请求/api/users会被代理到http://localhost:8080/api/users,避免跨域。 -
✅ 2. 项目部署
- 后端:将 Spring Boot 项目打包成
jar或war,部署到服务器(如 Tomcat)。 - 前端:使用
npm run build生成静态文件(dist目录),将dist目录下的文件部署到 Nginx、Apache 等 Web 服务器,或直接放在 Spring Boot 的static目录下(简单场景)。
✅ 3. 状态管理(Pinia)
对于复杂应用,组件间共享状态(如用户登录信息、购物车)变得困难。可以使用 Pinia(Vue 3 官方推荐的状态管理库)。
✅ 4. 路由(Vue Router)
实现单页应用(SPA)的页面跳转,需要使用 Vue Router。
📊 五、总结:Vue.js 核心要点
| 概念 | 关键技术 | 说明 |
|---|---|---|
| 核心 | {{ }}, v-model, v-if, v-for, @click |
基础指令 |
| 组件 | <template>, <script>, <style>, props, emit |
UI 拆分与复用 |
| 响应式 | ref(), reactive(), computed, watch |
数据驱动视图 |
| 生态 | Vue Router (路由), Pinia (状态管理), Vite (构建工具) | 完整解决方案 |
| UI 框架 | Element Plus, Ant Design Vue, Vuetify | 快速构建美观界面 |
| 通信 | Axios / Fetch API | 调用后端 RESTful API |
💡 结语
Vue.js 是 Java 开发者迈向全栈之路的绝佳选择。它学习曲线平缓,文档优秀,与 Spring Boot 配合得天衣无缝。
通过本文的实战,你已经掌握了:
- Vue.js 的核心语法和组件化思想
- 如何使用 Axios 与 Spring Boot 后端进行 RESTful 交互
- 前后端分离项目的开发与调试流程
不要停留在“会用”,要动手实践! 尝试将你现有的 JavaWeb 项目前端部分用 Vue 重构,或者开发一个个人博客、后台管理系统。
掌握 Vue,你将解锁更广阔的 Web 开发世界!


浙公网安备 33010602011771号