Java servlet + jsp 实现的图书管理系统
立即下载
资源介绍:
这是使用servlet+jsp+mysql实现的一个图书管理系统,本图书管理系统主要注重后台逻辑
首页为图书搜索,图书搜索采用分页查询,查询后的结果使用图表展示。展示的图表中有借阅按钮,当用户点击借阅,在对应的借阅表中会插入相应的字段。当然,会判断是否登录,所以,本图书管理系统有最基本的登录验证系统,分为普通用户登录和管理员登录,登录成功进入管理后台首页,失败则给出提示。在本系统中,普通用户只具有查询图书和借阅图书的功能,而管理员具有增删改查,对图书的增加、修改、删除,此外,本项目还具有一次添加多本书的操作。本项目设计美观,采用最新的MySQL8.0数据库存放数据,项目中还使用了echarts图表丰富项目,使用字体图标来美化样式。认真学习此项目,你会学会如何在servlet中使用分页查询和在项目中使用ajax来实现一次添加多本书籍的操作。
package BookManage;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
@WebServlet(name = "BookAddMutServlet",urlPatterns = "/BookAddMutServlet")
public class BookAddMutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public BookAddMutServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
// 解析JSON数据
JsonArray jsonArray = new Gson().fromJson(req.getReader(), JsonArray.class);
List books = new ArrayList<>();
for (JsonElement element : jsonArray) {
if (element.isJsonObject()) {
JsonObject bookObject = element.getAsJsonObject();
// 添加非空检查
String bookName = bookObject.has("book_name") ? bookObject.get("book_name").getAsString() : "";
String isbn = bookObject.has("book_isbn") ? bookObject.get("book_isbn").getAsString() : "";
float price = bookObject.has("book_price") && !bookObject.get("book_price").isJsonNull() ? bookObject.get("book_price").getAsFloat() : 0F;
int count = bookObject.has("book_count") && !bookObject.get("book_count").isJsonNull() ? bookObject.get("book_count").getAsInt() : 0;
Book book = new Book();
book.setBookname(bookName);
book.setISBN(isbn);
book.setPrice(price);
book.setBook_count(count);
// 可能需要进一步判断book对象的完整性,决定是否添加到列表
if (!bookName.isEmpty() && !isbn.isEmpty() && price > 0 && count > 0) {
books.add(book);
} else {
// 记录或处理不完整数据的情况
System.out.println("不完整的书籍信息被忽略");
}
}
}
if (books.isEmpty()) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
resp.getWriter().write("没有要添加的书籍信息");
return;
}
// 批量插入数据库
boolean success = insertBooks(books);
if (success) {
resp.getWriter().write("批量添加书籍成功");
} else {
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
resp.getWriter().write("批量添加书籍失败");
}
} catch (Exception e) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
resp.getWriter().write("请求错误:" + e.getMessage());
}
}
// private boolean insertBooks(List books) {
// try (Connection connection = JDBCUtils.getConnection();
// PreparedStatement pstmt = connection.prepareStatement("INSERT INTO bookinfo VALUES (null,?, ?, ?, ?)")) {
// connection.setAutoCommit(false);
// for (Book book : books) {
// pstmt.setString(1, book.getBookname());
// pstmt.setString(2, book.getISBN());
// pstmt.setFloat(3, book.getPrice());
// pstmt.setInt(4, book.getBook_count());
// pstmt.addBatch();
// }
// pstmt.executeBatch();
// connection.commit();
// return true;
// } catch (ClassNotFoundException | SQLException e) {
// return false;
// }
// }
private boolean insertBooks(List books) {
try (Connection connection = JDBCUtils.getConnection();
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO bookinfo VALUES (null,?, ?, ?, ?)")) {
connection.setAutoCommit(false); // 开启事务
for (Book book : books) {
pstmt.setString(1, book.getBookname());
pstmt.setString(2, book.getISBN());
pstmt.setFloat(3, book.getPrice());
pstmt.setInt(4, book.getBook_count());
pstmt.addBatch();
}
try {
pstmt.executeBatch(); // 执行批量插入
connection.commit(); // 提交事务
return true;
} catch (SQLException e) {
connection.rollback(); // 发生异常时回滚事务
throw e; // 再次抛出异常以便上层调用者可以进一步处理或记录日志
}
} catch (ClassNotFoundException | SQLException e) {
// 记录日志或进行其他错误处理
return false;
}
}
}
资源文件列表:
BookManage.zip 大约有365个文件