十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SpringBoot+Vue3前后端分离项目实战:两小时部署美食网站

SpringBoot+Vue3前后端分离项目实战:两小时部署美食网站 这次我们来看一个基于 SpringBoot 和 Vue3 的美食网站项目。对于正在寻找毕业设计、课程设计或者想快速搭建一个完整前后端分离项目的同学来说这类“开箱即用”的实战项目价值很高。它不只是一个简单的增删改查CRUD演示而是一个具备完整业务逻辑、前后端分离架构、可直接部署运行的实战系统。这个项目的核心价值在于“快速验证”和“学习复用”。你不需要从零开始搭建脚手架项目已经集成了 SpringBoot 后端、Vue3 前端、数据库设计以及基础的增删改查功能。本文将带你从零开始在两小时内完成这个美食网站的部署、运行和功能验证。我们会重点关注项目的环境要求、启动方式、核心功能模块、前后端接口联调以及如何将其改造为你自己的毕设或简历项目。1. 核心能力速览能力项说明项目类型前后端分离的 Web 应用美食信息管理网站技术栈后端SpringBoot MyBatis-Plus MySQL前端Vue3 Element Plus Axios核心功能美食信息管理增删改查、分类管理、用户管理、图片上传等硬件门槛普通开发电脑即可无特殊 GPU 要求。主要依赖 JDK、Node.js、MySQL。启动方式后端通过 IDE如 IDEA启动或mvn spring-boot:run前端npm run dev启动开发服务器接口能力提供标准的 RESTful API支持前端调用便于二次开发和接口测试。批量任务不涉及复杂的 AI 批量任务但数据导入导出、批量删除等属于常规业务功能。适合场景毕业设计/课程设计、个人学习/练手项目、简历项目经验、快速原型验证。2. 适用场景与使用边界这个项目非常适合以下几类开发者在校学生毕设/课设需要一个结构完整、技术栈主流、有源码可参考的项目作为基础。你可以在此基础上修改主题如改为图书管理、旅游景点等快速完成自己的设计。求职者丰富简历需要一个真实的项目来展示你对 SpringBoot、Vue3、前后端分离、RESTful API 等技术的理解和应用能力。全栈入门学习者想通过一个完整项目理解前后端如何分工协作、接口如何定义和调用、数据如何流动。快速原型验证需要快速搭建一个带后台管理功能的信息展示网站原型。使用边界与注意事项非生产级该项目主要面向学习和演示在安全性如 SQL 注入防护、XSS 攻击、性能优化如缓存、数据库连接池调优、高并发处理等方面可能未做深度优化不建议直接用于生产环境。版权与合规如果项目中使用了示例图片或数据在你自己部署和展示时请确保替换为拥有合法版权的素材避免侵权风险。功能边界项目聚焦于经典的“增删改查”及管理后台不包含在线支付、即时通讯、复杂推荐算法等高级功能。但它的架构清晰非常适合作为添加这些功能的起点。3. 环境准备与前置条件在开始之前请确保你的开发环境满足以下要求。这是项目能够成功运行的基础。操作系统Windows 10/11, macOS, Linux (如 Ubuntu) 均可。内存建议 8GB 及以上。磁盘空间至少预留 2GB 空间用于安装环境和项目文件。软件环境清单Java 开发环境JDK版本 8 或 11推荐 JDK 11与 SpringBoot 2.x/3.x 兼容性更好。安装后配置JAVA_HOME环境变量。Maven用于管理项目依赖和构建。安装后配置MAVEN_HOME并将bin目录加入PATH。IDE可选但推荐IntelliJ IDEA社区版或旗舰版或 Eclipse。IDEA 对 SpringBoot 和 Maven 的支持更友好。前端开发环境Node.js版本 16.x 或 18.x推荐 LTS 版本。安装包自带npm。包管理工具使用npm或yarn。本文以npm为例。数据库MySQL版本 5.7 或 8.0。需要提前安装并启动 MySQL 服务。数据库管理工具可选Navicat、DBeaver 或 MySQL Workbench用于执行 SQL 脚本和查看数据。环境验证命令打开终端Windows 下为 CMD 或 PowerShell依次执行以下命令确认版本信息正常输出。# 检查 Java 版本 java -version # 检查 Maven 版本 mvn -v # 检查 Node.js 和 npm 版本 node -v npm -v # 检查 MySQL 是否可连接 (假设用户为 root按提示输入密码) mysql -u root -p -e SELECT VERSION();4. 安装部署与启动方式假设你已经从提供的源码链接下载了项目压缩包并解压。项目目录结构通常如下food-website/ ├── backend/ # SpringBoot 后端项目 │ ├── src/ │ ├── pom.xml │ └── ... ├── frontend/ # Vue3 前端项目 │ ├── src/ │ ├── package.json │ └── ... └── database/ # 数据库 SQL 脚本 └── food_db.sql4.1 数据库初始化登录 MySQL创建一个新的数据库例如food_db。CREATE DATABASE IF NOT EXISTS food_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE food_db;执行database/food_db.sql脚本文件。你可以使用命令行或图形化工具导入。# 命令行方式 (在包含sql文件的目录下执行) mysql -u root -p food_db food_db.sql执行成功后数据库中将创建所需的表如food、category、user等并可能插入一些示例数据。4.2 后端项目配置与启动导入项目使用 IDEA 打开backend文件夹。IDEA 会自动识别为 Maven 项目并开始下载依赖。修改配置文件找到后端项目的配置文件通常是src/main/resources/application.yml或application.properties。关键修改项是数据库连接信息。# application.yml 示例 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/food_db?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai username: root # 你的数据库用户名 password: your_password # 你的数据库密码 servlet: multipart: max-file-size: 10MB # 文件上传大小限制 max-request-size: 10MB启动后端服务方式一IDEA找到包含SpringBootApplication注解的主类如FoodApplication右键点击Run。方式二命令行在backend目录下执行mvn spring-boot:run。 启动成功后控制台会输出类似Tomcat started on port(s): 8080的信息。此时SpringBoot 后端服务已在http://localhost:8080运行。4.3 前端项目配置与启动安装依赖打开终端进入frontend目录执行npm install。这会根据package.json安装所有前端依赖包如 Vue3, Element Plus, Axios 等。网络状况会影响安装速度。配置接口代理关键步骤前端开发服务器需要能访问后端 API。修改frontend/vite.config.js或vue.config.js取决于项目构建工具中的代理配置。// vite.config.js 示例 import { defineConfig } from vite import vue from vitejs/plugin-vue export default defineConfig({ plugins: [vue()], server: { port: 3000, // 前端开发服务器端口 proxy: { /api: { // 将所有以 /api 开头的请求转发到后端 target: http://localhost:8080, // 后端服务地址 changeOrigin: true, // rewrite: (path) path.replace(/^\/api/, ) // 根据后端实际接口路径决定是否需要重写 } } } })启动前端服务在frontend目录下执行npm run dev。启动成功后终端会提示访问地址通常是http://localhost:3000。访问系统打开浏览器访问http://localhost:3000。如果一切顺利你将看到美食网站的前端界面。后端接口服务在http://localhost:8080运行前端通过代理访问它。5. 功能测试与效果验证项目启动后我们需要系统性地验证其核心功能是否正常工作。以下是按模块进行的测试流程。5.1 用户登录与权限验证测试目的验证系统基础访问控制是否正常。操作步骤访问http://localhost:3000应跳转到登录页。使用database/food_db.sql中提供的默认账号如admin/admin123进行登录。预期结果登录成功跳转到系统主页面如仪表盘或美食列表页。判断成功页面成功跳转且浏览器开发者工具F12 - Network中登录请求如/api/user/login返回成功状态码如 200和 token 信息。常见失败原因数据库连接失败检查后端配置文件中的数据库信息。用户不存在或密码错误检查 SQL 脚本中的初始数据。前端代理配置错误检查vite.config.js中的target地址是否正确指向后端服务。5.2 美食信息管理增删改查 - CRUD这是项目的核心功能模块。查询列表操作进入“美食管理”或类似菜单页面。预期页面应展示美食列表包含名称、分类、价格、图片等字段。列表应能正常分页。验证查看浏览器 Network应有类似GET /api/food/list?page1size10的请求并成功返回数据。新增美食操作点击“新增”按钮填写表单名称、分类、价格、描述、上传图片提交。预期提交后列表刷新新数据出现在列表中。上传的图片应能正确显示。验证Network 中应有POST /api/food请求状态码为 200 或 201。检查数据库food表确认数据已插入。编辑美食操作在列表点击某条数据的“编辑”按钮修改信息后保存。预期列表对应数据更新为修改后的内容。验证Network 中应有PUT /api/food/{id}请求。检查数据库对应记录是否更新。删除美食操作点击某条数据的“删除”按钮确认删除。预期该条数据从列表中消失。验证Network 中应有DELETE /api/food/{id}请求。检查数据库对应记录是否被删除可能是逻辑删除设置deleted标志位。5.3 分类管理功能测试目的验证与美食关联的“分类”数据的管理功能。操作进入“分类管理”页面尝试对分类进行增删改查操作。预期分类的增删改查功能正常。在新增或编辑美食时下拉框中能正确加载出已创建的分类列表。关联性验证删除一个已被美食使用的分类时系统应有合理的处理如禁止删除、提示存在关联数据。5.4 图片上传功能测试目的验证文件上传功能是否正常图片是否可正确存储和访问。操作在新增或编辑美食时点击上传组件选择一张本地图片JPG/PNG。预期前端显示上传进度和预览图。提交后美食列表或详情中能通过http://localhost:8080/uploads/xxx.jpg这样的 URL 访问到图片。验证检查后端控制台确认图片已保存到配置的目录如D:/upload或./uploads。检查返回的数据中图片字段存储的是相对路径或可访问的 URL。常见问题上传失败检查后端application.yml中spring.servlet.multipart配置的文件大小限制。检查上传目录的读写权限。图片无法访问检查后端是否配置了静态资源映射。例如在 SpringBoot 中可能需要WebMvcConfigurer将/uploads/**路径映射到本地文件目录。6. 接口 API 与二次开发理解并能够调用项目的 API是进行二次开发的基础。6.1 接口文档与测试查找接口文档许多 SpringBoot 项目会集成 Swagger 或 Knife4j 来自动生成 API 文档。启动后端服务后尝试访问以下地址http://localhost:8080/swagger-ui.htmlhttp://localhost:8080/doc.html如果成功你将看到一个可视化的接口测试页面可以查看所有接口的详细参数并在线调试。使用 Postman 测试如果没有集成文档可以通过浏览器 Network 面板查看请求格式然后使用 Postman 等工具独立测试 API。获取美食列表GET http://localhost:8080/api/food/list?page1size10新增美食POST http://localhost:8080/api/food(Body: JSON, Headers:Content-Type: application/json)6.2 二次开发示例添加一个“搜索”功能假设你想在美食列表上增加按名称关键字搜索的功能。后端修改Java在FoodController中新增一个方法。// FoodController.java GetMapping(/list) public Result list(RequestParam(defaultValue 1) Integer page, RequestParam(defaultValue 10) Integer size, RequestParam(required false) String name) { // 新增参数 QueryWrapperFood queryWrapper new QueryWrapper(); if (StringUtils.isNotBlank(name)) { queryWrapper.like(food_name, name); // 假设数据库字段是 food_name } PageFood pageInfo new Page(page, size); IPageFood pageResult foodService.page(pageInfo, queryWrapper); return Result.success(pageResult); }修改对应的 Service 层和 Mapper 层如果使用 MyBatis-Plus通常只需修改 Controller 和 QueryWrapper。前端修改Vue3在美食列表页的 Vue 组件中添加一个输入框和搜索按钮。!-- FoodList.vue 模板部分 -- el-input v-modelsearchName placeholder请输入美食名称 stylewidth: 200px; / el-button typeprimary clickhandleSearch搜索/el-button// FoodList.vue 脚本部分 import { ref } from vue; import { getFoodList } from /api/food; // 假设有封装好的API const searchName ref(); const tableData ref([]); const pageInfo ref({current: 1, size: 10, total: 0}); const loadData async () { const params { page: pageInfo.value.current, size: pageInfo.value.size, name: searchName.value // 传递搜索参数 }; const res await getFoodList(params); tableData.value res.data.records; pageInfo.value.total res.data.total; }; const handleSearch () { pageInfo.value.current 1; // 搜索时回到第一页 loadData(); }; // 初始化加载 onMounted(() { loadData(); });修改/api/food.js中的getFoodList函数使其接受params对象。通过这个简单的例子你可以了解如何在现有项目基础上进行功能扩展。7. 资源占用与性能观察对于此类业务管理系统性能瓶颈通常出现在数据库和前端资源加载上。内存与 CPU 占用后端SpringBoot启动后在任务管理器或系统监视器中Java 进程通常占用 300MB - 800MB 内存具体取决于堆内存设置-Xmx和项目复杂度。在低并发下 CPU 占用很低。前端Node Dev Server开发服务器npm run dev进程内存占用约 100MB - 200MB。生产构建后静态资源由 Nginx 等服务器提供不占用 Node 运行时内存。数据库连接观察 MySQL 连接数。在简单的增删改查操作下连接数很少。如果遇到“连接池耗尽”错误需要检查后端配置如spring.datasource.hikari.maximum-pool-size。前端资源加载性能打开浏览器开发者工具的Network标签页禁用缓存Disable cache刷新页面。观察.js,.css, 图片等资源的加载时间和大小。如果vendor.js文件过大1MB可能需要考虑前端路由懒加载或组件库按需引入优化。API 响应时间在开发者工具 Network 中查看关键 API 请求如/api/food/list的Time列。在本地开发环境响应时间应在几十到几百毫秒内。如果过慢可能是数据库查询未加索引或逻辑复杂。8. 常见问题与排查方法在部署和运行过程中你可能会遇到以下问题。这里提供系统的排查思路。问题现象可能原因排查方式解决方案后端启动失败端口冲突8080 端口被其他程序如另一个SpringBoot应用、Tomcat占用。1. 查看后端启动日志中的错误信息。2. 命令行执行netstat -ano | findstr :8080(Win) 或lsof -i:8080(Mac/Linux)。1. 终止占用端口的进程。2. 修改application.yml中的server.port为其他端口如 8081。前端npm install失败1. 网络问题无法连接 npm 仓库。2. Node.js 版本不兼容。3. 项目依赖包冲突。1. 检查网络尝试ping registry.npmjs.org。2. 检查package.json中的engines字段。3. 查看报错信息通常是某个包安装失败。1. 配置 npm 国内镜像源npm config set registry https://registry.npmmirror.com。2. 使用与项目要求匹配的 Node.js 版本。3. 删除node_modules和package-lock.json重新npm install。前端访问localhost:3000报错连接失败前端开发服务器未成功启动。查看运行npm run dev的终端窗口是否有错误输出。根据终端错误信息解决常见于端口被占用或依赖缺失。可尝试修改vite.config.js中的server.port。前端页面能打开但数据加载失败Network 中 API 请求报错1. 后端服务未运行。2. 前端代理配置错误。3. 后端接口路径与前端请求路径不匹配。4. 跨域问题CORS。1. 确认http://localhost:8080是否可以访问。2. 检查vite.config.js中的proxy配置。3. 对比前端请求的 URL 和后端 Controller 定义的RequestMapping路径。4. 查看浏览器 Console 是否有 CORS 错误。1. 启动后端服务。2. 修正代理配置的target。3. 统一前后端接口路径前缀或使用代理的rewrite规则。4. 在后端添加 CORS 配置CrossOrigin或全局配置。图片上传成功但无法显示1. 图片保存路径不正确。2. 静态资源未映射。3. 返回给前端的图片路径是本地绝对路径。1. 检查后端代码中文件保存的目录是否存在、是否有写入权限。2. 检查后端是否配置了WebMvcConfigurer将 URL 路径映射到磁盘目录。3. 查看返回的图片字段值。1. 确保保存目录正确且可写。2. 添加静态资源映射配置。3. 确保返回的是可通过 Web 访问的相对路径或完整 URL如/uploads/filename.jpg。数据库连接失败1. MySQL 服务未启动。2.application.yml中的数据库配置url, username, password错误。3. 数据库驱动版本不匹配。查看后端启动日志会有明确的数据库连接错误信息。1. 启动 MySQL 服务。2. 仔细核对配置文件特别是密码中的特殊字符。3. 检查pom.xml中的mysql-connector-java版本是否与 MySQL 版本兼容。9. 最佳实践与使用建议为了让这个项目更好地服务于你的学习和开发这里有一些建议代码阅读与理解在运行起来之后不要止步于功能。花时间阅读后端 Controller、Service、Mapper 层的代码以及前端的 Vue 组件、路由、状态管理如 Pinia和 API 封装。理解数据是如何从数据库到前端页面渲染出来的。数据库设计学习打开food_db.sql文件研究表结构设计。思考字段类型、索引、外键关联的设计原因。这是学习数据库设计的好样本。修改为你的项目改主题将“美食”实体改为“图书”、“电影”、“商品”、“旅游景点”等。这需要修改表名、字段名、Java 实体类、前端页面文本和图片。加功能在现有 CRUD 基础上尝试添加“收藏”、“评论”、“点赞”、“购物车”等常见业务模块。换 UI尝试使用不同的 Vue UI 组件库如 Ant Design Vue、Naive UI来重构前端界面。版本管理立即将项目导入到 Git如 GitHub、Gitee并做出你的第一次修改提交。这是良好的开发习惯。部署尝试学习如何将该项目部署到云服务器。后端可以打包成 Jar 文件用java -jar运行前端使用npm run build生成静态文件然后用 Nginx 托管。这能让你了解应用从开发到上线的完整流程。安全与合规如果项目用于展示或作为毕设务必替换所有示例数据尤其是图片使用自己拥有版权或符合 CC0 协议的素材避免侵权风险。10. 总结与下一步这个 SpringBoot Vue3 美食网站项目是一个典型且实用的前后端分离实战案例。它的最大价值在于提供了一个立即可运行、结构清晰、技术栈主流的代码框架让你能跳过繁琐的脚手架搭建直接聚焦于业务功能的理解和扩展。最值得尝试的点快速获得成就感按照本文步骤你可以在两小时内看到一个功能完整的网站跑起来。学习完整链路从数据库设计、后端 API 开发到前端页面交互你能看到全栈开发的每一个环节。极佳的二次开发基础代码结构规范非常适合在其基础上修改、添加功能变成你自己的项目。最先应该验证的功能务必按顺序完成数据库初始化 - 后端启动 - 前端启动 - 登录系统 - 美食增删改查这条主线。这是项目最核心的流程打通了它就证明基础环境完全没问题。最容易踩的坑环境变量和配置JDK版本、Node版本、MySQL密码、配置文件中的数据库连接字符串任何一个出错都会导致启动失败。务必仔细核对。前后端联调80% 的问题出在代理配置或 CORS 上。善用浏览器开发者工具的 Network 和 Console 面板进行调试。图片上传路径理解文件是如何从前端表单传到后端并最终通过 HTTP 服务被访问的。后续扩展方向引入状态管理如果项目未使用可以尝试集成 Pinia 来管理全局状态如用户信息。添加权限控制实现更细粒度的角色权限管理RBAC例如管理员和普通用户的不同菜单和操作权限。优化性能为频繁查询的数据库字段添加索引引入 Redis 缓存热点数据前端组件和路由做懒加载。容器化部署学习使用 Docker 和 Docker Compose 将后端、前端、数据库打包成容器实现一键部署。建议将本文和项目源码一起收藏作为你未来开发类似管理系统的一个快速参考模板。当你需要搭建一个新项目时这个经过验证的框架能为你节省大量初期搭建的时间。
返回列表