图书管理系统 (JavaWeb - Servlet + MiniUI + JDBC)
项目介绍
这是一个基于 JavaWeb 技术栈实现的简单图书管理系统。它使用了经典的 Servlet + HTML + MiniUI + JDBC 架构,并结合了 MiniUI 前端框架来构建用户界面。系统实现了用户注册、登录、图书的增删改查等核心功能,并区分了管理员和普通用户权限。
本项目旨在演示一个基础的、非 Maven 构建的 JavaWeb 应用的开发流程。
技术栈
- 后端:
- Java (Servlet API - javax.*)
- JDBC (用于数据库连接)
- 前端:
- HTML
- MiniUI (jQuery MiniUI - 前端 UI 框架)
- 数据库:
- MySQL 5.7+ (SQL 脚本兼容 MySQL 5.7 及以上版本)
- Web 容器:
- Apache Tomcat (或其他兼容 Servlet 3.0+ 的容器)
- 构建:
- 无构建工具 (手动管理 JAR 包)
核心功能
- 用户认证:
- 用户注册
- 用户登录
- 用户登出
- 角色权限:
- 管理员 (admin): 可以查看和管理所有用户的图书信息。
- 普通用户 (user): 只能查看和管理自己添加的图书信息。
- 图书管理 (CRUD):
- 添加图书: 用户可以添加新的图书信息(书名、作者、出版社、ISBN)。
- 查看图书: 用户可以查看图书列表(管理员看所有,普通用户看自己的)。列表支持分页、排序和过滤。
- 编辑图书: 用户可以修改已存在的图书信息(管理员改所有,普通用户改自己的)。
- 删除图书: 用户可以删除图书(管理员删所有,普通用户删自己的)。
- 界面:
- 使用 MiniUI 框架构建统一风格的界面,包括登录页、注册页、主界面布局(页头、菜单、内容区、页脚)、数据表格、表单等。
- 所有界面文案均为中文。
项目特点
- 传统 Java EE 结构: 使用
javax.servlet.*包,适合学习和理解 Servlet 基础。 - 无 Maven: 依赖的 JAR 包需要手动下载并放置到
WebContent/WEB-INF/lib目录下。 - Servlet 作为控制器: 所有的业务请求都通过 Servlet 进行处理和转发,JSP 仅作为视图展示。
- DAO 模式: 使用 Data Access Object (DAO) 模式封装数据库操作,使业务逻辑和数据访问分离。
- JDBC 连接: 使用纯 JDBC 进行数据库交互,包含一个简单的
DBUtil类来管理连接。 - MiniUI 集成: 前端使用 MiniUI 快速构建功能性界面,如图书列表的 DataGrid 和增改操作的 Form。
- 角色控制: 在 Servlet 和 DAO 层实现了基于用户角色的数据访问控制。
- UTF-8 编码: 前后端均设置为 UTF-8 编码,以支持中文。
- 独立表单页: 添加和编辑图书使用同一个独立的
bookForm.jsp页面,与列表页分离。
如何运行
- 环境准备:
- 安装 JDK 8 或更高版本。
- 安装 Apache Tomcat 7 或更高版本。
- 安装 MySQL 5.7 或更高版本数据库。
- 数据库设置:
- 启动 MySQL 服务。
- 创建一个数据库,例如
book_management_system(字符集推荐utf8mb4)。 - 执行项目根目录下的
database.sql文件,创建users和books表,并插入初始数据(包含一个 admin/admin 账号)。 - 重要: 打开
src/com/example/bookmanagement/util/DBUtil.java文件,修改URL,USER,PASSWORD常量,使其匹配您的数据库连接信息。
- 下载依赖:
- 下载 MySQL Connector/J (JDBC 驱动),例如
mysql-connector-java-8.0.x.jar或适用于 MySQL 5.7 的mysql-connector-java-5.1.x.jar。 - 下载 MiniUI 框架 (www.miniui.com/)。解压后会得到
scripts(包含 js),themes(包含 css),images等目录。 - 下载 Gson 库 (用于在 JSP 中方便地将 Java List 转为 JSON),例如
gson-2.8.9.jar(mvnrepository.com/artifact/co…)。
- 下载 MySQL Connector/J (JDBC 驱动),例如
- 放置依赖:
- 将下载的
mysql-connector-java-*.jar和gson-*.jar复制到项目的WebContent/WEB-INF/lib目录下。 - 将 MiniUI 解压后得到的
scripts/miniui目录重命名为js/miniui并复制到WebContent下。 - 将 MiniUI 解压后得到的
themes目录重命名为css/miniui并复制到WebContent下。 - 将 MiniUI 解压后得到的
images目录复制到WebContent下。 - 最终
WebContent目录下应有css/miniui,js/miniui,images三个目录。
- 将下载的
- 部署项目:
- 将整个项目文件夹(例如
BookManagementSystem)复制到 Tomcat 的webapps目录下。 - 或者,在 Eclipse/IDEA 等 IDE 中,配置 Tomcat 服务器,并将该项目添加(Add)到服务器进行部署。
- 将整个项目文件夹(例如
- 启动 Tomcat: 启动 Tomcat 服务器。
- 访问系统:
- 在浏览器中访问
http://localhost:8080/BookManagementSystem/(假设 Tomcat 端口为 8080,项目部署名为BookManagementSystem)。 - 您应该能看到登录页面。
- 使用默认管理员账号
admin/admin登录,或注册新用户后登录。
- 在浏览器中访问
注意事项
- 密码安全: 本示例为了简化,直接在数据库中存储了明文密码,并在代码中进行了明文比较。在实际生产环境中,绝不能这样做! 应该使用安全的哈希算法(如 bcrypt, scrypt, Argon2 或至少 SHA-256 加盐)存储密码哈希值,并在登录时比较哈希值。
- 错误处理: 示例中的错误处理比较基础,主要是在控制台打印异常或在页面上显示简单的错误消息。生产系统需要更健壮的错误处理和日志记录机制。
- SQL 注入: 代码中使用了
PreparedStatement,这有助于防止 SQL 注入。应始终优先使用PreparedStatement而不是拼接 SQL 字符串。 - 并发: 示例未特别处理高并发场景下的问题(如 DAO 或 Util 类中的线程安全问题,尽管当前实现看起来是线程安全的)。
- 依赖管理: 手动管理 JAR 包在大型项目中会变得困难,推荐使用 Maven 或 Gradle 进行依赖管理和项目构建。