java第05次作业

This commit is contained in:
lotus 2024-12-09 22:17:48 +08:00
parent 3c8db183a5
commit 19242725b7
19 changed files with 594 additions and 0 deletions

88
java/com/dao/BookDao.java Normal file
View File

@ -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();
}
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Context reloadable="true">
<Resource
name="jdbc/demo"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="root"
maxWait="5000"
driverClassName="com.mysql.cj.jdbc.Driver"
password="lotus"
url="jdbc:mysql://47.242.181.61:33060/demo?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"/>
</Context>

Binary file not shown.

21
webapp/application.jsp Normal file
View File

@ -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));
}
%>
<html><head><title>application example</title></head>
<body>
<center><font color="#0000ff" size="5">application对象示例</font>
</center>
<hr>
本页面文件的实际路径是:<br><%=application.getRealPath("application.jsp") %><br>
application对象中变量num的值为<%=application.getAttribute("num") %>
</body>
</html>

21
webapp/bookInsert.jsp Normal file
View File

@ -0,0 +1,21 @@
<%@ page contentType="text/html; charset=gb2312" %>
<html><head> <title>Book Insert</title>
</head>
<body>
<h3>请输入图书信息:</h3>
<% if(request.getAttribute("result")!=null)
out.print(request.getAttribute("result"));
%>
<form action = "bookinsert.do" method = "post">
<table>
<tr><td>书号</td> <td><input type="text" name="bookid" ></td></tr>
<tr><td>书名</td><td><input type="text" name="title"></td></tr>
<tr><td>作者</td><td><input type="text" name="author" ></td></tr>
<tr><td>出版社</td><td><input type="text" name="publisher" ></td></tr>
<tr><td>单价</td><td><input type="text" name="price" ></td></tr>
<tr><td><input type="submit" value="确定" ></td>
<td><input type="reset" value="重置" ></td>
</tr>
</table>
</form>
</body></html>

13
webapp/bookQuery.jsp Normal file
View File

@ -0,0 +1,13 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head><title>图书查询</title></head>
<body>
<form action = "BookQueryServlet" method="post">
请输入书号:
<input type = "text" name="bookid" size="15">
<input type = "submit" value = "确定">
</form>
<p><a href="BookQueryServlet" >查询所有图书</a></p>
</body>
</html>

23
webapp/displayBook.jsp Normal file
View File

@ -0,0 +1,23 @@
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import=" com.demo.BookBean"%>
<jsp:useBean id="book" class="com.demo.BookBean" scope="session" />
<html><body>
<table border="0">
<tr><td>书号:</td>
<td><jsp:getProperty name="book" property="bookid"/></td>
</tr>
<tr><td>书名: </td>
<td><jsp:getProperty name="book" property="title"/></td>
</tr>
<tr><td>作者:</td>
<td><jsp:getProperty name="book" property="author"/></td>
</tr>
<tr><td>出版社:</td>
<td><jsp:getProperty name="book" property="publisher"/></td>
</tr>
<tr><td>价格:</td>
<td><jsp:getProperty name="book" property="price"/></td>
</tr>
</table>
</body></html>

4
webapp/error.jsp Normal file
View File

@ -0,0 +1,4 @@
<%@ page contentType="text/html; charset=gb2312" %>
<html><body>
该书不存在。<a href="/helloweb/bookQuery.jsp">返回</a>
</body></html>

23
webapp/expection.jsp Normal file
View File

@ -0,0 +1,23 @@
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page isErrorPage="true" %>
<%@ page import="java.io.*" %>
<html>
<head><title>Exception Example</title></head>
<body>
<p>exception变量使用示例</p>
<hr size='0'>
<font color="#ff0000" size="-1">
发生了下面错误<br>
<%
exception.printStackTrace();
StringWriter sout = new StringWriter();
PrintWriter pout = new PrintWriter(sout);
exception.printStackTrace(pout);
%>
<pre>
<%= sout.toString() %>
</pre>
</body>
</html>

27
webapp/insertBook.jsp Normal file
View File

@ -0,0 +1,27 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书信息插入</title>
</head>
<body>
<h2>图书信息录入</h2>
<form action="BookInsertServlet" method="post">
书号:<input type="text" name="bookid" value="111"><br>
书名:<input type="text" name="title" value="Java Web编程技术"><br>
作者:<input type="text" name="author" value="沈泽刚"><br>
出版社:<input type="text" name="publisher" value="清华大学出版社"><br>
单价:<input type="text" name="price" value="39.00"><br>
<input type="submit" value="提交">
</form>
<%-- 显示操作结果 --%>
<%
String result = (String)request.getAttribute("result");
if(result != null) {
out.println("<p>" + result + "</p>");
}
%>
</body>
</html>

14
webapp/out.jsp Normal file
View File

@ -0,0 +1,14 @@
<%@ page contentType="text/html;charset=gb2312" %>
<html><head><title>Out Example</title></head>
<body>
<h2>out对象的使用</h2>
<%
out.print("学习使用out对象");
int buffer = out.getBufferSize();
int available = out.getRemaining();
%>
<br>
out对象的类型为<%= out.getClass().getName() %><br>
BufferSize=<%= buffer %><br>
Available=<%= available %>
</body></html>

13
webapp/request.jsp Normal file
View File

@ -0,0 +1,13 @@
<%@ page contentType="text/html;charset=gb2312" %>
<%
String remoteAddr = request.getRemoteAddr();
String remoteHost = request.getRemoteHost();
int serverPort = request.getServerPort();
%>
<html>
<body>
你的IP地址为<%=remoteAddr %><br>
你的主机名为:<%=remoteHost %><br>
服务器的端口号为:<%=serverPort %><br>
</body>
</html>

12
webapp/session.jsp Normal file
View File

@ -0,0 +1,12 @@
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page session="true" %>
<%
session.setAttribute("user","欧阳清风");
%>
<html>
<body>
您的会话ID是<%=session.getId()%><br>
session对象中存放的变量user的值为<%=session.getAttribute("user")%>
</body>
</html>

9
webapp/syntax_error.jsp Normal file
View File

@ -0,0 +1,9 @@
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page errorPage="exception.jsp" %>
<%
Calendar rightNow = null;
//下行代码将产生NullPointerException异常
rightNow.getTime();