ARTICLE DETAIL

资讯详情

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

智慧校园系统毕设源码:环境配置至二次开发全指南

智慧校园系统毕设源码:环境配置至二次开发全指南 简介这是一套基于 Java 微信小程序 MySQL 的智慧校园管理系统毕业设计源码包适合高校计算机相关专业学生用于毕业设计或课程设计实践可覆盖用户认证、课程表查询、成绩查询、校园卡管理等校园常见业务场景。压缩包共 1759 个文件、约 41.01MB主要包含 Java 后端接口、Vue 小程序前端页面、WXML/WXSS 页面文件、JS 逻辑脚本、SQL 数据库脚本及项目说明文档并附带 PPT、图片与视频素材结构清晰便于二次开发。项目采用 JDK1.8、MySQL 5.7、Tomcat7 等经典技术栈从环境说明到部署运行均有配套资料可直接导入开发工具使用文档部分涵盖系统功能说明、数据库表结构设计、答辩 PPT 及小程序项目说明能帮助读者快速理解系统架构并完成演示。目前已有 115 人学习下载适合需要完整项目参考、学习前后端联调或准备答辩展示的学生与开发者。1. 智慧校园管理系统毕设源码拿到先别急着改把环境对齐再动手这套智慧校园管理系统说白了就是一套能直接导入 IDEA 或 Eclipse 跑起来的 Java Web 后端配上一个用 uni-app 开发的微信小程序前端外加一份 MySQL 5.7 的数据库脚本。它面向的不是生产环境而是毕业设计和课程设计——你需要在答辩现场完整演示登录、课程表查询、活动报名这些业务流还要能讲清楚表结构、接口和页面之间的关系。适合两类人一类是 Java 基础一般、需要一套能跑通也能讲懂的毕设项目的学生另一类是带实训或接私活的人拿它改一改就能当模板用。先说一个重要的结论拿到压缩包后第一件事不是看代码而是先把 JDK、MySQL、Tomcat、微信开发者工具这几样按版本对齐。版本不对后面每一步都是玄学报错。2. 环境配置JDK 1.8、MySQL 5.7 与开发者工具的版本对齐清单这套资源能不能在半天内跑起来九成取决于环境。项目里写得很明确开发语言 JavaJDK 1.8数据库 MySQL 5.7数据库工具 Navicat11Maven 3.3部署容器 Tomcat7小程序端用 HBuilderX 或微信开发者工具。这些版本不是随手挑的它们之间有一条隐形的兼容链。我见过太多人拿到源码先跑去装 MySQL 8.0结果 SQL 导入报错、驱动连不上折腾两天还没进到登录页。所以这一章就把版本选型逻辑和安装步骤一次说清。2.1 版本选型的现实逻辑为什么是 JDK 1.8 而不是 11JDK 1.8 是当前 Java Web 毕设项目里最稳妥的选择。它支持 lambda 和 Stream写起来不落伍同时和 Tomcat7、Maven3.3、SSM 框架Spring SpringMVC MyBatis这套资源按目录结构看就是标准的三层分层完全兼容。换到 JDK 11 或 17Tomcat7 会直接拒绝运行报 UnsupportedClassVersionError 或者 Servlet 版本不匹配。这不是代码问题是容器和编译器之间的版本契约。MySQL 5.7 也一样。它的默认认证插件是 mysql_native_password老版本的 mysql-connector-java 5.x 驱动可以直接连通。而 MySQL 8.0 把默认认证插件换成了 caching_sha2_password如果你拿 5.x 驱动去连 8.0会报 Unable to load authentication plugin 或 Public Key Retrieval is not allowed。数据库工具 Navicat11 对 MySQL 8.0 的支持也一般经常出现连接成功后看不到表结构的情况。所以从资源适配角度讲MySQL 5.7 是唯一不需要折腾的选择。组件推荐版本关键注意事项JDK1.8兼容 Tomcat7 与 SSM 框架lambda 可用MySQL5.7.x默认认证插件为 mysql_native_password兼容 Navicat11Maven3.3建议配置阿里云镜像加速依赖下载Tomcat7.xServlet 3.0对应 JSP 技术栈微信开发者工具最新稳定版导入项目时可选测试号 AppID2.2 MySQL 5.7 安装与数据库导入从压缩包到 Navicat 可见网上搜 mysql 安装配置教程一抓一大把但针对 5.7 版本且能配合毕业设计项目的安装过程核心就三步。第一步安装 MySQL 5.7 时把字符集选成 utf8mb4端口保持默认 3306root 密码设一个你记得住的比如 root123456后面连数据库和改配置都要用。第二步安装完成后打开 Navicat11新建连接填上主机 localhost、端口 3306、用户名 root、密码测试连接成功后再继续。第三步把压缩包里数据库文件用 Navicat 导入一般是右键数据库选择“运行 SQL 文件”定位到 .sql 文件后执行。如果你更习惯命令行也可以用 mysql 自带的 source 命令导入。先确认 MySQL 版本和连接状态再执行导入脚本mysql -uroot -p # 输入密码后进入 mysql 命令行先确认版本 SELECT VERSION(); # 创建数据库注意字符集必须和脚本一致 CREATE DATABASE IF NOT EXISTS smart_campus DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE smart_campus; SOURCE /path/to/your/sql_file.sql;这里的 SELECT VERSION() 是排查手段不是走过场。如果返回 8.0.x说明你机器上已经装了 MySQL 8.0那后面 SQL 导入基本会翻车。SOURCE 后面的路径在 Windows 下要写绝对路径而且别写在中文目录里否则控制台容易出现文件找不到的诡异错误。导入完成后重点检查表数量Navicat 里能看到用户表、课程表、活动表、考试表、成绩表这些核心表就说明导入成功。提示如果 SQL 文件导入过程中报错优先看是不是 COLLATE 或排序规则不兼容。5.7 用的 utf8mb4_general_ci而 8.0 导出文件常用 utf8mb4_0900_ai_ci把 8.0 的文件往 5.7 导基本都会挂在第一条建表语句上。2.3 用 HBuilderX 或微信开发者工具打开小程序前端小程序端的打开方式取决于压缩包里前端是源码还是构建后的产物。项目文件列表里出现了 app.7790a3ba.css、chunk-vendors.a72b0961.css 这类带 hash 的文件名这说明前端是已经跑过一次构建的 dist 产物不是 HBuilderX 里的源码工程。这种前提下最简单的做法是直接用微信开发者工具导入 dist 目录。打开微信开发者工具选择“导入项目”目录指向压缩包里解压出来的前端产物所在文件夹AppID 选“测试号”就行不需要自己注册小程序账号也能在模拟器里跑。如果压缩包里包含 project.config.json微信开发者工具会自动识别项目名和 AppID 配置。反过来如果你拿到的是 uni-app 源码目录里面有 src 文件夹和 manifest.json那就先用 HBuilderX 打开配置好微信开发者工具路径后点击“运行到小程序模拟器”HBuilderX 会帮你把代码编译到 dist 目录再唤起微信开发者工具加载。这两条路线对应的是 uniapp 微信小程序打包的两种常见状态源码未编译、或已编译待预览。判断方法很简单看根目录有没有 package.json 和 src 目录有就是源码只有 dist 和一堆 css 文件就是构建产物。大多数卖家打包的毕设资源给的是构建产物因为能直接预览省去装 node_modules 的麻烦。如果你需要改前端页面逻辑就得拿到源码否则每次改完都要手动改 dist 里的编译文件那体验非常痛苦。3. 项目跑通三个 bat 脚本拆解与小程序到后端接口联调环境对齐之后下一步是把项目跑起来。压缩包根目录有三个 Windows 批处理文件1-install.bat、2-run.bat、3-build.bat。从命名能看出作者的意图安装依赖、启动服务、构建前端。但在双击之前先搞清它们各自做了什么以及如果双击没反应背后是什么原因。3.1 三个 bat 脚本在做什么安装、运行、构建的边界这三个脚本是典型的 Windows 一键部署思路。1-install.bat 大概率做依赖安装后端走 Maven 就执行 mvn install前端是 uni-app 就执行 npm install。2-run.bat 负责启动后端服务可能是启动 Tomcat也可能用 Maven 插件直接跑。3-build.bat 做前端构建uni-app 项目通常用 npm run build:mp-weixin 生成小程序产物。常见写法大致是这样我一般会先打开脚本看一眼再执行避免直接双击跑出一堆乱码echo off REM 1-install.bat - 安装前端依赖 cd /d %~dp0 npm install if %errorlevel% neq 0 ( echo npm install failed, please check network pause exit /b 1 ) echo install success pause这段脚本里有两个值得说明的地方。cd /d %~dp0 是把当前目录切到脚本所在目录%~dp0 是批处理里的内置变量表示脚本所在的完整路径这样无论从哪个位置双击依赖都会装到正确目录。errorlevel 是上一条命令的返回值npm install 失败时它非 0脚本就会提示错误并退出。很多人的 1-install.bat 双击后一闪而过原因就是 npm 没装或者网络不通脚本又没做暂停处理。需要注意如果脚本里写的是 mvn install 而不是 npm install依赖装的则是后端 Java 包你需要先确认 Maven 已经配置了阿里云镜像否则第一次下载依赖可能要等半小时以上。改镜像在 Maven 安装目录的 conf/settings.xml 里把 mirror 节点指向 aliyun 仓库即可。这个操作属于常规优化不算改项目代码。3.2 后端启动与接口文档以登录接口为例看数据交互后端启动有两种方式。一种是开发期常用的用 IDEA 或 Eclipse 导入 Maven 项目配置好 Tomcat7 后直接 Debug 运行。另一种是命令行方式执行 mvn tomcat7:runMaven 插件会启动内嵌 Tomcat。注意这套资源用的是 Tomcat7如果你机器上装的是 Tomcat9web.xml 头和 Servlet API 版本都可能对不上项目启动会卡在加载 Spring 容器那一步。项目标题里有 LW 字样在毕设资源语境里通常指附带的一套说明文档其中会包含系统功能说明、数据库表结构设计、答辩 PPT 以及小程序项目说明。接口怎么调、初始账号是多少优先翻这份文档别猜。后端启动成功后Tomcat 默认端口是 8080访问 http://localhost:8080/ 能看到项目首页或接口返回的 JSON说明后端 Z 已经起来了。小程序端的请求路径和接口对应关系以登录为例页面里收集用户名和密码通过 wx.request 发给后端wx.request({ url: http://localhost:8080/api/login, method: POST, header: { Content-Type: application/json }, data: { username: admin, password: 123456 }, success(res) { if (res.data.code 200) { wx.setStorageSync(token, res.data.data.token); wx.setStorageSync(userInfo, res.data.data.userInfo); wx.switchTab({ url: /pages/index/index }); } else { wx.showToast({ title: res.data.message, icon: none }); } }, fail(err) { console.error(login request failed, err); } });这段代码里的 url 是后端接口地址开发阶段用 localhost真机预览时必须改成电脑的局域网 IP比如 http://192.168.1.100:8080/api/login否则手机访问不到电脑上的服务。res.data 是后端返回的 JSON约定格式为 code、message、data 三段式前端通过 code 是否为 200 判断业务成功还是失败。wx.setStorageSync 把 token 存到本地缓存后续课程表、活动列表这些需要身份验证的接口都会在请求头里带这个 token。header 里的 Content-Type 要和后端 RequestBody 的解析方式匹配大多数 SSM 项目的登录接口接收 JSON 字符串如果不传这个头后端可能取不到参数。3.3 第一个业务验证点账号登录后课程表数据从哪来登录成功后第一件事是验证课程表查询。这是整个系统里数据链路最清晰的模块能跑通它说明数据库连接、后端接口、小程序请求三层都没问题。后端处理课程表请求的 Controller 大致是这样Controller RequestMapping(/api/course) public class CourseController { Autowired private CourseService courseService; RequestMapping(value /list, method RequestMethod.GET) ResponseBody public MapString, Object list(RequestParam(studentId) Integer studentId, RequestParam(value week, required false) Integer week) { MapString, Object result new HashMap(); ListCourse courses courseService.getCoursesByStudentId(studentId, week); result.put(code, 200); result.put(data, courses); result.put(message, success); return result; } }RequestParam 是从 URL 查询参数里取值studentId 必传week 可选。前端调用时 URL 就是 /api/course/list?studentId1week3。ResponseBody 负责把返回的 Map 自动转成 JSON 写到响应体里这就是小程序 res.data 能直接拿到对象的原因。课程表数据最终从 MySQL 的课程安排表里查出来通过 MyBatis 的 Mapper 映射成 Course 对象。如果接口返回 500 或者查不到数据优先看控制台有没有 SQL 异常尤其要注意表名和字段名是否和实体类对应上。这一步走通说明整条链路已经通了。提示登录请求和课程表查询的请求地址、参数名以压缩包里的说明文档或源码为准不同版本的项目可能把课程表接口命名为 course/list、schedule/list 或 courseTable/list但结构大同小异。4. 二次开发从课程表模块入手加一个带分页的校园活动模块跑通只是第一步。答辩时老师大概率会问一个问题“这个系统哪里是你自己改的”如果回答不上来源码是买的还是自己写的就很明显了。所以二次开发这一章从课程表模块出发讲新增一个校园活动模块的完整套路建表、写接口、出页面、加分页。这套流程走完你至少能底气十足地说我加了一个模块。4.1 从数据表到页面看懂一张课表的完整链路在动手加模块之前先看现有的表结构。用 Navicat 打开课程相关表核心字段一般是主键 id、课程名称、任课教师、上课时间、上课地点、星期几、关联的班级 id。以一张典型的课程安排表为例CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, course_name VARCHAR(50) NOT NULL COMMENT 课程名称, teacher_name VARCHAR(20) COMMENT 任课教师, class_time VARCHAR(30) COMMENT 上课时间如 08:00-09:40, class_room VARCHAR(50) COMMENT 上课地点, week_day TINYINT COMMENT 星期几1-7, class_id INT COMMENT 关联班级表 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这条 SQL 的字段命名和注释习惯是毕设项目里最常见的。week_day 用 TINYINT 而不是字符串是为了前端排序方便class_id 关联班级表而不是直接存班级名称这是为了符合第三范式。理解这条链路的关键在于看清数据流向页面发起请求 → Controller 接收参数 → Service 做业务处理 → Mapper 执行 SQL → MySQL 返回结果集 → 转成 JSON → 小程序渲染。任何一层断掉页面就显示不出课程表。排查时从前端 Network 面板看请求是否发出、响应状态码是什么再往后端控制台看 SQL 日志这是最快的定位方式。4.2 新增一个校园活动模块建表、写接口、出页面课程表链路清楚了新增模块就有章可循。校园活动模块需要的数据是活动标题、活动内容、举办地点、开始时间和结束时间、发布人、状态。建表 SQL 如下CREATE TABLE activity ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL COMMENT 活动标题, content TEXT COMMENT 活动内容, location VARCHAR(100) COMMENT 举办地点, start_time DATETIME COMMENT 开始时间, end_time DATETIME COMMENT 结束时间, publisher_id INT COMMENT 发布人id, status TINYINT DEFAULT 1 COMMENT 状态1进行中0已结束 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;status 字段的默认值设成 1业务上默认展示进行中的活动。start_time 和 end_time 用 DATETIME 而不是 TIMESTAMP是因为 DATETIME 的范围更大不会出现 2038 年问题对毕设答辩来说这是个可以主动说出来的设计细节。后端接口沿用课程表模块的写法新增一个 ActivityControllerRequestMapping(/api/activity/list) ResponseBody public MapString, Object list(RequestParam(value pageNum, defaultValue 1) Integer pageNum, RequestParam(value pageSize, defaultValue 10) Integer pageSize) { MapString, Object result new HashMap(); PageInfoActivity page activityService.getActivityPage(pageNum, pageSize); result.put(code, 200); result.put(data, page); result.put(message, success); return result; }pageNum 和 pageSize 是分页接口的两个标准参数defaultValue 保证了前端不传参时后端不会报错。PageInfo 是 PageHelper 插件的分页返回对象里面包含 list、total、pageNum、pageSize、pages 这些字段。前端拿到 total 后就能算出总页数用于判断是否还有下一页数据。这里需要注意PageHelper 的使用有坑它必须在紧跟着的 Mapper 查询前调用 startPage中间不能穿插其他查询语句否则分页会失效。前端页面新增一个活动列表页调用接口拿到数据后渲染核心逻辑和小程序列表加载更多这套机制高度绑定。活动的发布权限要在后端做校验最简单的方式是拦截器判断登录用户的角色管理员才能调 add 接口普通学生只读。4.3 列表加载更多分页参数设计与触底加载实现小程序页面列表加载更多是热搜里出现频率很高的问题也是答辩时容易被追问的点。很多新手做的列表是一次性把全表数据拉出来数据量小的时候没问题但一旦活动数据超过几十条加载速度和内存就都扛不住了。正确的做法是分页加载后端返回第一页数据用户滑到底部时自动加载下一页。小程序端的触底加载用 onReachBottom 生命周期函数配合 loading 标志防止重复请求Page({ data: { activityList: [], pageNum: 1, pageSize: 10, total: 0, isLoading: false, isFinished: false }, onLoad() { this.fetchActivityList(); }, onReachBottom() { if (this.data.isLoading || this.data.isFinished) return; this.fetchActivityList(); }, fetchActivityList() { const { pageNum, pageSize, activityList } this.data; this.setData({ isLoading: true }); wx.request({ url: http://localhost:8080/api/activity/list, data: { pageNum, pageSize }, success: (res) { const { list, total } res.data.data; this.setData({ activityList: activityList.concat(list), total, pageNum: pageNum 1, isLoading: false, isFinished: activityList.length list.length total }); }, fail: () { this.setData({ isLoading: false }); } }); } });关键逻辑有三处。第一isLoading 在请求发出时置为 true请求结束或失败时置为 false避免用户连续滑底触发多个重复请求——这是最常见的翻车点。第二isFinished 判断条件用已加载数量累加后是否大于等于 total等于时说明数据已经全部加载完后续触底直接 return。第三用 concat 拼接新数据而不是直接赋值这样不会丢已有列表数据。pageNum 在每次成功请求后自增 1下次触底加载的就是下一页。这套分页思路在微信小程序、uni-app、H5 里通用换汤不换药。5. 常见问题避坑数据库、打包与真机预览的 5 个典型翻车点这套资源我前后帮人部署过几次踩坑记录攒了一堆。这一章挑 5 个最常见的每个都是现象、原因、解决三个步骤按这个顺序排查能省下大半天时间。5.1 MySQL 相关的两个坑驱动连接与排序规则不兼容坑一Navicat 或代码连不上 MySQL报 Public Key Retrieval is not allowed。现象数据库工具连接时直接弹错或者后端启动后第一次查数据库就抛 Communications link failure。原因八成是机器上装的是 MySQL 8.0而项目里引用的 mysql-connector-java 是 5.x 老版本。8.0 默认的 caching_sha2_password 认证插件在非 SSL 连接下需要先走一次公钥检索老驱动不认这个流程。解决要么把数据库换成 5.7要么在连接 URL 上加 allowPublicKeyRetrievaltrue 和 useSSLfalse。如果不想动代码直接改数据库用户的认证插件更省事ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY root123456; FLUSH PRIVILEGES;坑二导入 SQL 文件时报 Unknown collation: utf8mb4_0900_ai_ci。现象导入到一半就中断Navicat 提示未知的排序规则。原因utf8mb4_0900_ai_ci 是 MySQL 8.0 才有的排序规则5.7 不认识。解决用任意文本编辑器打开 SQL 文件把 utf8mb4_0900_ai_ci 全局替换成 utf8mb4_general_ci。Windows 上可以用 Notepad 的批量替换保存后再导入。这一步不做SQL 文件在 5.7 上永远导不进去。5.2 微信开发者工具里的两个坑顶部导航栏高度与域名白名单坑三真机预览时请求一直失败控制台提示 url not in domain list。现象模拟器里一切正常一扫码手机访问就报“不在以下 request 合法域名列表中”。原因小程序真机环境强制校验 request 域名必须是 HTTPS 且在后台配置过白名单。本地调试时后端是 http://192.168.x.x 的纯局域网地址不可能过白名单。解决微信开发者工具右上角“详情”-“本地设置”勾选“不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书”。这个开关只对开发调试有效上线前必须换成正式 HTTPS 域名。坑四自定义顶部导航栏在不同机型上错位胶囊按钮挡住标题。现象iPhone 上正常换到安卓机器标题就顶到状态栏里去了。原因微信小程序页面顶部导航栏的高度是状态栏高度 胶囊按钮高度。状态栏高度用 wx.getSystemInfoSync().statusBarHeight 获取不同机型数值差异很大如果你在样式里写死了一个像素值肯定是会错位的。解决封装一个导航栏高度的计算函数function getNavigationBarHeight() { const systemInfo wx.getSystemInfoSync(); const menuButtonInfo wx.getMenuButtonBoundingClientRect(); const statusBarHeight systemInfo.statusBarHeight; const navBarHeight (menuButtonInfo.top - statusBarHeight) * 2 menuButtonInfo.height; return { statusBarHeight, navBarHeight }; }wx.getMenuButtonBoundingClientRect() 获取胶囊按钮的位置和尺寸navBarHeight 的公式是业内通用的 iOS 与安卓适配方案。拿到之后动态设置导航栏样式就不用再为每个机型单独调像素了。5.3 Tomcat 与端口的坑8080 被占用导致后端起不来坑五Tomcat 启动失败控制台报 Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use。现象双击启动脚本后窗口一闪而过或者 IDEA 控制台里明确提示端口被占用。原因本机已经有其他进程占住了 Tomcat 的三个端口最常见的是 8080 被别的服务占了。解决先找到占用进程并干掉或者直接改 Tomcat 的端口配置# Windows 查看 8080 端口被哪个 PID 占用 netstat -ano | findstr :8080 # 杀掉对应进程假设 PID 是 12345 taskkill /PID 12345 /F打开 Tomcat 安装目录的 conf/server.xml把 Connector 节点的 port 改成 8081 也可以但改完之后前端小程序里所有请求地址都要同步改否则会白白踩一个接口 404 的坑。我自己的习惯是不改端口直接杀进程省得后面联调时地址还要来回换。6. 验证与答辩准备真机走查、抓包定位与材料提炼的落地技巧项目能跑通、二次开发的模块也加进去了接下来就是答辩前的验证和材料准备。这一章讲三个技巧真机预览怎么走查、抓包工具怎么定位问题、答辩材料从哪里提炼。6.1 真机预览按业务链路走一遍核心模块别只在模拟器里演示答辩现场老师可能会要求用手机扫你的预览码。真机预览前先把后端地址从 localhost 改成电脑的局域网 IP这一步是最大的坑忘了改的话手机端所有请求都会失败。走查时按业务链路过一遍用一张清单记录结果模块验证操作预期结果用户身份认证管理员账号登录登录成功跳转首页缓存 token课程表查询按学生查看本周课表课表正确渲染星期与课程对应校园活动活动列表触底加载第一页 10 条滑底加载下一页在线考试提交一份答卷提交成功成绩写入数据库成绩查询查看历史成绩成绩列表按学期分组展示校园卡管理查看余额和消费记录数据与数据库一致扫码预览时手机必须和电脑在同一局域网如果请求超时先 ping 一下电脑 IP再检查 Windows 防火墙是否放行了 8080 端口。这两个问题占了局域网联调失败原因的九成。6.2 答辩材料从哪里来PPT、数据库设计说明与系统功能清单答辩材料不是凭空写的都藏在项目本身里。LW 文档里一般已经有系统功能介绍、数据库表结构设计、答辩 PPT 和小程序项目说明但别直接照搬我一般会从源码里再提炼三个东西一是核心表结构设计说明把每张表的字段含义、关联关系画成表格二是接口列表把 Controller 里的 RequestMapping 整理出来标注请求方式和参数三是把你二次开发的那个模块单独拎出来写成一页特色介绍。这三块正好对应评委常问的“系统怎么设计的”“接口怎么写的”“你做了什么”。6.3 一个查漏技巧用抓包工具看小程序真实请求如果答辩前发现某个接口返回的数据不对最有效的定位方式不是打断点而是抓包看真实请求。微信开发者工具自带的 Network 面板已经够用能看到每个 wx.request 的请求头、参数、响应体和耗时。遇到请求一直在 pending基本就是后端没启动或路径不对遇到 500去后端控制台看异常堆栈遇到 404检查接口路径和 Tomcat 部署名是否匹配。进阶手段是 Charles 这类抓包工具可以先看小程序请求是否真的发到了后端再对比请求参数和接口文档的差异。这个方法最快定位出是前端参数传错、还是后端逻辑有 bug。从那以后我每次给别人部署毕设项目都会强制先走一遍版本对齐、再启动后端、最后真机联调这条流程顺序不乱问题就少大半。希望帮到你。本文还有配套的精品资源点击获取
返回列表