news 2026/5/1 11:47:50

前后端分离的网站毕业设计:新手入门实战与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前后端分离的网站毕业设计:新手入门实战与避坑指南


前后端分离的网站毕业设计:新手入门实战与避坑指南

摘要:许多计算机专业学生在毕业设计中首次接触前后端分离架构,常因技术选型混乱、接口联调困难或部署流程不熟导致项目延期。本文从零开始,详解如何基于 Vue + Spring Boot 构建一个结构清晰、可维护的前后端分离项目,涵盖 RESTful API 设计、跨域处理、JWT 认证及 Nginx 部署等核心环节。读者将掌握标准化开发流程,避免常见配置陷阱,高效完成可展示的毕业作品。


1. 前后端协作的四大痛点

第一次做毕设,最怕“前后端说不到一块去”。我踩过的坑,总结下来就这四点:

  1. 接口约定不清
    后端把字段名写成user_name,前端却按userName解析,一跑就 500。

  2. 本地联调失败
    前端npm run dev起在localhost:5173,后端SpringBoot跑在localhost:8080,浏览器一条CORS错误直接劝退。

  3. 环境差异
    本机Windows路径大小写不敏感,到了云服务器Linux静态资源 404,毕业答辩现场翻车。

  4. 部署流程不熟
    dist文件夹整个丢进Tomcatwebapps,结果刷新页面 404,老师一句“路由管理呢?”直接问懵。


2. 技术栈选型:为什么 Vue + Spring Boot 最适合毕设

时间紧、任务重,别给自己加戏。我对比过三套主流方案:

技术栈学习曲线生态成熟度毕设适配度
React + Express中高社区大需要配很多中间件,容易超纲
Vue + Express社区中轻量,但 Node 部署对新手陌生
Vue + Spring Boot生态全一键热部署、教材案例多,导师也熟

结论:Vue 单文件组件写法直观,Spring Boot 零配置开箱即用,俩都“中文文档友好”,最适合 3~4 个月周期的毕设。


3. 核心实现细节拆解

3.1 RESTful 接口规范

先写“契约”再写代码,我习惯用一张表把资源、动词、状态码一次性对齐:

资源动词路径返回码说明
用户POST/api/users201注册
用户GET/api/users/{id}200查询
登录POST/api/auth/login200 + JWT登录

把这张表丢进README.md,前后端就能并行开发,谁也别等谁。

3.2 Axios 封装:让请求“傻瓜化”

新建src/utils/request.js

import axios from 'axios' import { ElMessage } from 'element-plus' // 1. 创建实例 const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE, // 本地/生产环境一键切换 timeout: 5000 }) // 2. 请求拦截 Token service.interceptors.request.use(config => { const token = localStorage.getItem('token') if (token) config.headers.Authorization = `Bearer ${token}` return config }) // 3. 统一异常提示 service.interceptors.response.use( res => res.data, err => { ElMessage({ type: 'error', message: err.response?.data?.message || '服务异常' }) return Promise.reject(err) } ) export default service

页面里直接import request from '@/utils/request'即可,代码干净,错误提示统一。

3.3 CORS 配置:本地开发“零代理”也能跑通

很多教程让你配vue.config.js代理,其实后端一行代码就能解决:

@Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(true); } }; } }

前端无需代理,直接访问http://localhost:8080/api/**,联调速度翻倍。

3.4 JWT 无状态认证:毕业设计够用,还简单

登录成功后,后端下发JWT,前端存localStorage,之后每次请求带Authorization头即可。

后端工具类:

public class JwtUtil { private static final String KEY = "graduation_secret_2025"; private static final long EXPIRE = 86400000; // 1d public static String generate(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) .signWith(SignatureAlgorithm.HS256, KEY) .compact(); } public static String getUsername(String token) { return Jwts.parser().setSigningKey(KEY).parseClaimsJws(token).getBody().getSubject(); } }

过滤器里校验:

OncePerRequestFilter { protected void doFilterInternal(...) { String token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { String username = JwtUtil.getUsername(token.substring(7)); SecurityContextHolder.getContext().setAuthentication(...); } chain.doFilter(request, response); } }

4. 关键代码片段:Clean Code 示范

4.1 后端分页接口

@GetMapping("/api/articles") public PageVO<Article> list(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable p = PageRequest.of(page, size, Sort.by("id").descending()); Page<Article> data = articleRepo.findAll(p); return PageVO.of(data); // 统一封装总条数、列表 }

4.2 前端列表调用

// views/Article.vue import request from '@/utils/request' const loadArticles = async () => { const { content, totalElements } = await request.get('/api/articles', { params: { page: currentPage.value - 1, size: 10 } }) tableData.value = content total.value = totalElements }

5. 安全与性能:毕设也别留“后门”

  1. XSS 防护
    Vue 默认转义插值,千万别用v-html渲染用户输入;后端可用jsoup过滤富文本。

  2. Token 刷新
    简单策略:Token 过期前 30 分钟访问任意接口,后端在Response Header中带回新 Token,前端无痛替换。

  3. 本地开发性能
    Spring Bootspring.devtools.restart.enabled打开,改完代码 3 秒热重启;Vite本身秒级刷新,双端热更新体验飞起。


6. 生产环境避坑指南

6.1 构建 & 上传

npm run build

生成dist目录,仅 3~5 MB,丢到云服务器/var/www/html

6.2 Nginx 一刀流配置

server { listen 80; server_name yourdomain.com; root /var/www/html; # 1. 静态资源缓存 location ~* \.(js|css|png)$ { expires 1y; add_header Cache-Control "public, immutable"; } # 2. 前端路由刷新 404 问题 location / { try_files $uri $uri/ /index.html; } # 3. API 反向代理 location /api/ { proxy_pass http://localhost:8080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

6.3 HTTPS 免费证书

Certbot一行命令即可:

certbot --nginx -d yourdomain.com

证书 90 天自动续期,答辩时浏览器地址栏一把“小锁”,老师印象分 +10。


7. 一张图总结流程


8. 动手下一步:把“接口契约”写进你的 README

看到这里,别急着关网页。打开编辑器,新建API.md,把资源、路径、字段、状态码一次性写清楚,再@你的搭档。前后端并行,不加班也能准时提测。

等你把项目跑通,再回头思考:如果团队扩大到 5 人,如何设计接口版本演进?如何用OpenAPI自动生成文档?毕设只是起点,真正的工程化思维,就从“写契约”开始。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:35:00

Chatbot AI 集成入口实战:从架构设计到生产环境部署

1. 背景痛点&#xff1a;直接调 API 的“甜蜜陷阱” 很多团队第一次把 Chatbot AI 塞进业务系统时&#xff0c;图省事直接裸调厂商接口&#xff1a;前端→业务服务→大模型 API&#xff0c;一路同步阻塞。上线当天就发现&#xff1a; 接口耦合&#xff1a;厂商域名、鉴权方式…

作者头像 李华
网站建设 2026/4/28 6:24:48

颠覆性零门槛3D创作工具:vibe-draw让草图秒变立体世界

颠覆性零门槛3D创作工具&#xff1a;vibe-draw让草图秒变立体世界 【免费下载链接】vibe-draw &#x1f3a8; Turn your roughest sketches into stunning 3D worlds by vibe drawing 项目地址: https://gitcode.com/gh_mirrors/vi/vibe-draw vibe-draw是一款能够将用户…

作者头像 李华
网站建设 2026/5/1 4:33:41

CloudCompare点云处理新手必备:从入门到实战的完整指南

CloudCompare点云处理新手必备&#xff1a;从入门到实战的完整指南 【免费下载链接】CloudCompare CloudCompare main repository 项目地址: https://gitcode.com/gh_mirrors/cl/CloudCompare CloudCompare是一款功能强大的开源3D软件&#xff0c;专为点云数据处理设计。…

作者头像 李华
网站建设 2026/4/13 10:16:36

Midscene.js:企业级AI自动化测试框架的视觉驱动测试实践指南

Midscene.js&#xff1a;企业级AI自动化测试框架的视觉驱动测试实践指南 【免费下载链接】midscene Let AI be your browser operator. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js作为一款基于视觉驱动的AI自动化测试框架&#xff0c;通过…

作者头像 李华