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 @@ + + + + diff --git a/webapp/WEB-INF/lib/mysql-connector-j-8.0.32.jar b/webapp/WEB-INF/lib/mysql-connector-j-8.0.32.jar new file mode 100644 index 0000000..184327c Binary files /dev/null and b/webapp/WEB-INF/lib/mysql-connector-j-8.0.32.jar differ diff --git a/webapp/application.jsp b/webapp/application.jsp new file mode 100644 index 0000000..2b83f96 --- /dev/null +++ b/webapp/application.jsp @@ -0,0 +1,21 @@ +<%@ page contentType="text/html;charset=gb2312" %> +<% + int number = 0; + Integer num =(Integer)application.getAttribute("num"); + if(num==null){ + application.setAttribute("num",new Integer(number)); + } + else{ + number = num.intValue()+1; + application.setAttribute("num",new Integer(number)); + } + %> +application example + +
applicationʾ +
+
+ҳļʵ·ǣ
<%=application.getRealPath("application.jsp") %>
+applicationбnumֵΪ<%=application.getAttribute("num") %> + + diff --git a/webapp/bookInsert.jsp b/webapp/bookInsert.jsp new file mode 100644 index 0000000..a89f23d --- /dev/null +++ b/webapp/bookInsert.jsp @@ -0,0 +1,21 @@ +<%@ page contentType="text/html; charset=gb2312" %> + Book Insert + + +

ͼϢ

+<% if(request.getAttribute("result")!=null) + out.print(request.getAttribute("result")); +%> +
+ + + + + + + + + +
+
+ diff --git a/webapp/bookQuery.jsp b/webapp/bookQuery.jsp new file mode 100644 index 0000000..76b317c --- /dev/null +++ b/webapp/bookQuery.jsp @@ -0,0 +1,13 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + +图书查询 + +
+ 请输入书号: + + +
+

查询所有图书

+ + diff --git a/webapp/displayBook.jsp b/webapp/displayBook.jsp new file mode 100644 index 0000000..dfdf675 --- /dev/null +++ b/webapp/displayBook.jsp @@ -0,0 +1,23 @@ +<%@ page contentType="text/html; charset=gb2312" %> +<%@ page import=" com.demo.BookBean"%> + + + + + + + + + + + + + + + + + + + +
:
:
:
:
۸:
+ diff --git a/webapp/error.jsp b/webapp/error.jsp new file mode 100644 index 0000000..a967c3e --- /dev/null +++ b/webapp/error.jsp @@ -0,0 +1,4 @@ +<%@ page contentType="text/html; charset=gb2312" %> + + 鲻ڡ + diff --git a/webapp/expection.jsp b/webapp/expection.jsp new file mode 100644 index 0000000..c91cac0 --- /dev/null +++ b/webapp/expection.jsp @@ -0,0 +1,23 @@ +<%@ page contentType="text/html;charset=gb2312" %> +<%@ page isErrorPage="true" %> +<%@ page import="java.io.*" %> + + +Exception Example + +

exceptionʹʾ

+
+ +
+<% + exception.printStackTrace(); + StringWriter sout = new StringWriter(); + PrintWriter pout = new PrintWriter(sout); + exception.printStackTrace(pout); + %> +
+   <%= 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"%> + + + + + 图书信息插入 + + +

图书信息录入

+
+ 书号:
+ 书名:
+ 作者:
+ 出版社:
+ 单价:
+ +
+ + <%-- 显示操作结果 --%> + <% + String result = (String)request.getAttribute("result"); + if(result != null) { + out.println("

" + 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" %> +Out Example + +

outʹ

+<% + out.print("ѧϰʹout"); + int buffer = out.getBufferSize(); + int available = out.getRemaining(); + %> +
+ outΪ<%= out.getClass().getName() %>
+ BufferSize=<%= buffer %>
+ Available=<%= available %> + diff --git a/webapp/request.jsp b/webapp/request.jsp new file mode 100644 index 0000000..a18d0b4 --- /dev/null +++ b/webapp/request.jsp @@ -0,0 +1,13 @@ +<%@ page contentType="text/html;charset=gb2312" %> +<% + String remoteAddr = request.getRemoteAddr(); + String remoteHost = request.getRemoteHost(); + int serverPort = request.getServerPort(); + %> + + +IPַΪ<%=remoteAddr %>
+Ϊ<%=remoteHost %>
+Ķ˿ںΪ<%=serverPort %>
+ + diff --git a/webapp/session.jsp b/webapp/session.jsp new file mode 100644 index 0000000..588d149 --- /dev/null +++ b/webapp/session.jsp @@ -0,0 +1,12 @@ +<%@ page contentType="text/html;charset=gb2312" %> +<%@ page session="true" %> +<% + session.setAttribute("user","ŷ"); +%> + + + +ĻỰIDǣ<%=session.getId()%>
+sessionдŵıuserֵΪ<%=session.getAttribute("user")%> + + diff --git a/webapp/syntax_error.jsp b/webapp/syntax_error.jsp new file mode 100644 index 0000000..860050e --- /dev/null +++ b/webapp/syntax_error.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=gb2312" %> +<%@ page import="java.util.*" %> +<%@ page errorPage="exception.jsp" %> + +<% + Calendar rightNow = null; + + //д뽫NullPointerException쳣 + rightNow.getTime();