
简介这是一套基于JSPServletMySQL的学生信息管理系统Java Web项目源码面向正在学习Java Web开发的学生或初级开发者可用于课程设计、毕业设计或入门练手。压缩包共30个文件约2.15MB主要包含15个JSP页面、JDBC驱动JAR包、Java后端类、XML及Eclipse工程配置文件和CSS样式等目录采用src/main分层结构并带有项目配置信息导入开发环境即可查看运行逻辑。系统实现了对学生信息的增、删、改、查等基础功能覆盖了表单提交、数据库连接、结果集处理等典型Web开发环节有助于理解JSP与MySQL配合开发的完整流程也适合在此基础上扩展登录验证、分页查询等进阶功能。目前已有4342人学习下载可作为课设参考或自学资料代码结构简洁便于对照博客中的说明进行逐步调试与复用。1. javaWeb学生信息管理系统一个能跑通的增删改查完整案例做 JavaWeb 课设或者刚学完 JSP 的老哥大概率都经历过这种尴尬书上的例子太碎网上找的“完整项目”一导入全是红叉配环境配两小时还没见到登录页长什么样。手上这份学生信息管理系统StudentManageSystem_Web是典型的 JSP Servlet MySQL 三层结构数据库用 MySQL驱动给的是 5.1.48功能就是学生信息的增删改查。别看它功能基础胜在结构完整——从 Eclipse 工程文件到 .classpath 依赖配置、再到 lib 下的 JDBC 驱动全都有导入 IDE 改一下数据库账号密码就能跑。这套资源适合两类人一是还在学校做课程设计、需要交一个能演示的 JavaWeb 项目的二是想搞清楚 JSP 项目在 IDEA 或 Eclipse 里到底怎么部署、WEB-INF 下面那些配置各自干嘛的初学者。项目里没有框架没有 Maven就是最原始的 Servlet JSP JDBC反而能让你把 JavaWeb 的请求流转和数据库交互看得很透。下面从环境到代码、再到部署和排错一条线给你捋清楚。2. 环境与导入先把 JDK、Tomcat、IDEA 的关系理顺2.1 技术栈和版本选择的底层逻辑这个项目是 Eclipse 时代的标准 JavaWeb 工程目录结构是.project.classpathsrc/mainWebContent那套。src/main是 Java 源码目录WebContent是 Web 根目录WEB-INF/lib下只放了一个mysql-connector-java-5.1.48-bin.jar。这里有两个关键信息第一JDBC 驱动是 5.1.48对应 MySQL 5.x 系列如果你本机装的是 MySQL 8.0连接串和驱动类名虽然不用换但时区参数得处理好否则会报Server returns invalid timezone第二项目没有用 Maven意味着依赖全靠手动放到 lib 目录里所以换 IDE 导入时lib目录必须被标记为 Library否则编译直接找不到 DriverManager。JavaWeb 项目的运行环境本质上是三件套JDK 负责编译Tomcat 负责运行 Servlet 和 JSPMySQL 负责存数据。JDK 版本建议用 8 或者 11因为项目的代码是老的写法JDK 8 最稳。Tomcat 用 8.5 或者 9.0 都行前提是 JDK 版本匹配——Tomcat 9 配 JDK 8 没问题但 Tomcat 10 就别碰了它把javax.servlet全换成了jakarta.servlet这个项目的import javax.servlet.*在 Tomcat 10 下直接编译不过。2.2 在 IDEA 里导入 Eclipse 工程的具体操作IDEA 导入 Eclipse 工程和导入 Maven 工程不一样走的是File - New - Project from Existing Sources这条路然后选 Eclipse 那项。导入之后第一件事是打开Project Structure快捷键CtrlAltShiftS把三块配好Project SDK 选你本机的 JDK 8Language Level 选 8Modules 里如果没显示源码目录手动把src/main标记为 Sources把WebContent标记为 Web 资源目录。第二步是添加 Tomcat。正常做法是Run - Edit Configurations - 加号 - Tomcat Server - Local然后在 Server 选项卡里把 Tomcat 安装路径指过去Deployment 选项卡里把当前项目以war exploded的方式部署。这里有个坑IDEA 的 Tomcat 配置界面如果 Application server 那里没有 Tomcat 选项说明你没装 Tomcat 或者 IDEA 版本是社区版社区版不带 Tomcat 集成只能手动把 WAR 包丢进 Tomcat 的webapps目录。这一步你跑通之后才会明白所谓“运行 JavaWeb 项目”其实就是 Tomcat 加载了你的 Web 应用然后把 HTTP 请求交给 Servlet 处理。第三步是配置 MySQL。项目里大概率有一个db.properties或者直接在 DAO 里写死了连接串你要把它改成自己本机的库名、用户名、密码。如果项目里没有建表 SQL你自己连上 MySQL 执行一下——学生表核心字段就是学号、姓名、性别、年龄、班级、专业这几样。下面是一个标准的 JDBC 连接池写法// 以 db.properties 方式读取数据库配置 String url jdbc:mysql://localhost:3306/student?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai; String user root; String password yourpassword; Class.forName(com.mysql.jdbc.Driver); Connection conn DriverManager.getConnection(url, user, password);参数说明student是数据库名useUnicodetruecharacterEncodingutf8解决中文乱码serverTimezoneAsia/Shanghai是 MySQL 8.x 必加的参数MySQL 5.x 不加也没事。Class.forName(com.mysql.jdbc.Driver)这行在 JDBC 4.0 之后可以省略但老项目里都有建议保留兼容性最好。连接串里的时区参数在 MySQL 5.1.48 驱动下不需要但在 MySQL 8.0 的服务器上必须加这是最常见的一个环境问题。3. 项目结构拆解src、WebContent、.classpath 里到底藏了什么3.1 从 Eclipse 工程文件反推项目全貌.project文件是 Eclipse 的工程描述文件里面记录了项目名称和构建器。.classpath文件才是关键它定义了项目的 Java 构建路径——哪些目录是源码目录哪些 jar 在 classpath 里。用 IDEA 导入时IDEA 就是读这个文件来还原依赖的。如果你发现导入后很多类报红大概率是.classpath里指向的 jar 路径和你本机不一致比如它可能引用了 Tomcat 的servlet-api.jar而你没在 IDEA 里关联 Tomcat 库。典型的.classpath内容长这样?xml version1.0 encodingUTF-8? classpath classpathentry kindsrc pathsrc/main/ classpathentry kindcon pathorg.eclipse.jdt.launching.JRE_CONTAINER/ classpathentry kindcon pathorg.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtime.target/ classpathentry kindlib pathWebContent/WEB-INF/lib/mysql-connector-java-5.1.48-bin.jar/ classpathentry kindoutput pathbuild/classes/ /classpath这段 XML 里有几个关键标签kindsrc告诉编译器源码在哪kindlib告诉编译器依赖的 jar 在哪kindcon是 Eclipse 的容器类路径这里引用了 Tomcat 运行时所以在 Eclipse 里它不报错但换到 IDEA 里这种con类型的路径不会自动关联必须手动加 Tomcat Library。输出目录是build/classes如果你在运行后发现ClassNotFoundException但代码本身没毛病检查一下编译输出目录对不对IDEA 默认输出到target/classes不一致就会出问题。build目录里是编译后的字节码和资源文件一般不会提交到压缩包里但这份压缩包里有说明作者连编译产物一起打了包。这个目录可以不用管让 IDE 重新编译即可。3.2 WEB-INF 目录和 JSP 页面的组织方式这个项目的 Web 根目录下应该能看到index.jsp、login.jsp之类的页面而WEB-INF里放着web.xml和lib目录可能还有jsp子目录放内部页面。web.xml是部署描述符老项目的 Servlet 映射、欢迎页面都在这里写。看web.xml是快速理解这个项目请求路由的方式——哪个 URL 对应哪个 Servlet过滤器怎么配的全都在这一个文件里。WebContent |-- index.jsp // 入口页通常带登录或跳转 |-- WEB-INF | |-- web.xml // Servlet 映射、欢迎页、过滤器 | |-- lib | | -- mysql-connector-java-5.1.48-bin.jar | -- jsp // 受保护的页面直接访问 URL 进不去 -- static // CSS、JS、图片如果有这里有一个 JavaWeb 的经典知识点WEB-INF目录下的 JSP 文件不能通过浏览器直接输入 URL 访问必须通过 Servlet 内部转发RequestDispatcher.forward来渲染。这样做的好处是页面受登录过滤器保护坏处是新手如果直接把 JSP 丢进WEB-INF发现访问不到就开始怀疑人生。所以你看项目里如果登录页叫login.jsp且放在WebContent根目录下说明它能被直接访问而WEB-INF/jsp下的页面肯定有对应的 Servlet 在做转发。3.3 DAO 层的 JDBC 操作套路老项目没有 MyBatis没有 HibernateDAO 层就是纯 JDBC。套路非常固定加载驱动、获取连接、写 SQL、预编译、执行、遍历结果集、关闭资源。看几个典型的 DAO 方法你就能举一反三。比如查询所有学生信息的代码写出来大概是这样public ListStudent findAll() { ListStudent list new ArrayList(); Connection conn null; PreparedStatement ps null; ResultSet rs null; try { conn DBUtil.getConnection(); String sql SELECT id, student_no, name, gender, age, class_name FROM student; ps conn.prepareStatement(sql); rs ps.executeQuery(); while (rs.next()) { Student stu new Student(); stu.setId(rs.getInt(id)); stu.setStudentNo(rs.getString(student_no)); stu.setName(rs.getString(name)); stu.setGender(rs.getString(gender)); stu.setAge(rs.getInt(age)); stu.setClassName(rs.getString(class_name)); list.add(stu); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(rs, ps, conn); } return list; }这段代码的逻辑很简单PreparedStatement预编译 SQL 防止 SQL 注入executeQuery()返回结果集while(rs.next())逐行取数据封装成Student对象。注意finally里关闭资源的写法顺序是先 ResultSet 再 PreparedStatement 最后 Connection这套模板在老项目里是标配。改动的时候只需要换 SQL 语句和字段映射其他骨架不用变。DBUtil这个工具类一般就是封装了getConnection()和close()两个静态方法里面读配置文件拿到 URL、用户名和密码。4. 部署运行从 IDEA 到 Tomcat 浏览器的完整链路4.1 配置 Tomcat 运行实例IDEA 里跑 JavaWeb 项目本质上是把项目打包成 WAR 或者直接以 exploded 目录方式发布到 Tomcat 的webapps下。注意war exploded和war的区别前者是解压后的目录IDEA 直接把编译输出和 Web 资源映射过去修改 Java 代码后热部署快后者是打成一个包每次改动都要重新打包。平时开发用 exploded交作业或者部署到服务器再用 war 包。我就是因为这个踩过坑——项目里写过很多次了直接在 IDEA 里选war exploded就能跑。配置步骤说一遍Run - Edit Configurations - 左上角加号 - Tomcat Server - LocalServer 选项卡里 Name 随便填Application server 下拉框点Configure...选 Tomcat 安装目录Deployment 选项卡点加号选 Artifact选StudentManageSystem_Web:war explodedApplication context 填/或者/student这个决定了浏览器访问路径。配好后点运行IDEA 会启动 Tomcat 并自动部署。如果启动后浏览器 404先看日志大多数是端口占用或者 Artifact 没选对。还有一点值得注意Tomcat 的server.xml里默认 8080 端口如果你本机开了多个 Tomcat 实例改端口要改三处Connector port8080的 HTTP 端口、Server port8005的关闭端口、Connector port8009的 AJP 端口。只改 8080 而不管其他两个会有概率起冲突因为 8005 和 8009 也会被别的实例占用。4.2 数据库初始化与验证项目跑起来之前数据库必须建好不然连上就开始报Unknown database。假设项目里没有自带 SQL 脚本那你需要手动建库建表。我一般是这样处理的打开 MySQL 命令行或者 Navicat执行以下 SQLCREATE DATABASE IF NOT EXISTS student DEFAULT CHARSET utf8mb4; USE student; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, student_no VARCHAR(20) NOT NULL UNIQUE COMMENT 学号, name VARCHAR(50) NOT NULL COMMENT 姓名, gender VARCHAR(4) COMMENT 性别, age INT COMMENT 年龄, class_name VARCHAR(50) COMMENT 班级, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;说明一下student_no加了唯一约束这样重复学号插入的时候数据库会直接报错而不是出现脏数据create_time字段是锦上添花如果项目里没用到也不影响。字符集用utf8mb4比老项目的utf8更保险因为utf8mb4才完整支持中文和表情符号。如果你用的是 MySQL 5.5 或更早版本utf8mb4可能不支持那就退回utf8。验证数据库没问题把DBUtil里的用户名和密码改对启动 Tomcat浏览器访问http://localhost:8080/或者http://localhost:8080/student。看到页面能加载、增删改查能操作就算完全跑通了。4.3 排错从 Tomcat 日志定位问题的通用流程运行 JavaWeb 项目最怕的是黑匣子——代码报错不知道去哪看。Tomcat 的日志在安装目录的logs文件夹下catalina.out或localhost.log里能找到异常堆栈。IDEA 的 Console 窗口也会实时打印输出报错信息一般长这样java.sql.SQLException: Access denied for user rootlocalhost (using password: YES)看到这种就知道是账号密码错了Communications link failure说明数据库端口不通或者没启动ClassNotFoundException: com.mysql.jdbc.Driver说明 jar 没加载进 lib。给新手一个排错顺序先看 Tomcat 能不能启动日志里没有SEVERE级的异常再看数据库连接串和账号密码接着看表名和字段名是否和 DAO 里的 SQL 对得上最后看 JSP 页面里的EL表达式的属性名和 JavaBean 的属性名是否完全一致。这套顺序按概率从大到小排除绝大多数问题都能解决。5. 避坑与常见问题五个必踩的经典坑5.1 页面中文乱码现象JSP 页面上的中文显示正常但从数据库读出来全是问号或者插入的中文变成???。原因三层编码不一致。数据库表字符集是latin1JSP 页面没有声明页面编码Servlet 响应没有设置text/html; charsetUTF-8。这三个环节只要有一处不对中文就花。解决统一走 UTF-8。数据库表建表时明确DEFAULT CHARSETutf8mb4JSP 顶部加上% page contentTypetext/html;charsetUTF-8 languagejava %JDBC 连接串加useUnicodetruecharacterEncodingutf8表单提交如果是 POST在 Servlet 里调request.setCharacterEncoding(UTF-8)再取值。5.2 Tomcat 端口被占用现象启动 Tomcat 时日志报Port 8080 required by Tomcat v9.0 Server at localhost is already in use然后启动失败。原因之前的 Tomcat 实例没关或者有其他程序占用了 8080 端口。解决cmd里执行netstat -ano | findstr 8080拿到 PID 后在任务管理器结束进程或者直接改 Tomcat 配置文件把端口换成 8081、8082。改完记得三个端口一起改只改 HTTP 端口会导致 AJP 端口冲突。5.3Java 文件改动后不生效现象改了 Java 代码重新运行浏览器里的功能还是老的甚至页面还是报原来的错误。原因IDEA 的 Tomcat 集成默认是热部署但某些情况下 Artifact 更新失败或者编译输出目录不是 IDEA 默认值改的代码根本没进到部署目录。解决Build - Rebuild Project强制全量编译然后在 Deployment 选项卡里把 Artifact 的 Output directory 和编译输出路径比对一下确保一致。还有一个土办法把 Tomcat 停掉重新 Run重启后一定加载新代码。5.4 导入 IDEA 后 Servlet 相关类全部报红现象import javax.servlet.http.HttpServlet这行下面画红线提示包不存在。原因项目没有关联 Tomcat 的 Servlet API.classpath里的con容器路径 IDEA 不认。解决File - Project Structure - Modules - Dependencies - 加号 - Library - Server - 选 Apache Tomcat。这一步之后 Servlet 和 JSP 相关的类就能编译了这也解释了为什么之前说 Tomcat 环境必须在运行配置里配好。如果 IDEA 的 Library 列表里没有 Tomcat先去Settings - Build Tools - Application Servers里添加 Tomcat 安装目录。5.5 MySQL 8.0 用 5.1.48 驱动时区报错现象运行程序时抛异常堆栈里有java.sql.SQLException: The server time zone value Öйú±ê׼ʱ¼ä is unrecognized。原因MySQL 8.0 默认时区是SYSTEM而 5.1.48 驱动解析不了这种时区表示。解决连接串加参数serverTimezoneAsia/Shanghai或者执行 SQLSET GLOBAL time_zone 8:00。注意 5.1.48 驱动连接 MySQL 8.0 虽然能工作但建议有条件的话把驱动换到 8.0. 3x 版本因为 5.x 驱动在 MySQL 8 的认证协议上可能会有兼容性问题——MySQL 8 默认的caching_sha2_password加密方式 5.x 驱动是不认的报错表现为Unable to load authentication plugin caching_sha2_password。遇到这个要么把 MySQL 用户改回mysql_native_password要么升级驱动。6. 进阶用法把这个增删改查项目改造成通用 DAO 的套路拿到这个项目除了用来看懂 JSP Servlet 的请求流转最有价值的进阶玩法就是把它从“单人单表”改成“通用基础版”。学生信息管理系统本质上就是围绕student这张表的 CRUD。如果你理解了它的 DAO 写法可以顺手把它抽象成一个通用 DAO用泛型加反射处理任意一张表的基本操作。我在拿到这类项目时第一件事就是把每个表的增删改查同时抽象出来后面再写别的 JavaWeb 作业基本就是复制粘贴改表名。具体思路是这样的定义一个泛型接口BaseDaoT里面有findById(Integer id)、findAll()、insert(T obj)、update(T obj)、deleteById(Integer id)五个方法然后用一个反射工具类把实体类的字段名和数据库列名对应起来。SQL 语句可以在运行时拼出来字段列表从ClassT的getDeclaredFields()获取。这样做的好处是以后再要维护一张teacher表或者course表只需要建一个实体类继承或组合这个 BaseDao 就完事了。在编码时有几个小习惯我建议你保留第一PreparedStatement永远是首选绝对不用Statement拼字符串这个项目里也是这样写的别学老代码里的坏习惯第二Connection要么手动close()要么用try-with-resources别偷懒不关第三表字段命名一律下划线风格student_noJava 实体用驼峰studentNo映射的时候用AS别名或者写 ResultMap别折腾 MySQL 把字段名改成驼峰。我自己的习惯是拿到任何 JavaWeb 项目包不管代码多简单都做三步先把项目在本地完整跑通一遍记录报错再把web.xml从头到尾读一遍弄清楚每个 Servlet 映射关系最后把 DAO 层里所有 SQL 抽出来和数据库表结构比对。做完这三步项目里几乎不会再有看不懂的地方。所以最后这层意思很直接这份资源对新手来说完全够得着对老手来说也是一个很好的参考——老项目的每一行代码都服务于“能跑”而不是“炫技”。把那几个坑避开、把部署链路走通再顺手把它改造成连表查询或带分页的版本这个资源就真正吃透了。希望帮到你。本文还有配套的精品资源点击获取