diff --git a/java/com/dao/BookDao.java b/java/com/dao/BookDao.java
new file mode 100644
index 0000000..499f3e6
--- /dev/null
+++ b/java/com/dao/BookDao.java
@@ -0,0 +1,88 @@
+package com.dao;
+
+import java.sql.*;
+import javax.sql.*;
+import javax.naming.*;
+import com.demo.BookBean;
+
+public class BookDao {
+ private static InitialContext context = null;
+ private DataSource dataSource = null;
+
+ public BookDao() {
+ try {
+ if (context == null) {
+ context = new InitialContext();
+ }
+ dataSource = (DataSource)context.lookup("java:comp/env/jdbc/demo");
+ } catch (NamingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // 根据书号查询图书信息
+ public BookBean searchBook(String bookid) {
+ Connection dbconn = null;
+ PreparedStatement pstmt = null;
+ ResultSet rst = null;
+ BookBean book = new BookBean();
+
+ try {
+ dbconn = dataSource.getConnection();
+ pstmt = dbconn.prepareStatement("SELECT * FROM books WHERE bookid=?");
+ pstmt.setString(1, bookid);
+ rst = pstmt.executeQuery();
+
+ if (rst.next()) {
+ book.setBookid(rst.getString("bookid"));
+ book.setTitle(rst.getString("title"));
+ book.setAuthor(rst.getString("author"));
+ book.setPublisher(rst.getString("publisher"));
+ book.setPrice(rst.getDouble("price"));
+ return book;
+ } else {
+ return null;
+ }
+ } catch (SQLException se) {
+ se.printStackTrace();
+ return null;
+ } finally {
+ try {
+ if (rst != null) rst.close();
+ if (pstmt != null) pstmt.close();
+ if (dbconn != null) dbconn.close();
+ } catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+ }
+
+ // 插入一本图书记录
+ public boolean insertBook(BookBean book) {
+ Connection dbconn = null;
+ PreparedStatement pstmt = null;
+
+ try {
+ dbconn = dataSource.getConnection();
+ pstmt = dbconn.prepareStatement("INSERT INTO books VALUES(?,?,?,?,?)");
+ pstmt.setString(1, book.getBookid());
+ pstmt.setString(2, book.getTitle());
+ pstmt.setString(3, book.getAuthor());
+ pstmt.setString(4, book.getPublisher());
+ pstmt.setDouble(5, book.getPrice());
+
+ int result = pstmt.executeUpdate();
+ return result > 0;
+ } catch (SQLException se) {
+ se.printStackTrace();
+ return false;
+ } finally {
+ try {
+ if (pstmt != null) pstmt.close();
+ if (dbconn != null) dbconn.close();
+ } catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/java/com/demo/BookBean.java b/java/com/demo/BookBean.java
new file mode 100644
index 0000000..e939f10
--- /dev/null
+++ b/java/com/demo/BookBean.java
@@ -0,0 +1,64 @@
+package com.demo;
+
+public class BookBean {
+ // 定义私有属性
+ private String bookid;
+ private String title;
+ private String author;
+ private String publisher;
+ private double price;
+
+ // 无参数构造方法
+ public BookBean() {
+ }
+
+ // 带参数构造方法
+ public BookBean(String bookid, String title, String author, String publisher, double price) {
+ this.bookid = bookid;
+ this.title = title;
+ this.author = author;
+ this.publisher = publisher;
+ this.price = price;
+ }
+
+ // Getter和Setter方法
+ public String getBookid() {
+ return bookid;
+ }
+
+ public void setBookid(String bookid) {
+ this.bookid = bookid;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getPublisher() {
+ return publisher;
+ }
+
+ public void setPublisher(String publisher) {
+ this.publisher = publisher;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+}
\ No newline at end of file
diff --git a/java/com/demo/BookInsertServlet.java b/java/com/demo/BookInsertServlet.java
new file mode 100644
index 0000000..de22fe8
--- /dev/null
+++ b/java/com/demo/BookInsertServlet.java
@@ -0,0 +1,64 @@
+package com.demo;
+
+import java.io.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import com.demo.BookBean;
+import com.dao.BookDao;
+import javax.servlet.annotation.WebServlet;
+
+@WebServlet("/BookInsertServlet")
+public class BookInsertServlet extends HttpServlet {
+ public void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ // 设置请求和响应的字符编码
+ request.setCharacterEncoding("UTF-8");
+ response.setCharacterEncoding("UTF-8");
+ response.setContentType("text/html;charset=UTF-8");
+
+ String message = null;
+ try {
+ // 获取并验证请求参数
+ String bookid = request.getParameter("bookid");
+ String title = request.getParameter("title");
+ String author = request.getParameter("author");
+ String publisher = request.getParameter("publisher");
+ String priceStr = request.getParameter("price");
+
+ // 参数验证
+ if (bookid == null || title == null || author == null ||
+ publisher == null || priceStr == null ||
+ bookid.trim().isEmpty() || title.trim().isEmpty() ||
+ author.trim().isEmpty() || publisher.trim().isEmpty() ||
+ priceStr.trim().isEmpty()) {
+ message = "请填写完整的图书信息!";
+ request.setAttribute("result", message);
+ request.getRequestDispatcher("/bookInsert.jsp").forward(request, response);
+ return;
+ }
+
+ float price = Float.parseFloat(priceStr);
+
+ // 创建图书对象
+ BookBean book = new BookBean(bookid, title, author, publisher, price);
+ BookDao bookdao = new BookDao();
+ boolean success = bookdao.insertBook(book);
+
+ message = success ? "成功插入一条记录!" : "插入记录错误!";
+
+ } catch (NumberFormatException e) {
+ message = "价格格式不正确!";
+ } catch (Exception e) {
+ message = "系统错误:" + e.getMessage();
+ e.printStackTrace();
+ }
+
+ request.setAttribute("result", message);
+ request.getRequestDispatcher("/bookInsert.jsp").forward(request, response);
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ doPost(request, response);
+ }
+}
diff --git a/java/com/demo/BookQueryServlet.java b/java/com/demo/BookQueryServlet.java
new file mode 100644
index 0000000..b65c2c1
--- /dev/null
+++ b/java/com/demo/BookQueryServlet.java
@@ -0,0 +1,62 @@
+package com.demo;
+
+import java.io.IOException;
+import javax.servlet.*;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.*;
+import java.sql.*;
+
+@WebServlet("/BookQueryServlet")
+public class BookQueryServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ // 数据库连接信息常量
+// private static final String DB_URL = "jdbc:mysql://47.242.181.61:33060/demo?useSSL=false&serverTimezone=UTC";
+ private static final String DB_URL = "jdbc:mysql://47.242.181.61:33060/demo?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
+ private static final String DB_USER = "root";
+ private static final String DB_PASSWORD = "lotus";
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String bookid = request.getParameter("bookid");
+ if (bookid == null || bookid.trim().isEmpty()) {
+ request.setAttribute("error", "图书ID不能为空");
+ request.getRequestDispatcher("/error.jsp").forward(request, response);
+ return;
+ }
+
+ try (Connection conn = getConnection();
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM books WHERE bookid = ?");
+ ) {
+ pstmt.setString(1, bookid);
+
+ try (ResultSet rst = pstmt.executeQuery()) {
+ if (rst.next()) {
+ BookBean book = new BookBean();
+ book.setBookid(rst.getString("bookid"));
+ book.setTitle(rst.getString("title"));
+ book.setAuthor(rst.getString("author"));
+ book.setPrice(rst.getFloat("price"));
+ book.setPublisher(rst.getString("publisher"));
+
+ request.setAttribute("book", book);
+ request.getRequestDispatcher("/displayBook.jsp").forward(request, response);
+ } else {
+ request.setAttribute("error", "未找到ID为 " + bookid + " 的图书");
+ request.getRequestDispatcher("/error.jsp").forward(request, response);
+ }
+ }
+ } catch (Exception e) {
+ String errorMsg = "数据库操作失败: " + e.getMessage();
+ log(errorMsg, e);
+ request.setAttribute("error", errorMsg);
+ request.getRequestDispatcher("/error.jsp").forward(request, response);
+ }
+ }
+
+ private Connection getConnection() throws SQLException, ClassNotFoundException {
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ return DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
+ }
+}
diff --git a/java/com/demo/BookQueryServlet2.java b/java/com/demo/BookQueryServlet2.java
new file mode 100644
index 0000000..b26bd8d
--- /dev/null
+++ b/java/com/demo/BookQueryServlet2.java
@@ -0,0 +1,71 @@
+package com.demo;
+
+import java.io.*;
+import java.sql.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import com.demo.BookBean;
+import javax.sql.DataSource;
+import javax.naming.*;
+import javax.servlet.annotation.WebServlet;
+
+@WebServlet("/BookQueryServlet2")
+public class BookQueryServlet2 extends HttpServlet {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ Connection dbconn;
+
+ public void init() {
+ try {
+ Context context = new InitialContext();
+ DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/demo");
+ dbconn = ds.getConnection();
+ } catch(NamingException ne) {
+ log("数据源查找失败: " + ne);
+ } catch(SQLException se) {
+ log("数据库连接失败: " + se);
+ }
+ }
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ String bookid = request.getParameter("bookid");
+ try {
+ String sql = "SELECT * FROM books WHERE bookid = ?";
+ PreparedStatement pstmt = dbconn.prepareStatement(sql);
+ pstmt.setString(1, bookid);
+ ResultSet rst = pstmt.executeQuery();
+
+ if (rst.next()) {
+ BookBean book = new BookBean();
+ book.setBookid(rst.getString("bookid"));
+ book.setTitle(rst.getString("title"));
+ book.setAuthor(rst.getString("author"));
+ book.setPrice(rst.getDouble("price"));
+ book.setPublisher(rst.getString("publisher"));
+ request.getSession().setAttribute("book", book);
+ response.sendRedirect("/helloweb/displayBook.jsp");
+ } else {
+ response.sendRedirect("/helloweb/error.jsp");
+ }
+
+ rst.close();
+ pstmt.close();
+ } catch(SQLException e) {
+ e.printStackTrace();
+ response.sendRedirect("/helloweb/error.jsp");
+ }
+ }
+
+ public void destroy() {
+ try {
+ if (dbconn != null && !dbconn.isClosed()) {
+ dbconn.close();
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/java/com/demo/BookQueryServlet3.java b/java/com/demo/BookQueryServlet3.java
new file mode 100644
index 0000000..5e03334
--- /dev/null
+++ b/java/com/demo/BookQueryServlet3.java
@@ -0,0 +1,52 @@
+package com.demo;
+
+import java.io.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import com.demo.BookBean;
+import com.dao.BookDao;
+import javax.servlet.annotation.WebServlet;
+
+@WebServlet("/BookQueryServlet3")
+public class BookQueryServlet3 extends HttpServlet {
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ // 设置请求和响应的字符编码
+ request.setCharacterEncoding("UTF-8");
+ response.setCharacterEncoding("UTF-8");
+
+ // 获取请求参数
+ String bookid = request.getParameter("bookid");
+
+ // 参数验证
+ if (bookid == null || bookid.trim().isEmpty()) {
+ response.sendRedirect("/helloweb/errorPage.jsp");
+ return;
+ }
+
+ try {
+ // 查询图书信息
+ BookDao bookdao = new BookDao();
+ BookBean book = bookdao.searchBook(bookid);
+
+ if (book != null) {
+ // 将图书信息存储在会话中
+ request.getSession().setAttribute("book", book);
+ response.sendRedirect("/helloweb/displayBook.jsp");
+ } else {
+ response.sendRedirect("/helloweb/errorPage.jsp");
+ }
+ } catch (Exception e) {
+ // 记录异常信息
+ e.printStackTrace();
+ response.sendRedirect("/helloweb/errorPage.jsp");
+ }
+ }
+
+ // 处理GET请求
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ doPost(request, response);
+ }
+}
diff --git a/webapp/META-INF/context.xml b/webapp/META-INF/context.xml
new file mode 100644
index 0000000..5e0165b
--- /dev/null
+++ b/webapp/META-INF/context.xml
@@ -0,0 +1,13 @@
+
+
| : | +|
| : | +|
| : | +|
| : | +|
| ۸: | +
exceptionʹʾ
++ <%= sout.toString() %> ++ + + diff --git a/webapp/insertBook.jsp b/webapp/insertBook.jsp new file mode 100644 index 0000000..4e3f937 --- /dev/null +++ b/webapp/insertBook.jsp @@ -0,0 +1,27 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + +
" + result + "
"); + } + %> + + diff --git a/webapp/out.jsp b/webapp/out.jsp new file mode 100644 index 0000000..928567e --- /dev/null +++ b/webapp/out.jsp @@ -0,0 +1,14 @@ +<%@ page contentType="text/html;charset=gb2312" %> +