
简介基于Java的学生成绩管理系统毕业设计面向高校计算机相关专业学生适用于课程设计、毕业设计或Java Web开发自学。该项目以学生、课程、成绩三类数据为核心完整实现了登录认证、成绩录入查询、统计分析和信息维护等常见功能。压缩包共9个文件包含4个mp4演示与部署视频、SQL数据库脚本、源代码压缩包、doc文档和txt说明整体约122.79MB覆盖从源码阅读、数据库初始化到环境部署的关键环节。已有663人学习下载案例认可度较高。资源内含可运行的完整源码、数据库脚本、部署文档及操作录屏视频分别演示了系统功能、项目代码结构、部署运行流程以及访问数据库乱码问题的排查方法有助于掌握MVC分层设计、JDBC数据库访问、Servlet与JSP交互等核心技术。该实践项目既能帮助巩固Java编程基础也能为独立完成类似管理系统设计与答辩汇报提供高价值参考。1. 学生成绩管理系统部署环境选错版本代码再对也白搭做毕业设计最磨人的往往不是写代码而是把别人写好的代码跑起来。这个基于 Java Servlet JSP JDBC MySQL 的学生成绩管理系统功能倒不算复杂MVC 分层、成绩录入、查询、统计都齐了但偏偏是这种典型的老技术栈项目最容易在环境上翻车。我帮 A 同学部署这套学生成绩管理系统时他电脑上装的是 JDK 17 和 Tomcat 10项目一启动就报UnsupportedClassVersionError换成 Tomcat 9 又遇到 Servlet 规范不兼容的问题折腾一晚上才反应过来是版本组合选错了。这篇笔记就按我实际部署的顺序把 JDK、Tomcat、MySQL 的版本选型score.sql 的导入StudentScore 项目的部署以及几个高频报错从头到尾写清楚给正准备搭建这套环境的同学做个参照。2. 环境准备JDK、Tomcat、MySQL 的版本匹配与安装2.1 JDK 1.8 与 Tomcat 8.5最稳的毕业设计组合这个项目是标准的 Java Web 老项目结构代码基于 Servlet 3.1 和 JSP 2.3 规范编译目标锁定在 JDK 1.8 时代。如果直接用 JDK 17 或更高版本来编译大概率会遇到两个问题一是源码里用到的一些旧 API 在高版本 JDK 中被移除编译直接失败二是即使侥幸编译通过class 文件版本号是 61放进 Tomcat 8.5 里运行会直接抛UnsupportedClassVersionError。所以我的结论很直接这套系统就用 JDK 1.8 配 Tomcat 8.5这是最稳妥的组合没有之一。安装 JDK 1.8 的步骤不复杂但有几个细节特别容易坑人。下载安装包后安装路径尽量不要放在C:\Program Files\Java这种带空格的目录下某些老脚本在解析Program Files的空格时处理得不好。我一般会先建一个C:\Java目录把 JDK 装进去然后配置环境变量JAVA_HOMEC:\Java\jdk1.8.0_202 PATH%JAVA_HOME%\bin;%PATH%JAVA_HOME务必指向 JDK 的安装根目录不是jre子目录也不是bin目录。Tomcat 的启动脚本依赖JAVA_HOME来定位javac和java一旦指错Tomcat 虽然能启动但 JSP 页面在首次访问编译时会失败。配置完在命令行执行java -version验证输出显示 1.8 开头就没问题。Tomcat 8.5 的选择同样有讲究。Tomcat 9 开始解析老项目web.xml时对 Servlet 规范的处理更严格虽然 8.5 和 9 都还在用javax.servlet包但有些老项目里的配置写法在 9 上会直接报错。Tomcat 是绿色版解压即用目录结构里bin存放启动脚本conf存放 server.xml 和 web.xmlwebapps是部署项目的目录。Windows 下启动bin\startup.batLinux 下执行bin\startup.sh。启动后访问http://localhost:8080/能看到 Tomcat 默认首页说明环境基本通了。如果 8080 端口被占编辑conf\server.xml找到Connector port8080 ... /改掉端口号即可。注意改端口后访问 URL 也要跟着变这个和 JDBC 连接里的 3306 是两回事别搞混。2.2 MySQL 5.7 安装与初始化字符集要提前设好数据库是这套系统的心脏score.sql 里包含了建库、建表、插入初始学生成绩数据的完整语句。MySQL 5.7 和 8.0 都能执行这个脚本但有一个很大的差异MySQL 8.0 的默认字符集是 utf8mb4而 5.7 的默认字符集是 latin1。如果安装 5.7 时没有手动指定字符集建出来的表默认是 latin1score.sql 里的中文学生姓名、课程名称导入后全会变成问号。所以我的习惯是把字符集配置放在装好 MySQL 之后的第一步。Windows 上装完 MySQL 5.7编辑C:\ProgramData\MySQL\MySQL Server 5.7\my.ini注意这个路径是 ProgramData不是 Program Files很多人在这里找了半天找不到配置文件[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_general_ci [client] default-character-setutf8mb4character-set-server控制服务端建库建表默认字符集collation-server指定排序规则[client]段的default-character-set保证命令行客户端发起的 SQL 语句也按 UTF-8 编码传输。改完保存在系统服务里重启 MySQL执行SHOW VARIABLES LIKE character_set%;看到character_set_server的值是 utf8mb4 就对了。如果装的是 MySQL 8.0配置项写法基本一样但要注意 8.0 默认的认证插件是caching_sha2_password。项目自带的 JDBC 驱动如果是 5.1.x 旧版本连接时大概率报Authentication plugin caching_sha2_password cannot be loaded。解决办法有两种要么换 8.0.x 版本的驱动要么在 MySQL 里执行下面这条语句把认证方式改回兼容模式ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码;MySQL 装完、字符集配好后用mysql -u root -p登录验证一下能进就说明服务正常。接下来把精力放到 score.sql 的导入上这才是真正考验耐心的环节。2.3 Eclipse 与 IntelliJ IDEA导入老项目的区别IDE 的选择直接影响导入效率。StudentScore 这个项目解压后是标准的 Eclipse Web 工程结构Eclipse 的 Import → Existing Projects into Workspace 可以直接识别.project文件几乎零配置导入。IntelliJ IDEA 也能导入但需要手动配置的项不少src目录要标记为 Sources RootWebContent要标记为 Web Resources Directory还要在 Project Structure 里添加 Tomcat 依赖库稍有不慎就会出现编译通过但部署后 404 的情况。我一般建议用 Eclipse 处理这种老项目。导入后检查项目构建路径确认 JRE System Library 指向 1.8mysql-connector-java的 jar 在WebContent/WEB-INF/lib目录下。如果缺 jar去网上下载对应版本放进这个目录然后右键项目 → Refresh 刷新Eclipse 会自动加载新加入的 jar。如果非要用 IntelliJ IDEA导入时选 File → New → Project from Existing Sources定位到解压目录在向导里选择 Eclipse 作为导入模板。项目导入后右键 Open Module Settings在 Project 标签页把 SDK 设为 1.8在 Modules 标签页把 WebContent 添加为 Web 资源目录。下一步在 Facets 里添加 Web facet配置web.xml路径指向WebContent/WEB-INF/web.xml这一步漏掉的话部署到 Tomcat 后访问任何 JSP 都是 404。3. 数据库导入score.sql 脚本的执行与连接配置3.1 创建数据库并导入 score.sqlscore.sql 是整套系统的数据基础包含学生表、课程表、成绩表的结构定义和初始化数据。导入前先确认 MySQL 服务已经启动然后打开命令行登录mysql -u root -p输入密码进入 MySQL 后先创建一个独立的数据库再切换到该库最后执行导入CREATE DATABASE IF NOT EXISTS student_score DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE student_score; SOURCE D:/score.sql;CREATE DATABASE里的IF NOT EXISTS是幂等保护重复执行不会报错。DEFAULT CHARACTER SET utf8mb4是防乱码的第一道闸门。SOURCE是 mysql 客户端的内置命令后面跟 SQL 文件的绝对路径Windows 下用正斜杠或双反斜杠都行避免使用单反斜杠因为反斜杠在 SQL 语句里会被当成转义符。导入完成后执行SHOW TABLES;查看库里的表再执行SELECT * FROM student;确认中文数据没有变成问号。如果表存在但没有数据回头看导入过程中有没有被忽略的报错。另外如果 score.sql 文件本身是 ANSI 编码保存的SOURCE导入时中文会乱码解决方法是先用文本编辑器把文件转成 UTF-8 编码再重新导入。如果习惯用 Navicat 之类的图形工具右键数据库 → Run SQL File 选中 score.sql 同样能导入但同样要确认文件编码是 UTF-8。3.2 JDBC 驱动与数据库连接参数Java 代码连 MySQL 靠的是 JDBC 驱动这个 jar 包必须放在WebContent/WEB-INF/lib目录下。很多同学在 IDEA 里通过 Library 引用了驱动编译没问题但部署到 Tomcat 后运行时报ClassNotFoundException: com.mysql.jdbc.Driver原因就是运行时只认 WEB-INF/lib 下的 jarIDE 的全局 Library 不会被打进部署目录。驱动版本的选择按 MySQL 版本走MySQL 5.7 用mysql-connector-java-5.1.49.jarMySQL 8.0 用 8.0.x 版本。5.1.x 连接 MySQL 8.0 会在握手阶段报错因为 8.0 默认的caching_sha2_password认证插件在旧驱动里不支持。如果项目里已经带了旧驱动又不想升级也可以用上一节的mysql_native_password方案把用户认证方式改回去。数据库连接参数集中在项目的工具类里通常叫DBUtil.java或DBConnection.java打开后核心配置是这三项private static final String URL jdbc:mysql://localhost:3306/student_score?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai; private static final String USER root; private static final String PASSWORD 123456;URL 里useUnicodetrue启用 Unicode 字符集characterEncodingUTF-8指定编码serverTimezoneAsia/Shanghai是 MySQL 8.0 及以上版本必带的参数不带会直接报时区错误。数据库名必须是 3.1 节里创建的那个密码要和本机 MySQL 实际密码完全一致。这里补充一句如果密码里带了或#这类特殊字符URL 解析会出错建议换成纯数字字母组合的密码图省心。3.3 数据库乱码排查导入和查询两个环节都要管乱码在这个系统里几乎是必现的而且形态多样有的是导入后SELECT出来中文变问号有的是页面显示乱码有的是录入中文后保存再读出来乱了。每个现象对应的环节不同不能指望改一处就全部解决。先排查导入环节执行SHOW VARIABLES LIKE character_set%;重点看character_set_database的值。如果不是 utf8mb4说明建库时没指定字符集。补救方法是执行ALTER DATABASE student_score CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;但要注意仅改数据库的字符集不会自动改表的字符集最干净的做法是DROP DATABASE后按 3.1 节重新建库导入。再排查查询环节检查 JDBC URL 里有没有characterEncodingUTF-8。没有的话Java 连接数据库时会按操作系统的默认区域编码走Windows 中文系统大概率是 GBK和数据库端 utf8mb4 对不上查出来就是乱码。在 URL 里补上参数后重启 Tomcat 再验证。最后是请求链路JSP 页面顶部确认有% page contentTypetext/html; charsetUTF-8 %Servlet 接收表单参数前执行request.setCharacterEncoding(UTF-8)。有些老项目在 web.xml 里配了 CharacterEncodingFilter有些没配得看项目实际情况。这三层全部对齐乱码问题才算是根治了。4. 项目部署StudentScore.zip 导入 IDE 并跑通 Tomcat4.1 导入 StudentScore.zip源码结构与依赖StudentScore.zip 解压后的目录结构是标准的 Web 工程src目录存放 Java 源码WebContent目录存放 JSP 页面和静态资源WebContent/WEB-INF下面有 web.xml 配置文件和 lib 依赖目录。用 Eclipse 导入时File → Import → Existing Projects into Workspace → Select archive file直接选中 StudentScore.zipEclipse 会自动解压并完成项目识别。导入完成后第一件事是检查构建路径。右键项目 → Properties → Java Build Path确认WebContent/WEB-INF/lib下的 mysql-connector jar 已经被加入依赖。再检查 JRE System Library 的版本如果指向的是 JDK 17改成 1.8。这一步不做的话编译期可能没异常运行时会出现各种奇怪错误。源码结构上这个项目按 MVC 模式组织model包放学生、课程、成绩的实体类dao包是数据访问对象servlet包处理 HTTP 请求和业务流转util包里放着数据库连接工具类。先把DBUtil.java找出来把数据库名、用户名、密码改成本机的实际配置这是部署到新环境必改的一项。资源包里的部署文档对这个部分有详细说明遇到不确定的地方打开文档对照一下文档里写了每个配置项对应的实际环境参数。4.2 配置 Tomcat 运行环境Eclipse 里跑 Web 项目需要先关联 Tomcat 运行时。操作路径Window → Preferences → Server → Runtime Environments → Add选择 Apache Tomcat v8.5Browse 指向 Tomcat 安装目录Finish。这一步的作用是告诉 Eclipse 编译项目时使用哪一份 Servlet API 和 JSP API。然后在 Servers 视图新建一个 Server右键 → New → Server选 Tomcat v8.5端口默认 8080。项目部署有两种方式一种是直接把项目拖到 Tomcat 实例上Eclipse 会自动发布另一种是右键项目 → Run As → Run on ServerEclipse 会启动 Tomcat 并自动打开浏览器。第二种方式对调试更友好我推荐用这个。部署成功后Tomcat 的 webapps 目录下会生成一个以项目名命名的文件夹。在 Eclipse 里右键项目 → Properties → Web Project Settings可以看到 Context Root 默认是StudentScore。浏览器访问地址就是http://localhost:8080/StudentScore/这个路径概念是 404 排查的关键。如果部署到 Linux 服务器操作思路一致只是把项目导出成 WAR 包丢到 webapps 下Tomcat 启动时自动解压。WAR 包导出方式Eclipse 右键项目 → Export → WAR fileIDEA 里是 Build → Build Artifacts。4.3 启动项目并验证核心功能Tomcat 跑起来后控制台输出Server startup in [xxx] ms说明部署成功浏览器输入http://localhost:8080/StudentScore/系统会跳转到登录页。这个登录页通常是login.jsp包含用户名和密码输入框。初始账号需要查数据库确认。登录 MySQL 执行SELECT * FROM user;看系统预置了哪些账号常见的是 admin / 123456但不同版本可能不一样查一下最稳妥。登录进去后页面会显示功能菜单比如成绩录入、成绩查询、成绩统计、学生管理等。先点进成绩查询页面看列表能不能正常加载。这一步能同时验证数据库连接和 SQL 查询逻辑。如果列表空白去 MySQL 里手动执行一遍对应的 SQL排除数据源问题。接着测一遍成绩录入录一条新数据保存再到数据库执行SELECT * FROM score WHERE student_idxxx;确认写入成功。保存时报 500 的话去 Tomcat 日志目录logs下找catalina.out或当天生成的localhost.日期.log异常堆栈会直接告诉你是哪个环节出的问题。5. 避坑指南从 404 到连接失败五个高频坑一次说清5.1 404 错误部署路径与访问 URL 对不上现象Tomcat 启动正常访问http://localhost:8080/能看到默认欢迎页但访问项目的登录页就 404。原因项目部署后挂在 context path 下不在根路径。Eclipse 部署时默认 context root 是项目名StudentScore如果手动复制项目到 webapps 时目录名改了或者 IDEA 里 context 设置不一致路径对不上自然 404。解决先看 Tomcat 的 webapps 目录下实际生成了哪个文件夹再访问http://localhost:8080/实际文件夹名/。Eclipse 部署的项目如果 context root 改了到 Properties → Web Project Settings 里同步修改。还有一种是 JSP 文件本身在 WebContent 下的子目录里比如WebContent/view/login.jsp那 URL 要对应成/项目名/view/login.jsp。5.2 数据库连接失败密码、端口、时区三连坑现象项目启动后访问需要查库的页面报 500Tomcat 日志里出现Cannot create PoolableConnectionFactory或Communications link failure。原因首先是用户名或密码和实际 MySQL 不一致这是最常见的情况。其次是端口不是默认 3306例如本机同时装了多个 MySQL 实例另一个实例占了 3306而项目的 JDBC URL 里写死localhost:3306实际上服务在 3307。最后是 MySQL 8 的时区问题URL 缺少serverTimezone参数。解决先在命令行用配置的账号密码登录一次登录失败就改密码。端口用netstat -ano | findstr 3306Windows或netstat -tlnp | grep 3306Linux确认。时区问题在 URL 补serverTimezoneAsia/Shanghai。最后确认驱动类能加载在初始化代码里加一句Class.forName(com.mysql.jdbc.Driver);测试报ClassNotFoundException就是 jar 没放对位置。5.3 中文乱码页面、请求、数据库三层不一致现象页面中文显示为问号或者英文正常中文乱码或者录进去再读出来是乱码。原因编码链路太长数据库字符集、JDBC URL 编码参数、JSP 页面编码、Servlet 请求编码任何一层不一致都会导致乱码。最常见的是数据库端 latin1 加 JDBC URL 缺参数。解决按三层顺序对齐。先执行ALTER DATABASE student_score CHARACTER SET utf8mb4;并重新导入数据再在 JDBC URL 里加characterEncodingUTF-8然后检查所有 JSP 页面的pageEncodingUTF-8最后确认 Servlet 在取参数前调用了request.setCharacterEncoding(UTF-8)。如果响应输出也乱加上response.setContentType(text/html;charsetUTF-8)。5.4 JDK 版本不兼容编译错误与 UnsupportedClassVersionError现象编译阶段报语法错误或者部署后 Tomcat 启动报UnsupportedClassVersionError错误信息里带一个 class 文件的版本号。原因IDE 用的编译 JDK 和 Tomcat 运行时用的 JDK 版本不一致。比如全局JAVA_HOME是 JDK 17IDE 默认用它编译生成的 class 文件版本号是 61而 Tomcat 8.5 的类加载器最多只能加载 52对应 JDK 8的版本。解决统一版本。IDEA 里 Project Structure → Project → SDK 设为 1.8Language Level 同步设为 1.8。Eclipse 里 Properties → Java Compiler → Compiler compliance level 选 1.8。同时把系统的JAVA_HOME也指到 JDK 1.8因为 Tomcat 的catalina.bat脚本是通过它决定用哪个 JVM 启动的。5.5 端口冲突8080 和 3306 被其他程序占用现象Tomcat 启动失败日志提示Port 8080 required by Tomcat v8.5 Server at localhost is already in useMySQL 服务启动失败提示 3306 端口被占用。原因本机有别的程序占用了端口。8080 可能被某个开发调试服务占用3306 可能被另一个数据库实例或后台程序占用。解决Tomcat 改conf\server.xml里的Connector port8080MySQL 改my.ini里的port3306。改完后重启服务并且把项目的 JDBC URL 里的端口同步改掉。如果 Tomcat 配了 80 端口起不来多半是系统里有服务占了 80直接换回 8080 最省心。搭配资源包里的部署视频看这一章视频里有一节专门演示了端口改动的完整过程跟着走一遍比自己试错快得多。6. 装完怎么验证从登录到成绩录入的全流程测试系统部署完不要登录进去看一眼就完事我一般会强制走一条完整的验证路径确保每个核心功能模块真的能跑。第一步验证数据库连接。登录系统后随便打开一个查询页面比如成绩列表页面能加载出数据说明 JDBC 通了。这一步能过滤掉一半以上的部署问题如果你看到的是白屏或者 500回头检查 5.2 节的内容。第二步验证数据写入。测试成绩录入功能录一条新成绩保存然后立刻去数据库验证在 MySQL 命令行执行SELECT * FROM score WHERE student_name测试;能查到刚录的记录说明 INSERT 语句和事务提交都没问题。如果保存提示成功但数据库查不到优先怀疑自动提交被关闭了看DBUtil.java里拿连接后有没有执行conn.setAutoCommit(true)。第三步验证统计功能。这个系统带了成绩统计的页面比如单科平均分、总分排名、及格率之类的展示点进去看数据有没有异常。这一步能暴露 SQL 聚合函数和 GROUP BY 写法的问题如果统计结果和手动算的不一致把 SQL 语句粘到 MySQL 命令行跑一遍对比结果。第四步做一次中文完整性测试。录入一个中文姓名和成绩刷新页面关闭浏览器重新打开确认中文显示没有乱码。如果这步通过说明字符集三层对齐配置真正生效了。最后记得重启一次 Tomcat再访问一遍首页确保不是靠某个缓存状态撑着的假成功。从那以后我每装完一个 Java Web 毕业设计项目都强制走一遍这条路查列表、录数据、看统计、验中文、重启再验一次。五步走完没问题这个环境才算真的能交给别人用了。希望帮到你。本文还有配套的精品资源点击获取