简介:这是一套可直接运行的图书管理系统源码,面向Java Web初学者、课程设计学生及需要快速搭建信息管理项目的开发者,用于实现图书借阅、归还、查询等自动化操作。系统采用JSP+Java+Tomcat+MySQL+Eclipse技术栈,后端由Java处理用户认证、图书检索与借阅状态更新等业务逻辑,前端通过JSP生成登录界面、图书列表与个人信息页,MySQL存储图书、用户及借阅记录,Tomcat负责请求转发与响应。压缩包共179个文件,约4.48MB,包含50个jsp页面、33个java源文件与33个class编译文件、15个jar依赖包,以及sql脚本、xml配置、properties资源文件和gif、jpg等静态素材,目录结构完整,导入Eclipse并配置好JDK、Tomcat与MySQL后即可部署运行。目前已有7177人学习下载,适合通过阅读源码理解DAO分层、数据库表设计与前后端协同流程,也可作为课程设计或毕业设计的参考模板,帮助开发者快速掌握Java Web项目的实际开发与调试方法。
1. 图书管理系统源码(jsp+java+tomcat+mysql+eclipse)能直接跑起来,到底省了谁的事
很多同学第一次接触 JavaWeb,都是从一套「图书管理系统源码(jsp+java+tomcat+mysql+eclipse)可以直接运行」开始的。它解决的不是图书管理本身,而是让你在本地把一条完整的链路跑通:Eclipse 里写 JSP 和 Servlet,Tomcat 负责容器,MySQL 存数据,浏览器访问页面。对课程设计、毕业设计、Java 入门练手的人来说,这套组合的价值在于「闭环」——你能看到登录、增删改查、分页、借还书这些动作真的落到数据库里。
但「可以直接运行」这句话有前提。它默认你的 JDK、Tomcat、MySQL 版本和源码作者一致,默认数据库脚本已经导入,默认项目编码是 UTF-8。任何一条不满足,你看到的就是 404、500 或者中文乱码。这篇笔记就按「拿到源码后怎么在 Eclipse 里跑通」的顺序,把环境、导入、数据库、排错、进阶改造讲清楚,新手能照着做,熟手能直接跳到参数和坑位那几节。
2. 环境先对齐:JDK、Tomcat、MySQL、Eclipse 的版本组合
2.1 为什么版本组合比「装最新版」更重要
JSP + Servlet 这套技术栈对版本很敏感。源码里如果用了javax.servlet.*包,那它跑在 Tomcat 9 及以下;如果用的是jakarta.servlet.*,那必须 Tomcat 10 以上。这两个包名不兼容,导错了项目直接编译不过。同样,MySQL 5.7 和 8.x 的驱动类名、连接 URL 参数都不一样,5.7 用com.mysql.jdbc.Driver,8.x 用com.mysql.cj.jdbc.Driver,还要加时区参数。
我一般会先看源码里WEB-INF/lib下的 jar 包名字,再决定装哪个版本。常见的老项目组合是 JDK 8 + Tomcat 8.5/9 + MySQL 5.7 + Eclipse 2021 左右的版本,这套最稳。下面这张表是我踩过坑之后总结的对应关系,照着选基本不会翻车。
| 组件 | 推荐版本 | 关键判断依据 |
|---|---|---|
| JDK | 8 或 11 | 源码pom.xml或.classpath里的编译级别 |
| Tomcat | 8.5 / 9 | 源码 import 的是javax.servlet |
| MySQL | 5.7 / 8.0 | 驱动 jar 名和连接 URL |
| Eclipse | 2021-09 及以上 | 需支持 Dynamic Web Project |
| 驱动 jar | mysql-connector-java 5.1.x / 8.0.x | 与 MySQL 版本匹配 |
2.2 装 JDK 和配置环境变量
先装 JDK,装完必须配JAVA_HOME,否则 Tomcat 启动脚本找不到 Java。Windows 下在系统环境变量里新建JAVA_HOME指向 JDK 安装目录,再把%JAVA_HOME%\bin加到Path里。验证命令:
java -version javac -version两条命令输出的版本号要一致。如果java有输出而javac提示找不到,说明你装的是 JRE 不是 JDK,或者 Path 里混进了别的 Java。这种情况 Tomcat 能启动,但 Eclipse 编译 JSP 会报错,属于典型的「看起来没事其实有事」。
2.3 Tomcat 的安装与 Eclipse 集成
Tomcat 建议下载 zip 免安装版,解压到没有中文和空格的路径,比如D:\dev\tomcat9。解压后在 Eclipse 里配置:Window → Preferences → Server → Runtime Environments → Add,选对应版本,指向解压目录。配好后在Servers视图新建一个实例,双击可以改端口。
端口冲突是高频问题。Tomcat 默认 8080,如果被占用,启动日志会报Address already in use。改conf/server.xml里的Connector port,或者用命令查占用:
netstat -ano | findstr :8080拿到 PID 后去任务管理器结束进程。注意别把 MySQL 的 3306 和 Tomcat 的 8005、8009 搞混,这三个端口各管各的。
2.4 MySQL 安装与建库
MySQL 装的时候记住 root 密码,字符集选utf8mb4。装完用命令行或 Navicat 连上,先建库再导数据:
CREATE DATABASE library DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE library; SOURCE D:/library.sql;SOURCE后面跟的是源码里那个.sql文件的绝对路径,路径里别带中文。导入完用SHOW TABLES;确认表都进来了。如果导入时报Unknown character set,说明脚本是老的utf8写法,把建库语句的字符集改成utf8再试。
3. 把源码导入 Eclipse 并跑通第一个页面
3.1 判断项目类型:Dynamic Web Project 还是 Maven
拿到源码先看根目录有没有pom.xml。有就是 Maven 项目,用Import → Existing Maven Projects导入;没有就是传统的 Dynamic Web Project,用Import → General → Existing Projects into Workspace。老一点的图书管理系统大多是后者,目录结构是src+WebContent,WebContent下有WEB-INF、jsp页面和静态资源。
导入后如果项目图标上有红叉,先别急着改代码,看Problems视图。常见原因是Targeted Runtime没配,右键项目Properties → Targeted Runtimes勾上你的 Tomcat。这一步不做,Eclipse 不知道用哪个容器编译,JSP 里的<%@ page %>标签会全部报错。
3.2 修改数据库连接配置
源码里的数据库配置一般在一个 properties 文件或者工具类里。搜jdbc关键字,找到类似下面的代码:
// DBUtil.java 或 db.properties String url = "jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"; String user = "root"; String password = "你的密码"; Class.forName("com.mysql.cj.jdbc.Driver");三个参数要改:库名library和你建的一致,user和password换成你自己的。serverTimezone这个参数在 MySQL 8 里必须加,不加会报The server time zone value is unrecognized。如果源码用的是 5.1 版驱动,驱动类名要改成com.mysql.jdbc.Driver,URL 里也不用加时区。
提示:改完配置先别启动,把
WEB-INF/lib下的 MySQL 驱动 jar 确认一遍。有的源码包里驱动是旧的,和你装的 MySQL 8 不匹配,直接换成mysql-connector-java-8.0.x.jar更省事。
3.3 部署到 Tomcat 并访问首页
右键项目Run As → Run on Server,选你的 Tomcat。Eclipse 会把项目部署到工作空间的.metadata目录下,启动日志里能看到Server startup in xxx ms。然后在浏览器访问:
http://localhost:8080/项目名/项目名默认是工程名,如果访问 404,先确认 URL 里的项目名对不对,再看WebContent下有没有index.jsp或login.jsp。如果首页能打开但点登录报 500,八成是数据库连不上,去看 Eclipse 控制台的异常堆栈,最上面那行通常就是根因。
4. 高频翻车点排查:从 404、500 到中文乱码
4.1 现象:启动 Tomcat 报 ClassNotFoundException
原因通常是WEB-INF/lib下缺 jar 包,或者 jar 包没被加到构建路径。Eclipse 里右键项目Build Path → Configure Build Path → Libraries,检查有没有缺失的库。如果是 Maven 项目,右键Maven → Update Project让它重新下载依赖。
还有一种情况是驱动类名写错。MySQL 8 的驱动类是com.mysql.cj.jdbc.Driver,写成老的com.mysql.jdbc.Driver在 8.x 驱动下会报ClassNotFoundException。解决就是改类名,或者把驱动换成 5.1 版。
4.2 现象:页面能开但查询数据是空的
先确认数据库里真有数据,用SELECT COUNT(*) FROM book;查一下。如果表里有数据但页面不显示,看 SQL 语句有没有写死条件,比如WHERE status=1而你的数据 status 都是 0。再检查 JSP 里的 EL 表达式,${book.name}这种如果取不到值,可能是实体类属性名和数据库字段名没对上,或者resultSet遍历时游标用错了。
4.3 现象:中文全部变成问号或乱码
这是编码问题,要三处一起改。第一处是数据库和表的字符集,建库时用utf8mb4。第二处是 JDBC URL 加characterEncoding=utf8。第三处是 JSP 页面头部:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>三处都对了还乱码,就去检查 Eclipse 的Window → Preferences → General → Workspace → Text file encoding是不是 UTF-8。有一处是 GBK,中文就会在某个环节断掉。
4.4 现象:修改 JSP 后刷新页面没变化
Tomcat 默认会缓存编译后的 JSP。Eclipse 里双击 Servers 视图的 Tomcat,在Modules标签确认项目在列表里,然后在Overview里把Server Options的Serve modules without publishing勾上。还不行就清一下 Tomcat 的 work 目录,或者右键 TomcatClean。这个坑很玄学,有时候重启一次就好了,但根因基本都是缓存。
4.5 现象:端口被占用导致启动失败
前面提过 8080 冲突,这里补充一个:Eclipse 里如果之前启动过没正常关闭,进程可能还挂着。去任务管理器找javaw.exe结束掉,或者改 Tomcat 的server.xml把Connector port改成 8081。改完记得同步改访问 URL 的端口。
5. 在跑通的基础上做二次改造:分页、借还书与权限
5.1 给图书列表加分页
原生的图书管理系统往往一次性查全表,数据一多页面就卡。分页的核心是LIMIT加两个参数:当前页和每页条数。先算总数,再查当前页数据:
SELECT COUNT(*) FROM book; SELECT * FROM book LIMIT 0, 10;Java 侧用一个PageBean封装total、pageSize、currentPage、list。JSP 里渲染上一页/下一页时,用${pageBean.currentPage - 1}和${pageBean.currentPage + 1}拼 URL。注意边界:第一页不能再往前,最后一页不能再往后,判断逻辑写在 Servlet 里比写在 JSP 里干净。
5.2 借还书的状态流转
借书本质是往borrow表插一条记录,同时把book表的库存减一。还书是更新borrow表的归还时间,再把库存加一。这两步必须放在一个事务里,否则可能出现「记录插了但库存没减」的脏数据。用 JDBC 的话手动setAutoCommit(false),成功后commit,异常rollback。
Connection conn = DBUtil.getConnection(); try { conn.setAutoCommit(false); // 插入借阅记录 // 更新图书库存 conn.commit(); } catch (Exception e) { conn.rollback(); e.printStackTrace(); } finally { conn.close(); }参数上要注意库存不能减到负数,更新前先SELECT stock FROM book WHERE id=? FOR UPDATE加行锁,判断stock > 0再执行。并发不高的小系统这样够用,真上量就得考虑乐观锁或者队列。
5.3 用过滤器统一处理登录和编码
每个 Servlet 都写一遍编码设置太啰嗦,用 Filter 统一处理。在web.xml里配一个CharacterEncodingFilter,把请求和响应的编码都设成 UTF-8。再配一个登录校验 Filter,拦截/admin/*路径,没登录就跳回登录页。这样新增页面时不用重复写校验逻辑,也避免了漏配导致的越权访问。
注意:Filter 的
url-pattern别写成/*把登录页和静态资源也拦了,否则会出现「登录页自己要求登录」的死循环。排除登录接口和 css、js、图片路径。
6. 从能跑到好用:几个让这套源码更值钱的技巧
跑通只是起点,真正让这套图书管理系统拿得出手的,是你能在它上面加东西。我一般会先做一件事:把数据库连接、分页参数、文件上传路径这些可变项抽到一个config.properties里,代码里只读配置不写死。这样换台机器部署,改一个文件就行,不用满项目搜localhost。
第二个技巧是给关键操作加日志。不用上重型框架,JDK 自带的java.util.logging或者 Log4j 就够。在借书、还书、删除这些动作里打一行日志,出问题时能顺着时间线还原操作。我吃过亏,有次数据对不上,翻遍代码找不到原因,最后发现是有人直接改了数据库,如果有日志五分钟就能定位。
第三个是验证方法。改完功能别只看页面,用SELECT去数据库核对结果。比如借书后查borrow表有没有新记录、book表库存有没有减。页面显示和数据库一致,才算真的改对了。这个习惯帮我省了很多「页面看着对、数据其实错」的后悔药。
最后一个技巧关于部署。Eclipse 里跑通不代表能打包给别人用。右键项目Export → WAR file,把打出来的 war 丢到 Tomcat 的webapps目录,启动后访问http://localhost:8080/war包名/。这一步能暴露很多 Eclipse 环境特有的问题,比如依赖没打进WEB-INF/lib、路径写成了绝对路径。能打成 war 独立部署,这套源码才算真正属于你。
希望帮到你。
本文还有配套的精品资源,点击获取