JavaWeb 進階:Vue.js 與 Spring Boot 全棧開發實戰(Java 開發者視角)

作為一名 Java 開發工程師,當你掌握了 HTML、CSS 和 JavaScript 的基礎后,是時候接觸現代前端框架了。Vue.js 以其簡潔的 API、漸進式的設計和優秀的中文文檔,成為眾多 Java 開發者入門前端框架的首選。

Vue.js 讓你能快速構建響應式、組件化的單頁應用(SPA),與你的 Java 后端(Spring Boot)完美配合,打造現代化的全棧應用。

本文將從 Java 開發者的角度,系統講解 Vue.js 的核心概念、語法,并通過一個完整的 Vue + Spring Boot 用戶管理項目,帶你實現前后端分離的全棧開發。


🧱 一、為什么 Java 開發者要學 Vue.js?

  1. 前后端分離是主流:現代 Web 開發普遍采用前后端分離架構,Java 負責提供 RESTful API,Vue 負責前端展示與交互。
  2. 提升開發效率:Vue 的組件化、數據綁定、虛擬 DOM 等特性,極大提升了前端開發效率和代碼可維護性。
  3. 更好的用戶體驗:單頁應用(SPA)提供接近原生應用的流暢體驗。
  4. 全棧能力:掌握 Vue 讓你具備獨立開發小型全棧項目的能力,拓寬職業發展路徑。
  5. 生態成熟: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

@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "http://localhost:5173") // 允許前端域名訪問(開發環境)
public class UserController {@Autowiredprivate UserService userService;// GET: 獲取所有用戶@GetMappingpublic ResponseEntity<List<User>> getAllUsers() {List<User> users = userService.findAll();return ResponseEntity.ok(users);}// POST: 創建用戶@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.save(user);return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);}// PUT: 更新用戶@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {User updatedUser = userService.update(id, userDetails);if (updatedUser != null) {return ResponseEntity.ok(updatedUser);} else {return ResponseEntity.notFound().build();}}// DELETE: 刪除用戶@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable 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' // 引入 APIexport 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. 項目運行

  1. 啟動后端:運行?DemoApplication.java,Spring Boot 應用啟動在?http://localhost:8080
  2. 啟動前端
    cd frontend
    npm install
    npm run dev
    Vite 開發服務器啟動在?http://localhost:5173
  3. 訪問應用:瀏覽器打開?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,?emitUI 拆分與復用
響應式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 開發世界!


📌 關注我,獲取更多 Vue 3 + Spring Boot 全棧項目源碼、部署教程與面試題解析!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91101.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能體產品化的關鍵突破:企業智能化轉型的“最后一公里”如何邁過?

智能體產品化的關鍵突破&#xff1a;企業智能化轉型的“最后一公里”如何邁過&#xff1f; 在人工智能迅猛發展的當下&#xff0c;智能體&#xff08;Agent&#xff09;成為企業數字化轉型的新引擎。無論是市場分析、客戶服務&#xff0c;還是自動化辦公&#xff0c;智能體都被…

Rust × Elasticsearch官方 `elasticsearch` crate 上手指南

1 為什么選擇官方 Rust 客戶端&#xff1f; 語義化兼容&#xff1a;客戶端 主版本 與 ES 主版本 嚴格對應&#xff0c;8.x 客戶端可對接任何 8.x 服務器&#xff1b;不存在跨主版本兼容承諾 (docs.rs)100% API 覆蓋&#xff1a;穩定 API 全量映射&#xff0c;Beta/實驗特性可按…

怎樣畫流程圖?符號與流程解構教程

在數字化辦公和項目管理日益復雜的當下&#xff0c;流程圖早已不是工程師、項目經理的專屬工具&#xff0c;它正快速成為每一位職場人提升表達效率、理清工作邏輯的利器。無論是軟件開發中的流程規范、產品設計階段的用戶路徑&#xff0c;還是企業內部的審批流程、團隊協作機制…

vue3 + vite || Vue3 + Webpack創建項目

1.vue3 vite搭建項目方法 &#xff08;需要提前裝node,js&#xff09; 1. 使用官方 create-vite 工具&#xff08;推薦&#xff09; 1.使用npm----------------------------- npm create vuelatest2.使用pnpm----------------------------- pnpm create vuelatest3.使用yarn--…

Vue2-封裝一個含所有表單控件且支持動態增減行列的表格組件

效果1. 無編輯權限&#xff1a;顯示普通表格2. 有編輯權限&#xff1a;根據配置顯示編輯控件3. 可以動態新增行&#xff0c;也可以動態新增列 核心代碼無權限情況的核心代碼<!-- 無編輯權限時顯示普通表格 --><el-tablev-if"!hasEditPermission"ref"ta…

網絡原理 - TCP/IP(一)

目錄 1. 應用層&#xff1a;用戶與網絡的 “交互窗口” 1.1 應用層協議&#xff1a;規范交互的 “通用語言” 1.2 自定義協議&#xff1a;適配特殊需求的 “專屬規則” 1.3 應用層數據格式&#xff1a;讓數據 “說得明白” 1.3.1 XML&#xff1a;結構化但繁瑣的 “老…

Orange的運維學習日記--16.Linux時間管理

Orange的運維學習日記–16. Linux時間管理 文章目錄Orange的運維學習日記--16. Linux時間管理系統與硬件時鐘時鐘類型對比查看內核支持的時鐘源本地時間調整使用 date 查看與設置一次性同步&#xff1a;ntpdate同步到硬件時鐘&#xff1a;hwclock基于 systemd 的 timedatectl交…

Git 與 GitHub 的對比與使用指南

Git 與 GitHub 的對比與使用指南 在軟件開發中&#xff0c;Git 和 GitHub 是兩個密切相關但本質不同的工具。下面我將逐步解釋它們的定義、區別、核心概念以及如何協同使用&#xff0c;確保內容真實可靠&#xff0c;基于廣泛的技術實踐。 1. 什么是 Git&#xff1f; Git 是一個…

20250726-4-Kubernetes 網絡-Service DNS名稱解析_筆記

一、Service DNS名稱 ?1. 例題:通信需求 通信場景:項目A中的Pod需要與項目B中的Pod進行通信,直接使用Pod IP不可行,因為Pod IP會隨著Pod生命周期變化。 解決方案:通過Service提供的穩定IP地址進行通信,不受Pod重建、擴容/縮容等操作影響。 2. CoreDNS介紹 ?? 基本功能…

vscode 登錄ssh記住密碼直接登錄設置

第一種情況在系統已經生成密鑰對的情況下&#xff1a;點擊這里的設置第二步&#xff1a;第三步&#xff1a;沒有填寫的給填寫一下第四步驟&#xff1a;保存后進入選擇這個點開第五步&#xff1a;去Linux終端下輸入這個命令就OK了echo "ssh-rsa內容" >> ~/.ssh/…

Nginx 動靜分離配置(詳細版)

本文介紹了Nginx 動靜分離相關配置&#xff0c;主要包括了配置文件創建、配置示例、配置原理解析以及重新啟用配置文件等等 本文目錄1. 創建 Nginx 配置文件2. 配置示例3. 配置原理解析4. 啟用配置文件并重新加載 Nginx1. 創建 Nginx 配置文件 在 /etc/nginx/sites-available …

C# CAN通信上位機系統設計與實現

C# CAN通信上位機系統設計與實現 C# CAN通信上位機程序&#xff0c;支持多種CAN適配器&#xff0c;提供數據收發、協議解析、數據可視化等功能。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usi…

Ubuntu20.04子系統

常用 # 導出分發版到 E盤 wsl --export Ubuntu-20.04 E:\wsl-ubuntu20.04.tar # 注銷原有分發版 wsl --unregister Ubuntu-20.04 # 導入到 E盤的新路徑&#xff08;例如 E:\WSL\Ubuntu-20.04&#xff09; wsl --import Ubuntu-20.04 E:\WSL\Ubuntu-20.04 E:\wsl-ubuntu20.04.t…

【設計模式】狀態模式 (狀態對象(Objects for States))

狀態模式&#xff08;State Pattern&#xff09;詳解一、狀態模式簡介 狀態模式&#xff08;State Pattern&#xff09; 是一種 行為型設計模式(對象行為型模式)&#xff0c;它允許一個對象在其內部狀態改變時改變其行為。換句話說&#xff0c;對象看起來好像修改了它的類。 你…

工業前端組件庫重構心法:如何讓開發效率提升60%的交互模塊設計邏輯

工業前端組件庫重構心法&#xff1a;如何讓開發效率提升60%的交互模塊設計邏輯內容摘要在工業項目開發中&#xff0c;前端組件庫是提升開發效率的關鍵。然而&#xff0c;許多團隊的組件庫存在設計不合理、維護困難等問題&#xff0c;導致開發效率低下。如果能夠重構組件庫&…

leetcode 74. 搜索二維矩陣

二分查找經典題目&#xff1b;根據矩陣的特點&#xff0c;不需要把矩陣拉成一維&#xff0c;二維轉成一維映射關系為a[i]matrix[?i//n?][i%n]&#xff1b;然后開始二分查找&#xff0c;一直二分的收縮區間&#xff1b;class Solution:def searchMatrix(self, matrix: List[Li…

26考研英語詞匯的邏輯筆記(Unit31-43)

行為UNIT 31詞匯數量&#xff1a;274 詞群數量&#xff1a;16 詞群邏輯&#xff1a;行為舉止 | 行為標準與原則 給予、收回 | 接受、允許、讓步、拒絕 促進、鼓勵 | 支持、幫助、資助 破壞相關 | 錯誤、改正 阻礙、打擾相關 | 禁止、阻止、限制 值得、有利、不利相關 | 有意、故…

Lua(數據庫訪問)

Lua 數據庫訪問方法Lua 本身不提供內置的數據庫訪問功能&#xff0c;但可以通過第三方庫實現與多種數據庫的交互。以下是常見的 Lua 數據庫訪問方法&#xff1a;使用 LuaSQL 庫LuaSQL 是一個輕量級數據庫訪問庫&#xff0c;支持多種數據庫后端&#xff08;MySQL、PostgreSQL、S…

在 Dell PowerEdge T440 上通過 iDRAC9 安裝 Proxmox VE

在 Dell PowerEdge T440 上通過 iDRAC9 安裝 Proxmox VE 文章目錄 在 Dell PowerEdge T440 上通過 iDRAC9 安裝 Proxmox VE 1. 前置要求 1.1. 硬件信息(例) 1.2. 準備工作 2. 安裝步驟 2.1. 登錄 iDRAC9 2.2. 啟動虛擬控制臺 2.3. 掛載 Proxmox VE ISO 2.4. 設置服務器從虛擬…

window下MySQL安裝(三)卸載mysql

window下MySQL安裝&#xff08;三&#xff09;卸載mysql 卸載mysql數據庫&#xff0c;停止服務&#xff0c;備份文件&#xff0c;刪除mysql文件。結束。 停止mysql服務 以管理員身份打開命令提示符或 PowerShell&#xff1a; net stop <服務名稱> 示例&#xff1a;net st…